home *** CD-ROM | disk | FTP | other *** search
/ Source Code 1994 March / Source_Code_CD-ROM_Walnut_Creek_March_1994.iso / compsrcs / misc / volume31 / zip19 / part05 < prev    next >
Encoding:
Text File  |  1992-08-22  |  60.6 KB  |  1,290 lines

  1. Newsgroups: comp.sources.misc
  2. From: zip-bugs@cs.ucla.edu (Info-ZIP group)
  3. Subject:  v31i097:  zip19 - Info-ZIP portable Zip, version 1.9, Part05/11
  4. Message-ID: <1992Aug23.064651.29195@sparky.imd.sterling.com>
  5. X-Md4-Signature: f24a52a163a98ace3a9e3abdcc1ead76
  6. Date: Sun, 23 Aug 1992 06:46:51 GMT
  7. Approved: kent@sparky.imd.sterling.com
  8.  
  9. Submitted-by: zip-bugs@cs.ucla.edu (Info-ZIP group)
  10. Posting-number: Volume 31, Issue 97
  11. Archive-name: zip19/part05
  12. Supersedes: zip: Volume 23, Issue 88-96
  13. Environment: UNIX, VMS, OS/2, MS-DOS, MACINTOSH, WIN-NT, LINUX, MINIX, XOS, !AMIGA, ATARI, symlink, SGI, DEC, Cray, Convex, Amdahl, Sun, PC
  14.  
  15. #! /bin/sh
  16. # This is a shell archive.  Remove anything before this line, then feed it
  17. # into a shell via "sh file" or similar.  To overwrite existing files,
  18. # type "sh file -c".
  19. # The tool that generated this appeared in the comp.sources.unix newsgroup;
  20. # send mail to comp-sources-unix@uunet.uu.net if you want that tool.
  21. # Contents:  deflate.c msdos/tcconfig.tc.UU os2/os2zip.c.UU
  22. # Wrapped by kent@sparky on Sun Aug 23 01:00:44 1992
  23. PATH=/bin:/usr/bin:/usr/ucb ; export PATH
  24. echo If this archive is complete, you will see the following message:
  25. echo '          "shar: End of archive 5 (of 11)."'
  26. if test -f 'deflate.c' -a "${1}" != "-c" ; then 
  27.   echo shar: Will not clobber existing file \"'deflate.c'\"
  28. else
  29.   echo shar: Extracting \"'deflate.c'\" \(26162 characters\)
  30.   sed "s/^X//" >'deflate.c' <<'END_OF_FILE'
  31. X/*
  32. X
  33. X Copyright (C) 1990-1992 Mark Adler, Richard B. Wales, Jean-loup Gailly,
  34. X Kai Uwe Rommel and Igor Mandrichenko.
  35. X Permission is granted to any individual or institution to use, copy, or
  36. X redistribute this software so long as all of the original files are included
  37. X unmodified, that it is not sold for profit, and that this copyright notice
  38. X is retained.
  39. X
  40. X*/
  41. X
  42. X/*
  43. X *  deflate.c by Jean-loup Gailly.
  44. X *
  45. X *  PURPOSE
  46. X *
  47. X *      Identify new text as repetitions of old text within a fixed-
  48. X *      length sliding window trailing behind the new text.
  49. X *
  50. X *  DISCUSSION
  51. X *
  52. X *      The "deflation" process depends on being able to identify portions
  53. X *      of the input text which are identical to earlier input (within a
  54. X *      sliding window trailing behind the input currently being processed).
  55. X *
  56. X *      The most straightforward technique turns out to be the fastest for
  57. X *      most input files: try all possible matches and select the longest.
  58. X *      The key feature is of this algorithm is that insertion and deletions
  59. X *      from the string dictionary are very simple and thus fast. Insertions
  60. X *      and deletions are performed at each input character, whereas string
  61. X *      matches are performed only when the previous match ends. So it is
  62. X *      preferable to spend more time in matches to allow very fast string
  63. X *      insertions and deletions. The matching algorithm for small strings
  64. X *      is inspired from that of Rabin & Karp. A brute force approach is
  65. X *      used to find longer strings when a small match has been found.
  66. X *      A similar algorithm is used in comic (by Jan-Mark Wams) and freeze
  67. X *      (by Leonid Broukhis).
  68. X *         A previous version of this file used a more sophisticated algorithm
  69. X *      (by Fiala and Greene) which is guaranteed to run in linear amortized
  70. X *      time, but has a larger average cost and uses more memory. However
  71. X *      the F&G algorithm may be faster for some highly redundant files if
  72. X *      the parameter max_chain_length (described below) is too large.
  73. X *
  74. X *  ACKNOWLEDGEMENTS
  75. X *
  76. X *      The idea of lazy evaluation of matches is due to Jan-Mark Wams, and
  77. X *      I found it in 'freeze' written by Leonid Broukhis.
  78. X *      Thanks to many info-zippers for bug reports and testing.
  79. X *
  80. X *  REFERENCES
  81. X *
  82. X *      APPNOTE.TXT documentation file in PKZIP 2.0 distribution.
  83. X *
  84. X *      A description of the Rabin and Karp algorithm is given in the book
  85. X *         "Algorithms" by R. Sedgewick, Addison-Wesley, p252.
  86. X *
  87. X *      Fiala,E.R., and Greene,D.H.
  88. X *         Data Compression with Finite Windows, Comm.ACM, 32,4 (1989) 490-595
  89. X *
  90. X *  INTERFACE
  91. X *
  92. X *      void lm_init (int pack_level, ush *flags)
  93. X *          Initialize the "longest match" routines for a new file
  94. X *
  95. X *      ulg deflate (void)
  96. X *          Processes a new input file and return its compressed length. Sets
  97. X *          the compressed length, crc, deflate flags and internal file
  98. X *          attributes.
  99. X */
  100. X
  101. X#include "zip.h"
  102. X
  103. X/* ===========================================================================
  104. X * Configuration parameters
  105. X */
  106. X
  107. X/* Compile with MEDIUM_MEM to reduce the memory requirements or
  108. X * with SMALL_MEM to use as little memory as possible.
  109. X * Warning: defining these symbols affects MATCH_BUFSIZE and HASH_BITS
  110. X * (see below) and thus affects the compression ratio. The compressed output
  111. X * is still correct, and might even be smaller in some cases.
  112. X */
  113. X
  114. X#ifdef SMALL_MEM
  115. X#   define HASH_BITS  13  /* Number of bits used to hash strings */
  116. X#else
  117. X#ifdef MEDIUM_MEM
  118. X#   define HASH_BITS  14
  119. X#else
  120. X#   define HASH_BITS  15
  121. X   /* For portability to 16 bit machines, do not use values above 15. */
  122. X#endif
  123. X#endif
  124. X
  125. X#define HASH_SIZE (unsigned)(1<<HASH_BITS)
  126. X#define HASH_MASK (HASH_SIZE-1)
  127. X#define WMASK     (WSIZE-1)
  128. X/* HASH_SIZE and WSIZE must be powers of two */
  129. X
  130. X#define NIL 0
  131. X/* Tail of hash chains */
  132. X
  133. X#define FAST 4
  134. X#define SLOW 2
  135. X/* speed options for the general purpose bit flag */
  136. X
  137. X#ifndef TOO_FAR
  138. X#  define TOO_FAR 4096
  139. X#endif
  140. X/* Matches of length 3 are discarded if their distance exceeds TOO_FAR */
  141. X
  142. X/* ===========================================================================
  143. X * Local data used by the "longest match" routines.
  144. X */
  145. X
  146. Xtypedef ush Pos;
  147. Xtypedef unsigned IPos;
  148. X/* A Pos is an index in the character window. We use short instead of int to
  149. X * save space in the various tables. IPos is used only for parameter passing.
  150. X */
  151. X
  152. X#ifndef DYN_ALLOC
  153. X  uch    far window[2L*WSIZE];
  154. X  /* Sliding window. Input bytes are read into the second half of the window,
  155. X   * and move to the first half later to keep a dictionary of at least WSIZE
  156. X   * bytes. With this organization, matches are limited to a distance of
  157. X   * WSIZE-MAX_MATCH bytes, but this ensures that IO is always
  158. X   * performed with a length multiple of the block size. Also, it limits
  159. X   * the window size to 64K, which is quite useful on MSDOS.
  160. X   * To do: limit the window size to WSIZE+BSZ if SMALL_MEM (the code would
  161. X   * be less efficient since the data would have to be copied WSIZE/BSZ times)
  162. X   */
  163. X  Pos    far prev[WSIZE];
  164. X  /* Link to older string with same hash index. To limit the size of this
  165. X   * array to 64K, this link is maintained only for the last 32K strings.
  166. X   * An index in this array is thus a window index modulo 32K.
  167. X   */
  168. X  Pos    far head[HASH_SIZE];
  169. X  /* Heads of the hash chains or NIL */
  170. X#else
  171. X  uch    far * near window = NULL;
  172. X  Pos    far * near prev   = NULL;
  173. X  Pos    far * near head;
  174. X#endif
  175. X
  176. Xlong block_start;
  177. X/* window position at the beginning of the current output block. Gets
  178. X * negative when the window is moved backwards.
  179. X */
  180. X
  181. Xlocal unsigned near ins_h;  /* hash index of string to be inserted */
  182. X
  183. X#define H_SHIFT  ((HASH_BITS+MIN_MATCH-1)/MIN_MATCH)
  184. X/* Number of bits by which ins_h and del_h must be shifted at each
  185. X * input step. It must be such that after MIN_MATCH steps, the oldest
  186. X * byte no longer takes part in the hash key, that is:
  187. X *   H_SHIFT * MIN_MATCH >= HASH_BITS
  188. X */
  189. X
  190. Xunsigned int near prev_length;
  191. X/* Length of the best match at previous step. Matches not greater than this
  192. X * are discarded. This is used in the lazy match evaluation.
  193. X */
  194. X
  195. X      unsigned near strstart;      /* start of string to insert */
  196. X      unsigned near match_start;   /* start of matching string */
  197. Xlocal int      near eofile;        /* flag set at end of input file */
  198. Xlocal unsigned near lookahead;     /* number of valid bytes ahead in window */
  199. X
  200. Xunsigned near max_chain_length;
  201. X/* To speed up deflation, hash chains are never searched beyond this length.
  202. X * A higher limit improves compression ratio but degrades the speed.
  203. X */
  204. X
  205. Xlocal unsigned int max_lazy_match;
  206. X/* Attempt to find a better match only when the current match is strictly
  207. X * smaller than this value.
  208. X */
  209. X
  210. Xint near good_match;
  211. X/* Use a faster search when the previous match is longer than this */
  212. X
  213. X
  214. X/* Values for max_lazy_match, good_match and max_chain_length, depending on
  215. X * the desired pack level (0..9). The values given below have been tuned to
  216. X * exclude worst case performance for pathological files. Better values may be
  217. X * found for specific files.
  218. X */
  219. Xtypedef struct config {
  220. X   int good_length;
  221. X   int max_lazy;
  222. X   unsigned max_chain;
  223. X   uch flag;
  224. X} config;
  225. X
  226. Xlocal config configuration_table[10] = {
  227. X/*      good lazy chain flag */
  228. X/* 0 */ {0,    0,    0,  0},     /* store only */
  229. X/* 1 */ {4,    4,   16,  FAST},  /* maximum speed  */
  230. X/* 2 */ {6,    8,   16,  0},
  231. X/* 3 */ {8,   16,   32,  0},
  232. X/* 4 */ {8,   32,   64,  0},
  233. X/* 5 */ {8,   64,  128,  0},
  234. X/* 6 */ {8,  128,  256,  0},
  235. X/* 7 */ {8,  128,  512,  0},
  236. X/* 8 */ {32, 258, 1024,  0},
  237. X/* 9 */ {32, 258, 4096,  SLOW}}; /* maximum compression */
  238. X
  239. X/* Note: the current code requires max_lazy >= MIN_MATCH and max_chain >= 4
  240. X * but these restrictions can easily be removed at a small cost.
  241. X */
  242. X
  243. X#define EQUAL 0
  244. X/* result of memcmp for equal strings */
  245. X
  246. X/* ===========================================================================
  247. X *  Prototypes for local functions. Use asm version by default for
  248. X *  MSDOS but not Unix. However the asm version version is recommended
  249. X *  for 386 Unix.
  250. X */
  251. X#ifdef ATARI_ST
  252. X#  undef MSDOS /* avoid the processor specific parts */
  253. X#endif
  254. X#if defined(MSDOS) && !defined(NO_ASM) && !defined(ASM)
  255. X#  define ASM
  256. X#endif
  257. X
  258. Xlocal void fill_window   OF((void));
  259. X      int  longest_match OF((IPos cur_match));
  260. X#ifdef ASM
  261. X      void match_init OF((void)); /* asm code initialization */
  262. X#endif
  263. X
  264. X#ifdef DEBUG
  265. Xlocal  void check_match OF((IPos start, IPos match, int length));
  266. X#endif
  267. X
  268. X#define MIN(a,b) ((a) <= (b) ? (a) : (b))
  269. X/* The arguments must not have side effects. */
  270. X
  271. X/* ===========================================================================
  272. X * Update a hash value with the given input byte
  273. X * IN  assertion: all calls to to UPDATE_HASH are made with consecutive
  274. X *    input characters, so that a running hash key can be computed from the
  275. X *    previous key instead of complete recalculation each time.
  276. X */
  277. X#define UPDATE_HASH(h,c) (h = (((h)<<H_SHIFT) ^ (c)) & HASH_MASK)
  278. X
  279. X/* ===========================================================================
  280. X * Insert string s in the dictionary and set match_head to the previous head
  281. X * of the hash chain (the most recent string with same hash key). Return
  282. X * the previous length of the hash chain.
  283. X * IN  assertion: all calls to to INSERT_STRING are made with consecutive
  284. X *    input characters and the first MIN_MATCH bytes of s are valid
  285. X *    (except for the last MIN_MATCH-1 bytes of the input file).
  286. X */
  287. X#define INSERT_STRING(s, match_head) \
  288. X   (UPDATE_HASH(ins_h, window[(s) + MIN_MATCH-1]), \
  289. X    prev[(s) & WMASK] = match_head = head[ins_h], \
  290. X    head[ins_h] = (s))
  291. X
  292. X/* ===========================================================================
  293. X * Initialize the "longest match" routines for a new file
  294. X */
  295. Xvoid lm_init (pack_level, flags)
  296. X    int pack_level; /* 0: store, 1: best speed, 9: best compression */
  297. X    ush *flags;     /* general purpose bit flag */
  298. X{
  299. X    register unsigned j;
  300. X
  301. X    if (pack_level < 1 || pack_level > 9) error("bad pack level");
  302. X
  303. X    /* Use dynamic allocation if compiler does not like big static arrays: */
  304. X#ifdef DYN_ALLOC
  305. X    if (window == NULL) {
  306. X        window = (uch far*) fcalloc(WSIZE,   2*sizeof(uch));
  307. X        prev   = (Pos far*) fcalloc(WSIZE,     sizeof(Pos));
  308. X        head   = (Pos far*) fcalloc(HASH_SIZE, sizeof(Pos));
  309. X
  310. X        if (window == NULL || prev == NULL || head == NULL) {
  311. X            err(ZE_MEM, "window allocation");
  312. X        }
  313. X    }
  314. X#endif /* DYN_ALLOC */
  315. X#ifdef ASM
  316. X    match_init(); /* initialize the asm code */
  317. X#endif
  318. X    /* Initialize the hash table. */
  319. X    for (j = 0;  j < HASH_SIZE; j++) head[j] = NIL;
  320. X    /* prev will be initialized on the fly */
  321. X
  322. X    /* Set the default configuration parameters:
  323. X     */
  324. X    max_lazy_match   = configuration_table[pack_level].max_lazy;
  325. X    good_match       = configuration_table[pack_level].good_length;
  326. X    max_chain_length = configuration_table[pack_level].max_chain;
  327. X    *flags          |= configuration_table[pack_level].flag;
  328. X    /* ??? reduce max_chain_length for binary files */
  329. X
  330. X    strstart = 0;
  331. X    block_start = 0L;
  332. X
  333. X#if defined(MSDOS) && !defined(__32BIT__)
  334. X    /* Can't read a 64K block under MSDOS */
  335. X    lookahead = read_buf((char*)window, (unsigned)WSIZE);
  336. X#else
  337. X    lookahead = read_buf((char*)window, 2*WSIZE);
  338. X#endif
  339. X    if (lookahead == 0 || lookahead == (unsigned)EOF) {
  340. X       eofile = 1, lookahead = 0;
  341. X       return;
  342. X    }
  343. X    eofile = 0;
  344. X    /* Make sure that we always have enough lookahead. This is important
  345. X     * if input comes from a device such as a tty.
  346. X     */
  347. X    while (lookahead < MIN_LOOKAHEAD && !eofile) fill_window();
  348. X
  349. X    ins_h = 0;
  350. X    for (j=0; j<MIN_MATCH-1; j++) UPDATE_HASH(ins_h, window[j]);
  351. X    /* If lookahead < MIN_MATCH, ins_h is garbage, but this is
  352. X     * not important since only literal bytes will be emitted.
  353. X     */
  354. X}
  355. X
  356. X/* ===========================================================================
  357. X * Set match_start to the longest match starting at the given string and
  358. X * return its length. Matches shorter or equal to prev_length are discarded,
  359. X * in which case the result is equal to prev_length and match_start is
  360. X * garbage.
  361. X * IN assertions: cur_match is the head of the hash chain for the current
  362. X *   string (strstart) and its distance is <= MAX_DIST, and prev_length >= 1
  363. X */
  364. X#ifndef ASM
  365. X/* For MSDOS, OS/2 and 386 Unix, an optimized version is in match.asm. The code
  366. X * is functionally equivalent, so you can use the C version if desired.
  367. X */
  368. Xint longest_match(cur_match)
  369. X    IPos cur_match;                             /* current match */
  370. X{
  371. X    unsigned chain_length = max_chain_length;   /* max hash chain length */
  372. X    register uch far *scan = window + strstart; /* current string */
  373. X    register uch far *match = scan;             /* matched string */
  374. X    register int len;                           /* length of current match */
  375. X    int best_len = prev_length;                 /* best match length so far */
  376. X    IPos limit = strstart > (IPos)MAX_DIST ? strstart - (IPos)MAX_DIST : NIL;
  377. X    /* Stop when cur_match becomes <= limit. To simplify the code,
  378. X     * we prevent matches with the string of window index 0.
  379. X     */
  380. X#ifdef UNALIGNED_OK
  381. X    register ush scan_start = *(ush*)scan;
  382. X    register ush scan_end   = *(ush*)(scan+best_len-1);
  383. X#else
  384. X    register uch scan_start = *scan;
  385. X    register uch scan_end1  = scan[best_len-1];
  386. X    register uch scan_end   = scan[best_len];
  387. X#endif
  388. X
  389. X    /* Do not waste too much time if we already have a good match: */
  390. X    if (prev_length >= good_match) {
  391. X        chain_length >>= 2;
  392. X    }
  393. X
  394. X    do {
  395. X        Assert(cur_match < strstart, "no future");
  396. X        match = window + cur_match;
  397. X
  398. X        /* Skip to next match if the match length cannot increase
  399. X         * or if the match length is less than 2:
  400. X         */
  401. X#if (defined(UNALIGNED_OK) && HASH_BITS >= 8)
  402. X        /* This code assumes sizeof(unsigned short) == 2 and
  403. X         * sizeof(unsigned long) == 4. Do not use UNALIGNED_OK if your
  404. X         * compiler uses different sizes.
  405. X         */
  406. X        if (*(ush*)(match+best_len-1) != scan_end ||
  407. X            *(ush*)match != scan_start) continue;
  408. X
  409. X        len = MIN_MATCH - 4;
  410. X        /* It is not necessary to compare scan[2] and match[2] since they are
  411. X         * always equal when the other bytes match, given that the hash keys
  412. X         * are equal and that HASH_BITS >= 8.
  413. X         */
  414. X        do {} while ((len+=4) < MAX_MATCH-3 &&
  415. X                     *(ulg*)(scan+len) == *(ulg*)(match+len));
  416. X        /* The funny do {} generates better code for most compilers */
  417. X
  418. X        if (*(ush*)(scan+len) == *(ush*)(match+len)) len += 2;
  419. X        if (scan[len] == match[len]) len++;
  420. X
  421. X#else /* UNALIGNED_OK */
  422. X        if (match[best_len] != scan_end ||
  423. X            match[best_len-1] != scan_end1 || *match != scan_start)
  424. X           continue;
  425. X        /* It is not necessary to compare scan[1] and match[1] since they
  426. X         * are always equal when the other bytes match, given that
  427. X         * the hash keys are equal and that h_shift+8 <= HASH_BITS,
  428. X         * that is, when the last byte is entirely included in the hash key.
  429. X         * The condition is equivalent to
  430. X         *       (HASH_BITS+2)/3 + 8 <= HASH_BITS
  431. X         * or: HASH_BITS >= 13
  432. X         * Also, we check for a match at best_len-1 to get rid quickly of
  433. X         * the match with the suffix of the match made at the previous step,
  434. X         * which is known to fail.
  435. X         */
  436. X#if HASH_BITS >= 13
  437. X        len = 1;
  438. X#else
  439. X        len = 0;
  440. X#endif
  441. X        do {} while (++len < MAX_MATCH && scan[len] == match[len]);
  442. X
  443. X#endif /* UNALIGNED_OK */
  444. X
  445. X        if (len > best_len) {
  446. X            match_start = cur_match;
  447. X            best_len = len;
  448. X            if (len == MAX_MATCH) break;
  449. X#ifdef UNALIGNED_OK
  450. X            scan_end = *(ush*)(scan+best_len-1);
  451. X#else
  452. X            scan_end1  = scan[best_len-1];
  453. X            scan_end   = scan[best_len];
  454. X#endif
  455. X        }
  456. X    } while (--chain_length != 0 &&
  457. X             (cur_match = prev[cur_match & WMASK]) > limit);
  458. X
  459. X    return best_len;
  460. X}
  461. X#endif /* NO_ASM */
  462. X
  463. X#ifdef DEBUG
  464. X/* ===========================================================================
  465. X * Check that the match at match_start is indeed a match.
  466. X */
  467. Xlocal void check_match(start, match, length)
  468. X    IPos start, match;
  469. X    int length;
  470. X{
  471. X    /* check that the match is indeed a match */
  472. X    if (memcmp((char*)window + match,
  473. X                (char*)window + start, length) != EQUAL) {
  474. X        fprintf(stderr,
  475. X            " start %d, match %d, length %d\n",
  476. X            start, match, length);
  477. X        error("invalid match");
  478. X    }
  479. X    if (verbose > 1) {
  480. X        fprintf(stderr,"\\[%d,%d]", start-match, length);
  481. X        do { putc(window[start++], stderr); } while (--length != 0);
  482. X    }
  483. X}
  484. X#else
  485. X#  define check_match(start, match, length)
  486. X#endif
  487. X
  488. X/* ===========================================================================
  489. X * Fill the window when the lookahead becomes insufficient.
  490. X * Updates strstart and lookahead, and sets eofile if end of input file.
  491. X * IN assertion: lookahead < MIN_LOOKAHEAD && strstart + lookahead > 0
  492. X * OUT assertion: at least one byte has been read, or eofile is set.
  493. X */
  494. Xlocal void fill_window()
  495. X{
  496. X    register unsigned n, m;
  497. X    unsigned more = (unsigned)((ulg)2*WSIZE - (ulg)lookahead - (ulg)strstart);
  498. X    /* Amount of free space at the end of the window. */
  499. X
  500. X    /* If the window is full, move the upper half to the lower one to make
  501. X     * room in the upper half.
  502. X     */
  503. X    if (more == 0) {
  504. X        /* By the IN assertion, the window is not empty so we can't confuse
  505. X         * more == 0 with more == 64K on a 16 bit machine.
  506. X         */
  507. X        memcpy((char*)window, (char*)window+WSIZE, (unsigned)WSIZE);
  508. X        match_start -= WSIZE;
  509. X        strstart    -= WSIZE;
  510. X        /* strstart - WSIZE = WSIZE - lookahead > WSIZE - MIN_LOOKAHEAD
  511. X         * so we now have strstart > MAX_DIST:
  512. X         */
  513. X        Assert (strstart > MAX_DIST, "window slide too early");
  514. X        block_start -= (long) WSIZE;
  515. X
  516. X        for (n = 0; n < HASH_SIZE; n++) {
  517. X            m = head[n];
  518. X            head[n] = (Pos)(m >= WSIZE ? m-WSIZE : NIL);
  519. X        }
  520. X        for (n = 0; n < WSIZE; n++) {
  521. X            m = prev[n];
  522. X            prev[n] = (Pos)(m >= WSIZE ? m-WSIZE : NIL);
  523. X            /* If n is not on any hash chain, prev[n] is garbage but
  524. X             * its value will never be used.
  525. X             */
  526. X        }
  527. X        more = WSIZE;
  528. X        if (verbose) putc('.', stderr);
  529. X
  530. X    } else if (more == (unsigned)EOF) {
  531. X        /* Very unlikely, but possible on 16 bit machine if strstart == 0
  532. X         * and lookahead == 1 (input done one byte at time)
  533. X         */
  534. X        more--;
  535. X    }
  536. X    n = read_buf((char*)window+strstart+lookahead, more);
  537. X    if (n == 0 || n == (unsigned)EOF) {
  538. X        eofile = 1;
  539. X    } else {
  540. X        lookahead += n;
  541. X    }
  542. X}
  543. X
  544. X/* ===========================================================================
  545. X * Flush the current block, with given end-of-file flag.
  546. X * IN assertion: strstart is set to the end of the current match.
  547. X */
  548. X#define FLUSH_BLOCK(eof) \
  549. X   flush_block(block_start >= 0L ? (char*)&window[block_start] : (char*)NULL,\
  550. X               (long)strstart - block_start, (eof))
  551. X
  552. X/* ===========================================================================
  553. X * Processes a new input file and return its compressed length.
  554. X */
  555. X#ifdef NO_LAZY
  556. Xulg deflate()
  557. X{
  558. X    IPos hash_head; /* head of the hash chain */
  559. X    int flush;      /* set if current block must be flushed */
  560. X    unsigned match_length = 0;  /* length of best match */
  561. X
  562. X    prev_length = MIN_MATCH-1;
  563. X    while (lookahead != 0) {
  564. X        /* Insert the string window[strstart .. strstart+2] in the
  565. X         * dictionary, and set hash_head to the head of the hash chain:
  566. X         */
  567. X        INSERT_STRING(strstart, hash_head);
  568. X
  569. X        /* Find the longest match, discarding those <= prev_length.
  570. X         * At this point we have always match_length < MIN_MATCH
  571. X         */
  572. X        if (hash_head != NIL && strstart - hash_head <= MAX_DIST) {
  573. X            /* To simplify the code, we prevent matches with the string
  574. X             * of window index 0 (in particular we have to avoid a match
  575. X             * of the string with itself at the start of the input file).
  576. X             */
  577. X            match_length = longest_match (hash_head);
  578. X            /* longest_match() sets match_start */
  579. X            if (match_length > lookahead) match_length = lookahead;
  580. X        }
  581. X        if (match_length >= MIN_MATCH) {
  582. X            check_match(strstart, match_start, match_length);
  583. X
  584. X            flush = ct_tally(strstart-match_start, match_length - MIN_MATCH);
  585. X
  586. X            lookahead -= match_length;
  587. X            match_length--; /* string at strstart already in hash table */
  588. X            do {
  589. X                strstart++;
  590. X                INSERT_STRING(strstart, hash_head);
  591. X                /* strstart never exceeds WSIZE-MAX_MATCH, so there are
  592. X                 * always MIN_MATCH bytes ahead. If lookahead < MIN_MATCH
  593. X                 * these bytes are garbage, but it does not matter since the
  594. X                 * next lookahead bytes will always be emitted as literals.
  595. X                 */
  596. X            } while (--match_length != 0);
  597. X        } else {
  598. X            /* No match, output a literal byte */
  599. X            flush = ct_tally (0, window[strstart]);
  600. X            lookahead--;
  601. X        }
  602. X        strstart++; 
  603. X        if (flush) FLUSH_BLOCK(0), block_start = strstart;
  604. X
  605. X        /* Make sure that we always have enough lookahead, except
  606. X         * at the end of the input file. We need MAX_MATCH bytes
  607. X         * for the next match, plus MIN_MATCH bytes to insert the
  608. X         * string following the next match.
  609. X         */
  610. X        while (lookahead < MIN_LOOKAHEAD && !eofile) fill_window();
  611. X
  612. X    }
  613. X    return FLUSH_BLOCK(1); /* eof */
  614. X}
  615. X#else /* LAZY */
  616. X/* ===========================================================================
  617. X * Same as above, but achieves better compression. We use a lazy
  618. X * evaluation for matches: a match is finally adopted only if there is
  619. X * no better match at the next window position.
  620. X */
  621. Xulg deflate()
  622. X{
  623. X    IPos hash_head;          /* head of hash chain */
  624. X    IPos prev_match;         /* previous match */
  625. X    int flush;               /* set if current block must be flushed */
  626. X    int match_available = 0; /* set if previous match exists */
  627. X    register unsigned match_length = MIN_MATCH-1; /* length of best match */
  628. X#ifdef DEBUG
  629. X    extern ulg isize;        /* byte length of input file, for debug only */
  630. X#endif
  631. X
  632. X    /* Process the input block. */
  633. X    while (lookahead != 0) {
  634. X        /* Insert the string window[strstart .. strstart+2] in the
  635. X         * dictionary, and set hash_head to the head of the hash chain:
  636. X         */
  637. X        INSERT_STRING(strstart, hash_head);
  638. X
  639. X        /* Find the longest match, discarding those <= prev_length.
  640. X         */
  641. X        prev_length = match_length, prev_match = match_start;
  642. X        match_length = MIN_MATCH-1;
  643. X
  644. X        if (hash_head != NIL && prev_length < max_lazy_match &&
  645. X            strstart - hash_head <= MAX_DIST) {
  646. X            /* To simplify the code, we prevent matches with the string
  647. X             * of window index 0 (in particular we have to avoid a match
  648. X             * of the string with itself at the start of the input file).
  649. X             */
  650. X            match_length = longest_match (hash_head);
  651. X            /* longest_match() sets match_start */
  652. X            if (match_length > lookahead) match_length = lookahead;
  653. X            /* Ignore a length 3 match if it is too distant: */
  654. X            if (match_length == MIN_MATCH && strstart-match_start > TOO_FAR){
  655. X                /* If prev_match is also MIN_MATCH, match_start is garbage
  656. X                 * but we will ignore the current match anyway.
  657. X                 */
  658. X                match_length--;
  659. X            }
  660. X        }
  661. X        /* If there was a match at the previous step and the current
  662. X         * match is not better, output the previous match:
  663. X         */
  664. X        if (prev_length >= MIN_MATCH && match_length <= prev_length) {
  665. X
  666. X            check_match(strstart-1, prev_match, prev_length);
  667. X
  668. X            flush = ct_tally(strstart-1-prev_match, prev_length - MIN_MATCH);
  669. X
  670. X            /* Insert in hash table all strings up to the end of the match.
  671. X             * strstart-1 and strstart are already inserted.
  672. X             */
  673. X            lookahead -= prev_length-1;
  674. X            prev_length -= 2;
  675. X            do {
  676. X                strstart++;
  677. X                INSERT_STRING(strstart, hash_head);
  678. X                /* strstart never exceeds WSIZE-MAX_MATCH, so there are
  679. X                 * always MIN_MATCH bytes ahead. If lookahead < MIN_MATCH
  680. X                 * these bytes are garbage, but it does not matter since the
  681. X                 * next lookahead bytes will always be emitted as literals.
  682. X                 */
  683. X            } while (--prev_length != 0);
  684. X            match_available = 0;
  685. X            match_length = MIN_MATCH-1;
  686. X
  687. X        } else if (match_available) {
  688. X            /* If there was no match at the previous position, output a
  689. X             * single literal. If there was a match but the current match
  690. X             * is longer, truncate the previous match to a single literal.
  691. X             */
  692. X            flush = ct_tally (0, window[strstart-1]);
  693. X            Tracevv((stderr,"%c",window[strstart-1]));
  694. X            lookahead--;
  695. X        } else {
  696. X            /* There is no previous match to compare with, wait for
  697. X             * the next step to decide.
  698. X             */
  699. X            match_available = 1;
  700. X            flush = 0;
  701. X            lookahead--;
  702. X        }
  703. X        if (flush) FLUSH_BLOCK(0), block_start = strstart;
  704. X        strstart++;
  705. X        Assert (strstart <= isize && lookahead <= isize, "a bit too far");
  706. X
  707. X        /* Make sure that we always have enough lookahead, except
  708. X         * at the end of the input file. We need MAX_MATCH bytes
  709. X         * for the next match, plus MIN_MATCH bytes to insert the
  710. X         * string following the next match.
  711. X         */
  712. X        while (lookahead < MIN_LOOKAHEAD && !eofile) fill_window();
  713. X    }
  714. X    if (match_available) ct_tally (0, window[strstart-1]);
  715. X
  716. X    return FLUSH_BLOCK(1); /* eof */
  717. X}
  718. X#endif /* LAZY */
  719. END_OF_FILE
  720.   if test 26162 -ne `wc -c <'deflate.c'`; then
  721.     echo shar: \"'deflate.c'\" unpacked with wrong size!
  722.   fi
  723.   # end of 'deflate.c'
  724. fi
  725. if test -f 'msdos/tcconfig.tc.UU' -a "${1}" != "-c" ; then 
  726.   echo shar: Will not clobber existing file \"'msdos/tcconfig.tc.UU'\"
  727. else
  728.   echo shar: Extracting \"'msdos/tcconfig.tc.UU'\" \(2366 characters\)
  729.   sed "s/^X//" >'msdos/tcconfig.tc.UU' <<'END_OF_FILE'
  730. Xbegin 666 msdos/tcconfig.tc
  731. XM5'5R8F\@0R!#;VYF:6=U<F%T:6]N($9I;&4@&@ !#1(7 1H  @$!  (    "
  732. XM  (  0 #  (  @ $  $   4  0  !@ !   (  $  PD  @    T  @ !  X 
  733. XM @   !$  0 ($@ "  $ $P " !D %  "    %0 "  $ %@ "  ( %P "  $ 
  734. XM&  "    9  !  %E  $  68  0 !9P !  %H  $  6D  0 !:@ !  %K  $ 
  735. XM &P  0 !;0 !  %N  $  6\  0 !<  !  %Q  $  '(  0 !<P !  !T  $ 
  736. XM 74  0 !=@ !  %W  $  7@  0 !>0 !  %Z  $  7L  0  ?  !  %]  $ 
  737. XM 7X  0 !?P !  &   $  ((  0  A  !  &%  $  <@  0  R0 !  '*  $ 
  738. XM ,L  0  S  !  #-  $  ,X  0 !SP !  #0  $ &=$  0!DT@ ! "#5  $ 
  739. XM -<  0  V  !  '9  $  =H  0 !VP !  #<  $  =T  0 !W@ !  #?  $ 
  740. XM .   0  X0 !  #B  $  2P!1                                   
  741. XM                                                         "T!
  742. XM@ !#.EQ40UQ)3D-,541%                                        
  743. XM                                                            
  744. XM                                                     "X!@ !#
  745. XM.EQ40UQ,24(                                                 
  746. XM                                                            
  747. XM                                                 "\!4 !:25 N
  748. XM4%)*                                                        
  749. XM                                         # !!  S,@  ,0$% #(U
  750. XM    ,@$% #$P,   ,P%_                                        
  751. XM                                                            
  752. XM                                                            
  753. XM           T 1X *@                                      -0$>
  754. XM "H                                      #8!'@ J            
  755. XM                           W 1X *@                          
  756. XM            . $> "H                                      #D!
  757. XM'@ J                                       Z 1X *@          
  758. XM                            .P$> "H                         
  759. XM             #P!'@ J                                       ]
  760. XM 8                                                          
  761. XM                                                            
  762. XM                                                       ^ 00 
  763. XM.    #\!4                                                   
  764. XM                                                         $ !
  765. XM1 !#.EQ40P                                                  
  766. XM                                 $$!4                       
  767. XM                                                            
  768. X9                         /__ @ :    
  769. Xend
  770. END_OF_FILE
  771.   if test 2366 -ne `wc -c <'msdos/tcconfig.tc.UU'`; then
  772.     echo shar: \"'msdos/tcconfig.tc.UU'\" unpacked with wrong size!
  773.   else
  774.     echo shar: Uudecoding \"'msdos/tcconfig.tc'\" \(1690 characters\)
  775.     cat msdos/tcconfig.tc.UU | uudecode
  776.     if test 1690 -ne `wc -c <'msdos/tcconfig.tc'`; then
  777.       echo shar: \"'msdos/tcconfig.tc'\" uudecoded with wrong size!
  778.     else
  779.       rm msdos/tcconfig.tc.UU
  780.     fi
  781.   fi
  782.   # end of 'msdos/tcconfig.tc.UU'
  783. fi
  784. if test -f 'os2/os2zip.c.UU' -a "${1}" != "-c" ; then 
  785.   echo shar: Will not clobber existing file \"'os2/os2zip.c.UU'\"
  786. else
  787.   echo shar: Extracting \"'os2/os2zip.c.UU'\" \(28901 characters\)
  788.   sed "s/^X//" >'os2/os2zip.c.UU' <<'END_OF_FILE'
  789. Xbegin 666 os2/os2zip.c
  790. XM+RH-"B J($ H(RED:7(N8R Q+C0@.#<O,3$O,#8@4'5B;&EC($1O;6%I;BX-
  791. XM"B J#0H@*B @02!P=6)L:6,@9&]M86EN(&EM<&QE;65N=&%T:6]N(&]F($)3
  792. XM1"!D:7)E8W1O<GD@<F]U=&EN97,@9F]R#0H@*B @35,M1$]3+B @5W)I='1E
  793. XM;B!B>2!-:6-H865L(%)E;F1E;&P@*'MU=6YE="QU=&%I?6UI8VAA96Q 9V%R
  794. XM9FEE;&0I+ T*("H@($%U9W5S=" Q.#DW#0H@*B @4&]R=&5D('1O($]3+S(@
  795. XM8GD@2V%I(%5W92!2;VUM96P-"B J("!$96-E;6)E<B Q.3@Y+"!&96)R=6%R
  796. XM>2 Q.3DP#0H@*B @0VAA;F=E(&9O<B!(4$93('-U<'!O<G0L($]C=&]B97(@
  797. XM,3DY, T*("HO#0H-"B\J(&1O97,@86QS;R!C;VYT86EN($5!(&%C8V5S<R!C
  798. XM;V1E(&9O<B!U<V4@:6X@6DE0("HO#0H-"@T*(VEF9&5F(%]?14U87U\-"B-D
  799. XM969I;F4@7U\S,D))5%]?#0HC96YD:68-"@T*(VEN8VQU9&4@(GII<"YH(@T*
  800. XM#0HC:6YC;'5D92 \<W1D;&EB+F@^#0HC:6YC;'5D92 \=&EM92YH/@T*(VEN
  801. XM8VQU9&4@/&-T>7!E+F@^#0H-"B-I9F1E9B!?7U=!5$-/34-?7PT*(VEN8VQU
  802. XM9&4@/&UA;&QO8RYH/@T*=6YS:6=N960@8VAA<B!?7VYE87(@7V]S;6]D92 ]
  803. XM($]3,E]-3T1%.PT*(V5N9&EF#0H-"B-D969I;F4@24Y#3%].3U!-#0HC9&5F
  804. XM:6YE($E.0TQ?1$]33DQ3#0HC9&5F:6YE($E.0TQ?1$]315)23U)3#0HC:6YC
  805. XM;'5D92 \;W,R+F@^#0H-"B-I;F-L=61E(")O<S)Z:7 N:"(-"@T*#0HC9&5F
  806. XM:6YE($5!240@(" @(#!X,# P.0T*#0H-"B-I9F1E9B!?7S,R0DE47U\-"B-D
  807. XM969I;F4@1&]S1FEN9$9I<G-T*' Q+"!P,BP@<#,L(' T+"!P-2P@<#8I(%P-
  808. XM"B @(" @(" @1&]S1FEN9$9I<G-T*' Q+"!P,BP@<#,L(' T+"!P-2P@<#8L
  809. XM(#$I#0HC96QS90T*(V1E9FEN92!$;W-1=65R>4-U<G)E;G1$:7-K($1O<U%#
  810. XM=7)$:7-K#0HC9&5F:6YE($1O<U%U97)Y1E-!='1A8V@H<#$L(' R+"!P,RP@
  811. XM<#0L(' U*2!<#0H@(" @(" @($1O<U%&4T%T=&%C:"AP,2P@<#(L(' S+"!P
  812. XM-"P@<#4L(# I#0HC9&5F:6YE($1O<U%U97)Y4&%T:$EN9F\H<#$L(' R+"!P
  813. XM,RP@<#0I(%P-"B @(" @(" @1&]S45!A=&A);F9O*' Q+"!P,BP@<#,L(' T
  814. XM+" P*0T*(V1E9FEN92!$;W-39710871H26YF;RAP,2P@<#(L(' S+"!P-"P@
  815. XM<#4I(%P-"B @(" @(" @1&]S4V5T4&%T:$EN9F\H<#$L(' R+"!P,RP@<#0L
  816. XM(' U+" P*0T*(V1E9FEN92!$;W-%;G5M071T<FEB=71E*' Q+"!P,BP@<#,L
  817. XM(' T+"!P-2P@<#8L(' W*2!<#0H@(" @(" @($1O<T5N=6U!='1R:6)U=&4H
  818. XM<#$L(' R+"!P,RP@<#0L(' U+"!P-BP@<#<L(# I#0HC9&5F:6YE($1O<T9I
  819. XM;F1&:7)S="AP,2P@<#(L(' S+"!P-"P@<#4L(' V*2!<#0H@(" @(" @($1O
  820. XM<T9I;F1&:7)S="AP,2P@<#(L(' S+"!P-"P@<#4L(' V+" P*0T*(V1E9FEN
  821. XM92!$;W--87!#87-E($1O<T-A<V5-87 -"B-E;F1I9@T*#0H-"B-I9FYD968@
  822. XM551)3 T*#0IE>'1E<FX@:6YT(&YO:7-Y.PT*#0HC:69N9&5F(%-?249-5 T*
  823. XM(V1E9FEN92!37TE&350@,'A&,# P#0HC96YD:68-"@T*<W1A=&EC(&EN="!A
  824. XM='1R:6)U=&5S(#T@05]$25(@?"!!7TA)1$1%3B!\($%?4UE35$5-.PT*#0IS
  825. XM=&%T:6,@8VAA<B J9V5T9&ER96YT*&-H87(@*BD[#0IS=&%T:6,@=F]I9"!F
  826. XM<F5E7V1I<F-O;G1E;G1S*'-T<G5C="!?9&ER8V]N=&5N=',@*BD[#0H-"B-I
  827. XM9F1E9B!?7S,R0DE47U\-"G-T871I8R!(1$E2(&AD:7([#0IS=&%T:6,@54Q/
  828. XM3D<@8V]U;G0[#0IS=&%T:6,@1DE,149)3D1"548S(&9I;F0[#0HC96QS90T*
  829. XM<W1A=&EC($A$25(@:&1I<CL-"G-T871I8R!54TA/4E0@8V]U;G0[#0IS=&%T
  830. XM:6,@1DE,149)3D1"548@9FEN9#L-"B-E;F1I9@T*#0H-"D1)4B J;W!E;F1I
  831. XM<BAC:&%R("IN86UE*0T*>PT*("!S=')U8W0@<W1A="!S=&%T8CL-"B @1$E2
  832. XM("ID:7)P.PT*("!C:&%R(&,[#0H@(&-H87(@*G,[#0H@('-T<G5C="!?9&ER
  833. XM8V]N=&5N=',@*F1P.PT*("!C:&%R(&YB=69;34%84$%42$Q%3B K(#%=.PT*
  834. XM("!I;G0@;&5N.PT*#0H@('-T<F-P>2AN8G5F+"!N86UE*3L-"B @;&5N(#T@
  835. XM<W1R;&5N("AN8G5F*3L-"B @<R ](&YB=68@*R!L96X[#0H-"B @:68@*" H
  836. XM*&,@/2!N8G5F6W-T<FQE;BAN8G5F*2 M(#%=*2 ]/2 G7%PG('Q\(&,@/3T@
  837. XM)R\G*2 F)@T*(" @(" @("AS=')L96XH;F)U9BD@/B Q*2 I#0H@('L-"B @
  838. XM("!N8G5F6W-T<FQE;BAN8G5F*2 M(#%=(#T@,#L-"@T*(" @(&EF("@@;F)U
  839. XM9EMS=')L96XH;F)U9BD@+2 Q72 ]/2 G.B<@*0T*(" @(" @<W1R8V%T*&YB
  840. XM=68L(")<7"XB*3L-"B @?0T*("!E;'-E#0H@(" @:68@*"!N8G5F6W-T<FQE
  841. XM;BAN8G5F*2 M(#%=(#T]("<Z)R I#0H@(" @("!S=')C870H;F)U9BP@(BXB
  842. XM*3L-"@T*("!I9B H<W1A="AN8G5F+" F<W1A=&(I(#P@,"!\?" H<W1A=&(N
  843. XM<W1?;6]D92 F(%-?249-5"D@(3T@4U])1D1)4BD-"B @("!R971U<FX@3E5,
  844. XM3#L-"@T*("!I9B H("AD:7)P(#T@;6%L;&]C*'-I>F5O9BA$25(I*2D@/3T@
  845. XM3E5,3" I#0H@(" @<F5T=7)N($Y53$P[#0H-"B @:68@*"!N8G5F6W-T<FQE
  846. XM;BAN8G5F*2 M(#%=(#T]("<N)R I#0H@(" @<W1R8W!Y*&YB=68@*R!S=')L
  847. XM96XH;F)U9BD@+2 Q+" B*BXJ(BD[#0H@(&5L<V4-"B @("!I9B H("@H8R ]
  848. XM(&YB=69;<W1R;&5N*&YB=68I("T@,5TI(#T]("=<7"<@?'P@8R ]/2 G+R<I
  849. XM("8F#0H@(" @(" @(" H<W1R;&5N*&YB=68I(#T](#$I("D-"B @(" @('-T
  850. XM<F-A="AN8G5F+" B*BXJ(BD[#0H@(" @96QS90T*(" @(" @<W1R8V%T*&YB
  851. XM=68L(")<7"HN*B(I.PT*#0H@(&1I<G @+3X@9&1?;&]C(#T@,#L-"B @9&ER
  852. XM<" M/B!D9%]C;VYT96YT<R ](&1I<G @+3X@9&1?8W @/2!.54Q,.PT*#0H@
  853. XM(&EF("@H<R ](&=E=&1I<F5N="AN8G5F*2D@/3T@3E5,3"D-"B @("!R971U
  854. XM<FX@9&ER<#L-"@T*("!D;PT*("![#0H@(" @:68@*"@H9' @/2!M86QL;V,H
  855. XM<VEZ96]F*'-T<G5C="!?9&ER8V]N=&5N=',I*2D@/3T@3E5,3"D@?'P-"B @
  856. XM(" @(" @*"AD<" M/B!?9%]E;G1R>2 ](&UA;&QO8RAS=')L96XH<RD@*R Q
  857. XM*2D@/3T@3E5,3"D@(" @(" I#0H@(" @>PT*(" @(" @:68@*&1P*0T*(" @
  858. XM(" @("!F<F5E*&1P*3L-"B @(" @(&9R965?9&ER8V]N=&5N=',H9&ER<" M
  859. XM/B!D9%]C;VYT96YT<RD[#0H-"B @(" @(')E='5R;B!.54Q,.PT*(" @('T-
  860. XM"@T*(" @(&EF("AD:7)P("T^(&1D7V-O;G1E;G1S*0T*(" @('L-"B @(" @
  861. XM(&1I<G @+3X@9&1?8W @+3X@7V1?;F5X=" ](&1P.PT*(" @(" @9&ER<" M
  862. XM/B!D9%]C<" ](&1I<G @+3X@9&1?8W @+3X@7V1?;F5X=#L-"B @("!]#0H@
  863. XM(" @96QS90T*(" @(" @9&ER<" M/B!D9%]C;VYT96YT<R ](&1I<G @+3X@
  864. XM9&1?8W @/2!D<#L-"@T*(" @('-T<F-P>2AD<" M/B!?9%]E;G1R>2P@<RD[
  865. XM#0H@(" @9' @+3X@7V1?;F5X=" ]($Y53$P[#0H-"B @("!D<" M/B!?9%]S
  866. XM:7IE(#T@9FEN9"YC8D9I;&4[#0H@(" @9' @+3X@7V1?;6]D92 ](&9I;F0N
  867. XM871T<D9I;&4[#0H@(" @9' @+3X@7V1?=&EM92 ]("HH=6YS:6=N960@*BD@
  868. XM)BAF:6YD+F9T:6UE3&%S=%=R:71E*3L-"B @("!D<" M/B!?9%]D871E(#T@
  869. XM*BAU;G-I9VYE9" J*2 F*&9I;F0N9F1A=&5,87-T5W)I=&4I.PT*("!]#0H@
  870. XM('=H:6QE("@H<R ](&=E=&1I<F5N="A.54Q,*2D@(3T@3E5,3"D[#0H-"B @
  871. XM9&ER<" M/B!D9%]C<" ](&1I<G @+3X@9&1?8V]N=&5N=',[#0H-"B @<F5T
  872. XM=7)N(&1I<G [#0I]#0H-"@T*=F]I9"!C;&]S961I<BA$25(@*B!D:7)P*0T*
  873. XM>PT*("!F<F5E7V1I<F-O;G1E;G1S*&1I<G @+3X@9&1?8V]N=&5N=',I.PT*
  874. XM("!F<F5E*&1I<G I.PT*?0T*#0H-"G-T<G5C="!D:7)E8W0@*G)E861D:7(H
  875. XM1$E2("H@9&ER<"D-"GL-"B @<W1A=&EC('-T<G5C="!D:7)E8W0@9' [#0H-
  876. XM"B @:68@*&1I<G @+3X@9&1?8W @/3T@3E5,3"D-"B @("!R971U<FX@3E5,
  877. XM3#L-"@T*("!D<"YD7VYA;6QE;B ](&1P+F1?<F5C;&5N(#T-"B @("!S=')L
  878. XM96XH<W1R8W!Y*&1P+F1?;F%M92P@9&ER<" M/B!D9%]C<" M/B!?9%]E;G1R
  879. XM>2DI.PT*#0H@(&1P+F1?:6YO(#T@,#L-"@T*("!D<"YD7W-I>F4@/2!D:7)P
  880. XM("T^(&1D7V-P("T^(%]D7W-I>F4[#0H@(&1P+F1?;6]D92 ](&1I<G @+3X@
  881. XM9&1?8W @+3X@7V1?;6]D93L-"B @9' N9%]T:6UE(#T@9&ER<" M/B!D9%]C
  882. XM<" M/B!?9%]T:6UE.PT*("!D<"YD7V1A=&4@/2!D:7)P("T^(&1D7V-P("T^
  883. XM(%]D7V1A=&4[#0H-"B @9&ER<" M/B!D9%]C<" ](&1I<G @+3X@9&1?8W @
  884. XM+3X@7V1?;F5X=#L-"B @9&ER<" M/B!D9%]L;V,K*SL-"@T*("!R971U<FX@
  885. XM)F1P.PT*?0T*#0H-"G9O:60@<V5E:V1I<BA$25(@*B!D:7)P+"!L;VYG(&]F
  886. XM9BD-"GL-"B @;&]N9R!I(#T@;V9F.PT*("!S=')U8W0@7V1I<F-O;G1E;G1S
  887. XM("ID<#L-"@T*("!I9B H;V9F(#X](# I#0H@('L-"B @("!F;W(@*&1P(#T@
  888. XM9&ER<" M/B!D9%]C;VYT96YT<SL@+2UI(#X](# @)B8@9' [(&1P(#T@9' @
  889. XM+3X@7V1?;F5X="D[#0H-"B @("!D:7)P("T^(&1D7VQO8R ](&]F9B M("AI
  890. XM("L@,2D[#0H@(" @9&ER<" M/B!D9%]C<" ](&1P.PT*("!]#0I]#0H-"@T*
  891. XM;&]N9R!T96QL9&ER*$1)4B J(&1I<G I#0I[#0H@(')E='5R;B!D:7)P("T^
  892. XM(&1D7VQO8SL-"GT-"@T*#0IS=&%T:6,@=F]I9"!F<F5E7V1I<F-O;G1E;G1S
  893. XM*'-T<G5C="!?9&ER8V]N=&5N=',@*B!D<"D-"GL-"B @<W1R=6-T(%]D:7)C
  894. XM;VYT96YT<R J;V1P.PT*#0H@('=H:6QE("AD<"D-"B @>PT*(" @(&EF("AD
  895. XM<" M/B!?9%]E;G1R>2D-"B @(" @(&9R964H9' @+3X@7V1?96YT<GDI.PT*
  896. XM#0H@(" @9' @/2 H;V1P(#T@9' I("T^(%]D7VYE>'0[#0H@(" @9G)E92AO
  897. XM9' I.PT*("!]#0I]#0H-"@T*<W1A=&EC(&-H87(@*F=E=&1I<F5N="AC:&%R
  898. XM("ID:7(I#0I[#0H@(&EN="!D;VYE.PT*("!S=&%T:6,@:6YT(&QO=V5R.PT*
  899. XM#0H@(&EF("AD:7(@(3T@3E5,3"D-"B @>R @(" @(" @(" @(" @(" @(" @
  900. XM(" @(" @(" @(" @(" @("\J(&=E="!F:7)S="!E;G1R>2 J+PT*(" @(&AD
  901. XM:7(@/2!(1$E27T-214%413L-"B @("!C;W5N=" ](#$[#0H@(" @9&]N92 ]
  902. XM($1O<T9I;F1&:7)S="AD:7(L("9H9&ER+"!A='1R:6)U=&5S+" F9FEN9"P@
  903. XM<VEZ96]F*&9I;F0I+" F8V]U;G0I.PT*(" @(&QO=V5R(#T@27-&:6QE4WES
  904. XM=&5M1D%4*&1I<BD[#0H@('T-"B @96QS92 @(" @(" @(" @(" @(" @(" @
  905. XM(" @(" @(" @(" @("\J(&=E="!N97AT(&5N=')Y("HO#0H@(" @9&]N92 ]
  906. XM($1O<T9I;F1.97AT*&AD:7(L("9F:6YD+"!S:7IE;V8H9FEN9"DL("9C;W5N
  907. XM="D[#0H-"B @:68@*&1O;F4@/3T@,"D-"B @>PT*(" @(&EF("@@;&]W97(@
  908. XM*0T*(" @(" @4W1R:6YG3&]W97(H9FEN9"YA8VA.86UE*3L-"B @("!R971U
  909. XM<FX@9FEN9"YA8VA.86UE.PT*("!]#0H@(&5L<V4-"B @>PT*(" @($1O<T9I
  910. XM;F1#;&]S92AH9&ER*3L-"B @("!R971U<FX@3E5,3#L-"B @?0T*?0T*#0H-
  911. XM"B\J($9!5" O($A01E,@9&5T96-T:6]N("HO#0H-"FEN="!)<T9I;&53>7-T
  912. XM96U&050H8VAA<B J9&ER*0T*>PT*("!S=&%T:6,@55-(3U)4(&Y,87-T1')I
  913. XM=F4@/2 M,2P@;E)E<W5L=#L-"B @54Q/3D<@;$UA<#L-"B @0EE412!B1&%T
  914. XM85LV-%TL(&).86UE6S-=.PT*(VEF9&5F(%]?,S)"251?7PT*("!53$].1R!N
  915. XM1')I=F4L(&-B1&%T83L-"B @4$9344)51D9%4C(@<$1A=&$@/2 H4$9344)5
  916. XM1D9%4C(I(&)$871A.PT*(V5L<V4-"B @55-(3U)4(&Y$<FEV92P@8V)$871A
  917. XM.PT*("!01E-10E5&1D52('!$871A(#T@*%!&4U%"549&15(I(&)$871A.PT*
  918. XM(V5N9&EF#0H-"B @:68@*"!?;W-M;V1E(#T]($1/4U]-3T1%("D-"B @("!R
  919. XM971U<FX@5%)513L-"B @96QS90T*("![#0H@(" @+RH@5V4@<V5P87)A=&4@
  920. XM1D%4(&%N9"!(4$93*V]T:&5R(&9I;&4@<WES=&5M<R!H97)E+@T*(" @(" @
  921. XM(&%T('1H92!M;VUE;G0@22!C;VYS:61E<B!O=&AE<B!S>7-T96US('1O(&)E
  922. XM('-I;6EL87(@=&\@2%!&4RP-"B @(" @("!I+F4N('-U<'!O<G0@;&]N9R!F
  923. XM:6QE(&YA;65S(&%N9"!B965I;F<@8V%S92!S96YS:71I=F4@*B\-"@T*(" @
  924. XM(&EF("@@:7-A;'!H82AD:7);,%TI("8F("AD:7);,5T@/3T@)SHG*2 I#0H@
  925. XM(" @("!N1')I=F4@/2!T;U]U<"AD:7);,%TI("T@)T G.PT*(" @(&5L<V4-
  926. XM"B @(" @($1O<U%U97)Y0W5R<F5N=$1I<VLH)FY$<FEV92P@)FQ-87 I.PT*
  927. XM#0H@(" @:68@*"!N1')I=F4@/3T@;DQA<W1$<FEV92 I#0H@(" @("!R971U
  928. XM<FX@;E)E<W5L=#L-"@T*(" @(&).86UE6S!=(#T@*&-H87(I("AN1')I=F4@
  929. XM*R G0"<I.PT*(" @(&).86UE6S%=(#T@)SHG.PT*(" @(&).86UE6S)=(#T@
  930. XM,#L-"@T*(" @(&Y,87-T1')I=F4@/2!N1')I=F4[#0H@(" @8V)$871A(#T@
  931. XM<VEZ96]F*&)$871A*3L-"@T*(" @(&EF("@@(41O<U%U97)Y1E-!='1A8V@H
  932. XM8DYA;64L(# L($9304E,7U%515)93D%-12P@*%!63TE$*2!P1&%T82P@)F-B
  933. XM1&%T82D@*0T*(" @(" @;E)E<W5L=" ]("%S=')C;7 H<$1A=&$@+3X@<WI&
  934. XM4T1.86UE("L@<$1A=&$@+3X@8V).86UE+" B1D%4(BD[#0H@(" @96QS90T*
  935. XM(" @(" @;E)E<W5L=" ]($9!3%-%.PT*#0H@(" @+RH@16YD(&]F('1H:7,@
  936. XM=6=L>2!C;V1E("HO#0H@(" @<F5T=7)N(&Y297-U;'0[#0H@('T-"GT-"@T*
  937. XM#0HO*B!A8V-E<W,@;6]D92!B:71S(&%N9"!T:6UE('-T86UP("HO#0H-"FEN
  938. XM="!'971&:6QE36]D92AC:&%R("IN86UE*0T*>PT*(VEF9&5F(%]?,S)"251?
  939. XM7PT*("!&24Q%4U1!5%53,R!F<SL-"B @<F5T=7)N($1O<U%U97)Y4&%T:$EN
  940. XM9F\H;F%M92P@,2P@)F9S+"!S:7IE;V8H9G,I*2 _("TQ(#H@9G,N871T<D9I
  941. XM;&4[#0HC96QS90T*("!54TA/4E0@;6]D93L-"B @<F5T=7)N($1O<U%&:6QE
  942. XM36]D92AN86UE+" F;6]D92P@,$PI(#\@+3$@.B!M;V1E.PT*(V5N9&EF#0I]
  943. XM#0H-"FQO;F<@1V5T1FEL951I;64H8VAA<B J;F%M92D-"GL-"B-I9F1E9B!?
  944. XM7S,R0DE47U\-"B @1DE,15-405154S,@9G,[#0HC96QS90T*("!&24Q%4U1!
  945. XM5%53(&9S.PT*(V5N9&EF#0H@(%532$]25"!N1&%T92P@;E1I;64[#0H-"B @
  946. XM:68@*"!$;W-1=65R>5!A=&A);F9O*&YA;64L(#$L("A00EE412D@)F9S+"!S
  947. XM:7IE;V8H9G,I*2 I#0H@(" @<F5T=7)N("TQ.PT*#0H@(&Y$871E(#T@*B H
  948. XM55-(3U)4("HI("9F<RYF9&%T94QA<W17<FET93L-"B @;E1I;64@/2 J("A5
  949. XM4TA/4E0@*BD@)F9S+F9T:6UE3&%S=%=R:71E.PT*#0H@(')E='5R;B H*%5,
  950. XM3TY'*2!N1&%T92D@/#P@,38@?"!N5&EM93L-"GT-"@T*=F]I9"!3971&:6QE
  951. XM5&EM92AC:&%R("IP871H+"!L;VYG('-T86UP*0T*>PT*("!&24Q%4U1!5%53
  952. XM(&9S.PT*("!54TA/4E0@9F0L(&9T.PT*("!54TA/4E0@;DQE;F=T:#L-"B @
  953. XM8VAA<B!S>DYA;65;0T-(34%84$%42%T[#0H-"B @:68@*"!$;W-1=65R>5!A
  954. XM=&A);F9O*'!A=&@L($9)3%]35$%.1$%21"P@*%!"651%*2 F9G,L('-I>F5O
  955. XM9BAF<RDI("D-"B @("!R971U<FX[#0H-"B @9F0@/2 H55-(3U)4*2 H<W1A
  956. XM;7 @/CX@,38I.PT*("!F=" ]("A54TA/4E0I('-T86UP.PT*("!F<RYF9&%T
  957. XM94QA<W17<FET92 ](&9S+F9D871E0W)E871I;VX@/2 J("A&1$%412 J*2 F
  958. XM9F0[#0H@(&9S+F9T:6UE3&%S=%=R:71E(#T@9G,N9G1I;65#<F5A=&EO;B ]
  959. XM("H@*$9424U%("HI("9F=#L-"@T*("!$;W-39710871H26YF;RAP871H+"!&
  960. XM24Q?4U1!3D1!4D0L("A00EE412D@)F9S+"!S:7IE;V8H9G,I+" P*3L-"GT-
  961. XM"@T*#0HO*B!&050@+R!(4$93(&YA;64@8V]N=F5R<VEO;B!S='5F9B J+PT*
  962. XM#0II;G0@27-&:6QE3F%M959A;&ED*&-H87(@*FYA;64I#0I[#0H@($A&24Q%
  963. XM(&AF.PT*(VEF9&5F(%]?,S)"251?7PT*("!53$].1R!U06-T:6]N.PT*(V5L
  964. XM<V4-"B @55-(3U)4('5!8W1I;VX[#0HC96YD:68-"@T*("!S=VET8V@H($1O
  965. XM<T]P96XH;F%M92P@)FAF+" F=4%C=&EO;BP@,"P@,"P@1DE,15]/4$5.+ T*
  966. XM(" @(" @(" @(" @(" @(" @3U!%3E]!0T-%4U-?4D5!1$].3%D@?"!/4$5.
  967. XM7U-(05)%7T1%3EE.3TY%+" P*2 I#0H@('L-"B @8V%S92!%4E)/4E])3E9!
  968. XM3$E$7TY!344Z#0H@(&-A<V4@15)23U)?1DE,14Y!345?15A#141?4D%.1T4Z
  969. XM#0H@(" @<F5T=7)N($9!3%-%.PT*("!C87-E($Y/7T524D]2.@T*(" @($1O
  970. XM<T-L;W-E*&AF*3L-"B @9&5F875L=#H-"B @("!R971U<FX@5%)513L-"B @
  971. XM?0T*?0T*#0H-"G9O:60@0VAA;F=E3F%M949O<D9!5"AC:&%R("IN86UE*0T*
  972. XM>PT*("!C:&%R("IS<F,L("ID<W0L("IN97AT+" J<'1R+" J9&]T+" J<W1A
  973. XM<G0[#0H@('-T871I8R!C:&%R(&EN=F%L:61;72 ]("(Z.RP]*UPB6UT\/GP@
  974. XM7'0B.PT*#0H@(&EF("@@:7-A;'!H82AN86UE6S!=*2 F)B H;F%M95LQ72 ]
  975. XM/2 G.B<I("D-"B @("!S=&%R=" ](&YA;64@*R R.PT*("!E;'-E#0H@(" @
  976. XM<W1A<G0@/2!N86UE.PT*#0H@('-R8R ](&1S=" ]('-T87)T.PT*("!I9B H
  977. XM("@J<W)C(#T]("<O)RD@?'P@*"IS<F,@/3T@)UQ<)RD@*0T*(" @('-R8RLK
  978. XM+"!D<W0K*SL-"@T*("!W:&EL92 H("IS<F,@*0T*("![#0H@(" @9F]R("@@
  979. XM;F5X=" ]('-R8SL@*FYE>'0@)B8@*"IN97AT("$]("<O)RD@)B8@*"IN97AT
  980. XM("$]("=<7"<I.R!N97AT*RL@*3L-"@T*(" @(&9O<B H('!T<B ]('-R8RP@
  981. XM9&]T(#T@3E5,3#L@<'1R(#P@;F5X=#L@<'1R*RL@*0T*(" @(" @:68@*" J
  982. XM<'1R(#T]("<N)R I#0H@(" @("![#0H@(" @(" @(&1O=" ]('!T<CL@+RH@
  983. XM<F5M96UB97(@;&%S="!D;W0@*B\-"B @(" @(" @*G!T<B ]("=?)SL-"B @
  984. XM(" @('T-"@T*(" @(&EF("@@9&]T(#T]($Y53$P@*0T*(" @(" @9F]R("@@
  985. XM<'1R(#T@<W)C.R!P='(@/"!N97AT.R!P='(K*R I#0H@(" @(" @(&EF("@@
  986. XM*G!T<B ]/2 G7R<@*0T*(" @(" @(" @(&1O=" ]('!T<CL@+RH@<F5M96UB
  987. XM97(@;&%S="!?(&%S(&EF(&ET('=E<F4@82!D;W0@*B\-"@T*(" @(&EF("@@
  988. XM9&]T("8F("AD;W0@/B!S<F,I("8F#0H@(" @(" @(" H*&YE>'0@+2!D;W0@
  989. XM/#T@-"D@?'P-"B @(" @(" @(" H*&YE>'0@+2!S<F,@/B X*2 F)B H9&]T
  990. XM("T@<W)C(#X@,RDI*2 I#0H@(" @>PT*(" @(" @:68@*"!D;W0@*0T*(" @
  991. XM(" @(" J9&]T(#T@)RXG.PT*#0H@(" @("!F;W(@*"!P='(@/2!S<F,[("AP
  992. XM='(@/"!D;W0I("8F("@H<'1R("T@<W)C*2 \(#@I.R!P='(K*R I#0H@(" @
  993. XM(" @("ID<W0K*R ]("IP='([#0H-"B @(" @(&9O<B H('!T<B ](&1O=#L@
  994. XM*'!T<B \(&YE>'0I("8F("@H<'1R("T@9&]T*2 \(#0I.R!P='(K*R I#0H@
  995. XM(" @(" @("ID<W0K*R ]("IP='([#0H@(" @?0T*(" @(&5L<V4-"B @("![
  996. XM#0H@(" @("!I9B H(&1O=" F)B H;F5X=" M('-R8R ]/2 Q*2 I#0H@(" @
  997. XM(" @("ID;W0@/2 G+B<[(" @(" @(" @(" O*B!S<&5C:6%L(&-A<V4Z("(N
  998. XM(B!A<R!A('!A=&@@8V]M<&]N96YT("HO#0H-"B @(" @(&9O<B H('!T<B ]
  999. XM('-R8SL@*'!T<B \(&YE>'0I("8F("@H<'1R("T@<W)C*2 \(#@I.R!P='(K
  1000. XM*R I#0H@(" @(" @("ID<W0K*R ]("IP='([#0H@(" @?0T*#0H@(" @*F1S
  1001. XM="LK(#T@*FYE>'0[("\J(&5I=&AE<B G+R<@;W(@," J+PT*#0H@(" @:68@
  1002. XM*" J;F5X=" I#0H@(" @>PT*(" @(" @<W)C(#T@;F5X=" K(#$[#0H-"B @
  1003. XM(" @(&EF("@@*G-R8R ]/2 P("D@+RH@:&%N9&QE('1R86EL:6YG("<O)R!O
  1004. XM;B!D:7)S("$@*B\-"B @(" @(" @*F1S=" ](# [#0H@(" @?0T*(" @(&5L
  1005. XM<V4-"B @(" @(&)R96%K.PT*("!]#0H-"B @9F]R("@@<W)C(#T@<W1A<G0[
  1006. XM("IS<F,@(3T@,#L@*RMS<F,@*0T*(" @(&EF("@@*'-T<F-H<BAI;G9A;&ED
  1007. XM+" J<W)C*2 A/2!.54Q,*2!\?" H*G-R8R ]/2 G("<I("D-"B @(" @("IS
  1008. XM<F,@/2 G7R<[#0I]#0H-"@T*+RH@+DQ/3D=.04U%($5!(&-O9&4@*B\-"@T*
  1009. XM='EP961E9B!S=')U8W0-"GL-"B @54Q/3D<@8V),:7-T.R @(" @(" @(" @
  1010. XM(" @("\J(&QE;F=T:"!O9B!V86QU92 K(#(R("HO#0HC:69D968@7U\S,D))
  1011. XM5%]?#0H@(%5,3TY'(&].97AT.PT*(V5N9&EF#0H@($)95$4@9D5!.R @(" @
  1012. XM(" @(" @(" @(" @(" O*B P("HO#0H@($)95$4@8V).86UE.R @(" @(" @
  1013. XM(" @(" @(" O*B!L96YG=&@@;V8@(BY,3TY'3D%-12(@/2 Y("HO#0H@(%53
  1014. XM2$]25"!C8E9A;'5E.R @(" @(" @(" @(" O*B!L96YG=&@@;V8@=F%L=64@
  1015. XM*R T("HO#0H@($)95$4@<WI.86UE6S$P73L@(" @(" @(" @(" O*B B+DQ/
  1016. XM3D=.04U%(B J+PT*("!54TA/4E0@96%4>7!E.R @(" @(" @(" @(" @+RH@
  1017. XM,'A&1D9$(&9O<B!L96YG=&@M<')E8V5D960@05-#24D@*B\-"B @55-(3U)4
  1018. XM(&5A4VEZ93L@(" @(" @(" @(" @("\J(&QE;F=T:"!O9B!V86QU92 J+PT*
  1019. XM("!"651%('-Z5F%L=65;0T-(34%84$%42%T[#0I]#0I&14%,4U0[#0H-"G1Y
  1020. XM<&5D968@<W1R=6-T#0I[#0H@(%5,3TY'(&-B3&ES=#L-"B-I9F1E9B!?7S,R
  1021. XM0DE47U\-"B @54Q/3D<@;TYE>'0[#0HC96YD:68-"B @0EE412!C8DYA;64[
  1022. XM#0H@($)95$4@<WI.86UE6S$P73L@(" @(" @(" @(" O*B B+DQ/3D=.04U%
  1023. XM(B J+PT*?0T*1T5!3%-4.PT*#0H-"F-H87(@*D=E=$QO;F=.86UE14$H8VAA
  1024. XM<B J;F%M92D-"GL-"B @14%/4"!E86]P.PT*("!'14%,4U0@9V5A;'-T.PT*
  1025. XM("!S=&%T:6,@1D5!3%-4(&9E86QS=#L-"@T*("!I9B H(%]O<VUO9&4@/3T@
  1026. XM1$]37TU/1$4@*0T*(" @(')E='5R;B!.54Q,.PT*#0H@(&5A;W N9G!'14%,
  1027. XM:7-T(#T@*%!'14%,25-4*2 F9V5A;'-T.PT*("!E86]P+F9P1D5!3&ES=" ]
  1028. XM("A01D5!3$E35"D@)F9E86QS=#L-"B @96%O<"YO17)R;W(@/2 P.PT*#0H@
  1029. XM('-T<F-P>2AG96%L<W0N<WI.86UE+" B+DQ/3D=.04U%(BD[#0H@(&=E86QS
  1030. XM="YC8DYA;64@(#T@*$)95$4I('-T<FQE;BAG96%L<W0N<WI.86UE*3L-"B-I
  1031. XM9F1E9B!?7S,R0DE47U\-"B @9V5A;'-T+F].97AT(" @/2 P.PT*(V5N9&EF
  1032. XM#0H-"B @9V5A;'-T+F-B3&ES=" @/2!S:7IE;V8H9V5A;'-T*3L-"B @9F5A
  1033. XM;'-T+F-B3&ES=" @/2!S:7IE;V8H9F5A;'-T*3L-"@T*("!I9B H($1O<U%U
  1034. XM97)Y4&%T:$EN9F\H;F%M92P@1DE,7U%515)914%31E)/34Q)4U0L#0H@(" @
  1035. XM(" @(" @(" @(" @(" @(" @(" H4$)95$4I("9E86]P+"!S:7IE;V8H96%O
  1036. XM<"DI("D-"B @("!R971U<FX@3E5,3#L-"@T*("!I9B H(&9E86QS="YC8E9A
  1037. XM;'5E(#X@-" F)B!F96%L<W0N96%4>7!E(#T](#!X1D9&1" I#0H@('L-"B @
  1038. XM("!F96%L<W0N<WI686QU95MF96%L<W0N96%3:7IE72 ](# [#0H@(" @<F5T
  1039. XM=7)N(&9E86QS="YS>E9A;'5E.PT*("!]#0H-"B @<F5T=7)N($Y53$P[#0I]
  1040. XM#0H-"@T*8VAA<B J1V5T3&]N9U!A=&A%02AC:&%R("IN86UE*0T*>PT*("!S
  1041. XM=&%T:6,@8VAA<B!N8G5F6T-#2$U!6%!!5$@@*R Q73L-"B @8VAA<B J8V]M
  1042. XM<"P@*FYE>'0L("IE82P@<V5P.PT*("!"3T],(&)&;W5N9" ]($9!3%-%.PT*
  1043. XM#0H@(&YB=69;,%T@/2 P.PT*("!N97AT(#T@;F%M93L-"@T*("!W:&EL92 H
  1044. XM("IN97AT("D-"B @>PT*(" @(&-O;7 @/2!N97AT.PT*#0H@(" @=VAI;&4@
  1045. XM*" J;F5X=" A/2 G7%PG("8F("IN97AT("$]("<O)R F)B J;F5X=" A/2 P
  1046. XM("D-"B @(" @(&YE>'0K*SL-"@T*(" @('-E<" ]("IN97AT.PT*(" @("IN
  1047. XM97AT(#T@,#L-"@T*(" @(&5A(#T@1V5T3&]N9TYA;65%02AN86UE*3L-"B @
  1048. XM("!S=')C870H;F)U9BP@96$@/R!E82 Z(&-O;7 I.PT*(" @(&)&;W5N9" ]
  1049. XM(&)&;W5N9"!\?" H96$@(3T@3E5,3"D[#0H-"B @(" J;F5X=" ]('-E<#L-
  1050. XM"@T*(" @(&EF("@@*FYE>'0@*0T*(" @('L-"B @(" @('-T<F-A="AN8G5F
  1051. XM+" B7%PB*3L-"B @(" @(&YE>'0K*SL-"B @("!]#0H@('T-"@T*("!R971U
  1052. XM<FX@;F)U9ELP72 F)B!B1F]U;F0@/R!N8G5F(#H@3E5,3#L-"GT-"@T*#0HO
  1053. XM*B!G96YE<F%L($5!(&-O9&4@*B\-"@T*='EP961E9B!S=')U8W0-"GL-"B @
  1054. XM55-(3U)4(&Y)1#L-"B @55-(3U)4(&Y3:7IE.PT*("!53$].1R!L4VEZ93L-
  1055. XM"GT-"D5!2$5!1$52+" J4$5!2$5!1$52.PT*#0H-"B-I9F1E9B!?7S,R0DE4
  1056. XM7U\-"@T*+RH@4&5R:&%P<R!D=64@=&\@8G5G<R!I;B!T:&4@8W5R<F5N="!/
  1057. XM4R\R(#(N,"!K97)N96PL('1H92!S=6-C97-S(&]R#0H@("!F86EL=7)E(&]F
  1058. XM('1H92!$;W-%;G5M071T<FEB=71E*"D@86YD($1O<U%U97)Y4&%T:$EN9F\H
  1059. XM*2!S>7-T96T@8V%L;',-"B @(&1E<&5N9',@;VX@=&AE(&%R96$@=VAE<F4@
  1060. XM=&AE(')E='5R;B!B=69F97)S(&%R92!A;&QO8V%T960N(%1H:7,-"B @(&1I
  1061. XM9F9E<G,@9F]R('1H92!V87)I;W5S(&-O;7!I;&5R<RP@9F]R('-O;64@86QL
  1062. XM;V-A*"D@=V]R:W,L(&9O<B!S;VUE#0H@("!M86QL;V,H*2!W;W)K<RP@9F]R
  1063. XM('-O;64L(&)O=&@@=V]R:RX@5V4G;&P@:&%V92!T;R!L:79E('=I=&@@=&AA
  1064. XM="X@*B\-"@T*+RH@5&AE('5S92!O9B!M86QL;V,H*2!I<R!N;W0@=F5R>2!C
  1065. XM;VYV96YI96YT+"!B96-A=7-E(&ET(')E<75I<F5S#0H@("!B86-K=')A8VMI
  1066. XM;F<@*&DN92X@9G)E92@I*2!A="!E<G)O<B!R971U<FYS+B!792!D;R!T:&%T
  1067. XM(&9O<B!S>7-T96T-"B @(&-A;&QS('1H870@;6%Y(&9A:6PL(&)U="!N;W0@
  1068. XM9F]R(&UA;&QO8R@I(&-A;&QS+"!B96-A=7-E('1H97D@87)E(%9%4ED-"B @
  1069. XM('5N;&EK96QY('1O(&9A:6PN($EF(&5V97(L('=E(&IU<W0@;&5A=F4@<V]M
  1070. XM92!M96UO<GD@86QL;V-A=&5D("XN+B J+PT*#0HC:68@9&5F:6YE9"A?7T=.
  1071. XM54-?7RD@?'P@9&5F:6YE9"A?7TE"34-?7RD-"B-D969I;F4@86QL;V,@86QL
  1072. XM;V-A#0HC96YD:68-"@T*(VEF9&5F(%]?5T%40T]-0U]?#0HC9&5F:6YE(&%L
  1073. XM;&]C(&UA;&QO8PT*(V1E9FEN92!?7T92145?7PT*(V5N9&EF#0H-"B-I9FYD
  1074. XM968@86QL;V,-"B-E<G)O<B!M96UO<GD@86QL;V-A=&EO;B!T>7!E("AA;&QO
  1075. XM8V$@;W(@;6%L;&]C*2!N;W0@<W!E8VEF:65D#0HC96YD:68-"@T*=F]I9"!'
  1076. XM971%07,H8VAA<B J<&%T:"P@8VAA<B J*F)U9G!T<BP@=6YS:6=N960@*G-I
  1077. XM>F4L#0H@(" @(" @(" @(" @(" @(" @(" @("!C:&%R("HJ8V)U9G!T<BP@
  1078. XM=6YS:6=N960@*F-S:7IE*0T*>PT*("!&24Q%4U1!5%53-"!F<SL-"B @4$1%
  1079. XM3D$R('!$14Y!+"!P1F]U;F0[#0H@($5!3U R(&5A;W [#0H@(%!'14$R('!'
  1080. XM14$[#0H@(%!'14$R3$E35"!P1T5!;&ES=#L-"B @4$9%03),25-4('!&14%L
  1081. XM:7-T.PT*("!014%(14%$15(@<$5!8FQO8VL[#0H@(%5,3TY'('5L071T<FEB
  1082. XM=71E<RP@=6Q-96UO<GE";&]C:SL-"B @54Q/3D<@;DQE;F=T:#L-"B @8VAA
  1083. XM<B!S>DYA;65;0T-(34%84$%42%T[#0H-"B @*G-I>F4@/2 J8W-I>F4@/2 P
  1084. XM.PT*#0H@(&EF("@@7V]S;6]D92 ]/2!$3U-?34]$12 I#0H@(" @<F5T=7)N
  1085. XM.PT*#0H@('-T<F-P>2AS>DYA;64L('!A=&@I.PT*("!N3&5N9W1H(#T@<W1R
  1086. XM;&5N*'-Z3F%M92D[#0H@(&EF("@@<WI.86UE6VY,96YG=&@@+2 Q72 ]/2 G
  1087. XM+R<@*0T*(" @('-Z3F%M95MN3&5N9W1H("T@,5T@/2 P.PT*#0H@(&EF("@@
  1088. XM1&]S475E<GE0871H26YF;RAS>DYA;64L($9)3%]15452645!4TE:12P@*%!"
  1089. XM651%*2 F9G,L('-I>F5O9BAF<RDI#0H@(" @?'P@9G,N8V),:7-T(#P](#(@
  1090. XM*B!S:7IE;V8H54Q/3D<I#0H@(" @?'P@*'!$14Y!(#T@86QL;V,H*'-I>F5?
  1091. XM="D@9G,N8V),:7-T*2D@/3T@3E5,3" I#0H@(" @<F5T=7)N.PT*#0H@('5L
  1092. XM071T<FEB=71E<R ]("TQ.PT*#0H@(&EF("@@1&]S16YU;4%T=')I8G5T92A%
  1093. XM3E5-14%?4D5&5%E015]0051(+"!S>DYA;64L(#$L('!$14Y!+"!F<RYC8DQI
  1094. XM<W0L#0H@(" @(" @(" @(" @(" @(" @(" @(" F=6Q!='1R:6)U=&5S+"!%
  1095. XM3E5-14%?3$5614Q?3D]?5D%,544I#0H@(" @?'P@=6Q!='1R:6)U=&5S(#T]
  1096. XM(# -"B @("!\?" H<$=%06QI<W0@/2!A;&QO8R@H<VEZ95]T*2!F<RYC8DQI
  1097. XM<W0I*2 ]/2!.54Q,("D-"B @>PT*(VEF9&5F(%]?1E)%15]?#0H@(" @9G)E
  1098. XM92AP1$5.02D[#0HC96YD:68-"B @("!R971U<FX[#0H@('T-"@T*("!P1T5!
  1099. XM(#T@<$=%06QI<W0@+3X@;&ES=#L-"B @<$9O=6YD(#T@<$1%3D$[#0H-"B @
  1100. XM=VAI;&4@*"!U;$%T=')I8G5T97,M+2 I#0H@('L-"B @("!I9B H("$H<W1R
  1101. XM8VUP*'!&;W5N9" M/B!S>DYA;64L("(N3$].1TY!344B*2 ]/2 P("8F('5S
  1102. XM95]L;VYG;F%M95]E82D@*0T*(" @('L-"B @(" @('!'14$@+3X@8V).86UE
  1103. XM(#T@<$9O=6YD("T^(&-B3F%M93L-"B @(" @('-T<F-P>2AP1T5!("T^('-Z
  1104. XM3F%M92P@<$9O=6YD("T^('-Z3F%M92D[#0H-"B @(" @(&Y,96YG=&@@/2!S
  1105. XM:7IE;V8H1T5!,BD@*R!S=')L96XH<$=%02 M/B!S>DYA;64I.PT*(" @(" @
  1106. XM;DQE;F=T:" ]("@H;DQE;F=T:" M(#$I("\@<VEZ96]F*%5,3TY'*2 K(#$I
  1107. XM("H@<VEZ96]F*%5,3TY'*3L-"@T*(" @(" @<$=%02 M/B!O3F5X=$5N=')Y
  1108. XM3V9F<V5T(#T@=6Q!='1R:6)U=&5S(#\@;DQE;F=T:" Z(# [#0H@(" @("!P
  1109. XM1T5!(" @/2 H4$=%03(I(" H*%!#2"D@<$=%02 K(&Y,96YG=&@I.PT*(" @
  1110. XM('T-"@T*(" @('!&;W5N9" ]("A01$5.03(I("@H4$-(*2!P1F]U;F0@*R!P
  1111. XM1F]U;F0@+3X@;TYE>'1%;G1R>4]F9G-E="D[#0H@('T-"@T*("!I9B H('!'
  1112. XM14$@/3T@<$=%06QI<W0@+3X@;&ES=" I("\J(&YO(&%T=')I8G5T97,@=&\@
  1113. XM<V%V92 J+PT*("![#0HC:69D968@7U]&4D5%7U\-"B @("!F<F5E*'!$14Y!
  1114. XM*3L-"B @("!F<F5E*'!'14%L:7-T*3L-"B-E;F1I9@T*(" @(')E='5R;CL-
  1115. XM"B @?0T*#0H@('!'14%L:7-T("T^(&-B3&ES=" ]("A00T@I('!'14$@+2 H
  1116. XM4$-(*2!P1T5!;&ES=#L-"@T*("!P1D5!;&ES=" ]("A05D])1"D@<$1%3D$[
  1117. XM(" O*B!R975S92!B=69F97(@*B\-"B @<$9%06QI<W0@+3X@8V),:7-T(#T@
  1118. XM9G,N8V),:7-T.PT*#0H@(&5A;W N9G!'14$R3&ES=" ]('!'14%L:7-T.PT*
  1119. XM("!E86]P+F9P1D5!,DQI<W0@/2!P1D5!;&ES=#L-"B @96%O<"YO17)R;W(@
  1120. XM/2 P.PT*#0H@(&EF("@@1&]S475E<GE0871H26YF;RAS>DYA;64L($9)3%]1
  1121. XM5452645!4T923TU,25-4+ T*(" @(" @(" @(" @(" @(" @(" @(" @*%!"
  1122. XM651%*2 F96%O<"P@<VEZ96]F*&5A;W I*2 I#0H@('L-"B-I9F1E9B!?7T92
  1123. XM145?7PT*(" @(&9R964H<$1%3D$I.PT*(" @(&9R964H<$=%06QI<W0I.PT*
  1124. XM(V5N9&EF#0H@(" @<F5T=7)N.PT*("!]#0H-"B @+RH@5&AE(&UA>&EM=6T@
  1125. XM8V]M<')E<W-E9"!S:7IE(&ES("AI;B!C87-E(&]F(%-43U)%('1Y<&4I('1H
  1126. XM90T*(" @("!U;F-O;7!R97-S960@<VEZ92!P;'5S('1H92!S:7IE(&]F('1H
  1127. XM92!C;VUP<F5S<VEO;B!T>7!E(&9I96QD#0H@(" @('!L=7,@=&AE('-I>F4@
  1128. XM;V8@=&AE($-20R!F:65L9"X@*B\-"@T*("!U;$%T=')I8G5T97,@/2!P1D5!
  1129. XM;&ES=" M/B!C8DQI<W0[#0H@('5L365M;W)Y0FQO8VL@/2!U;$%T=')I8G5T
  1130. XM97,@*R!S:7IE;V8H55-(3U)4*2 K('-I>F5O9BA53$].1RD[#0H@('!%06)L
  1131. XM;V-K(#T@*%!%04A%041%4BD@;6%L;&]C*'-I>F5O9BA%04A%041%4BD@*R!U
  1132. XM;$UE;6]R>4)L;V-K*3L-"@T*("!I9B H('!%06)L;V-K(#T]($Y53$P@*0T*
  1133. XM(" @(')E='5R;CL-"@T*(" J8G5F<'1R(#T@*&-H87(@*BD@<$5!8FQO8VL[
  1134. XM#0H@("IS:7IE(#T@<VEZ96]F*$5!2$5!1$52*3L-"@T*("!P14%B;&]C:R M
  1135. XM/B!N240@/2!%04E$.PT*("!P14%B;&]C:R M/B!N4VEZ92 ]('-I>F5O9BAP
  1136. XM14%B;&]C:R M/B!L4VEZ92D[#0H@('!%06)L;V-K("T^(&Q3:7IE(#T@=6Q!
  1137. XM='1R:6)U=&5S.R O*B!U;F-O;7!R97-S960@<VEZ92 J+PT*#0H@(&Y,96YG
  1138. XM=&@@/2!M96UC;VUP<F5S<R@H8VAA<B J*2 H<$5!8FQO8VL@*R Q*2P@=6Q-
  1139. XM96UO<GE";&]C:RP-"B @(" @(" @(" @(" @(" @(" @(" @("AC:&%R("HI
  1140. XM('!&14%L:7-T+"!U;$%T=')I8G5T97,I.PT*(" J<VEZ92 K/2!N3&5N9W1H
  1141. XM.PT*("!P14%B;&]C:R M/B!N4VEZ92 K/2!N3&5N9W1H.PT*#0H@(&EF("@@
  1142. XM*'!%06)L;V-K(#T@*%!%04A%041%4BD@;6%L;&]C*'-I>F5O9BA%04A%041%
  1143. XM4BDI*2 ]/2!.54Q,("D-"B @("!R971U<FX[#0H-"B @*F-B=69P='(@/2 H
  1144. XM8VAA<B J*2!P14%B;&]C:SL-"B @*F-S:7IE(#T@<VEZ96]F*$5!2$5!1$52
  1145. XM*3L-"@T*("!P14%B;&]C:R M/B!N240@/2!%04E$.PT*("!P14%B;&]C:R M
  1146. XM/B!N4VEZ92 ]('-I>F5O9BAP14%B;&]C:R M/B!L4VEZ92D[#0H@('!%06)L
  1147. XM;V-K("T^(&Q3:7IE(#T@=6Q!='1R:6)U=&5S.PT*#0H@(&EF("@@;F]I<WD@
  1148. XM*0T*(" @('!R:6YT9B@B("@E;&0@8GET97,@14$G<RDB+"!U;$%T=')I8G5T
  1149. XM97,I.PT*?0T*#0HC96QS92 O*B A7U\S,D))5%]?("HO#0H-"G1Y<&5D968@
  1150. XM<W1R=6-T#0I[#0H@(%5,3TY'(&].97AT16YT<GE/9F9S970[#0H@($)95$4@
  1151. XM9D5!.PT*("!"651%(&-B3F%M93L-"B @55-(3U)4(&-B5F%L=64[#0H@($-(
  1152. XM05(@<WI.86UE6S%=.PT*?0T*1D5!,BP@*E!&14$R.PT*#0IT>7!E9&5F('-T
  1153. XM<G5C= T*>PT*("!53$].1R!C8DQI<W0[#0H@($9%03(@;&ES=%LQ73L-"GT-
  1154. XM"D9%03),25-4+" J4$9%03),25-4.PT*#0IV;VED($=E=$5!<RAC:&%R("IP
  1155. XM871H+"!C:&%R("HJ8G5F<'1R+"!U;G-I9VYE9" J<VEZ92P-"B @(" @(" @
  1156. XM(" @(" @(" @(" @(" @(&-H87(@*BIC8G5F<'1R+"!U;G-I9VYE9" J8W-I
  1157. XM>F4I#0I[#0H@($9)3$535$%455,R(&9S.PT*("!01$5.03$@<$1%3D$L('!&
  1158. XM;W5N9#L-"B @14%/4"!E86]P.PT*("!01T5!3$E35"!P1T5!;&ES=#L-"B @
  1159. XM4$=%02!P1T5!.PT*("!01D5!3$E35"!P1D5!;&ES=#L-"B @4$9%02!P1D5!
  1160. XM.PT*("!01D5!,DQ)4U0@<$9%03)L:7-T.PT*("!01D5!,B!P1D5!,CL-"B @
  1161. XM14%(14%$15(@*G!%06)L;V-K.PT*("!53$].1R!U;$%T=')I8G5T97,[#0H@
  1162. XM(%532$]25"!N3&5N9W1H+"!N36%X4VEZ93L-"B @8VAA<B!S>DYA;65;0T-(
  1163. XM34%84$%42%T[#0H-"B @*G-I>F4@/2 J8W-I>F4@/2 P.PT*#0H@(&EF("@@
  1164. XM7V]S;6]D92 ]/2!$3U-?34]$12 I#0H@(" @<F5T=7)N.PT*#0H@('-T<F-P
  1165. XM>2AS>DYA;64L('!A=&@I.PT*("!N3&5N9W1H(#T@<W1R;&5N*'-Z3F%M92D[
  1166. XM#0H@(&EF("@@<WI.86UE6VY,96YG=&@@+2 Q72 ]/2 G+R<@*0T*(" @('-Z
  1167. XM3F%M95MN3&5N9W1H("T@,5T@/2 P.PT*#0H@(&EF("@@1&]S475E<GE0871H
  1168. XM26YF;RAS>DYA;64L($9)3%]15452645!4TE:12P@*%!"651%*2 F9G,L('-I
  1169. XM>F5O9BAF<RDI#0H@(" @?'P@9G,N8V),:7-T(#P](#(@*B!S:7IE;V8H54Q/
  1170. XM3D<I("D-"B @("!R971U<FX[#0H-"B @=6Q!='1R:6)U=&5S(#T@+3$[#0H@
  1171. XM(&Y-87A3:7IE(#T@*%532$]25"D@;6EN*&9S+F-B3&ES=" J(#(L(#8U-3(P
  1172. XM3"D[#0H-"B @:68@*" H<$1%3D$@/2!M86QL;V,H*'-I>F5?="D@;DUA>%-I
  1173. XM>F4I*2 ]/2!.54Q,("D-"B @("!R971U<FX[#0H-"B @:68@*"!$;W-%;G5M
  1174. XM071T<FEB=71E*$5.54U%05]2149465!%7U!!5$@L('-Z3F%M92P@,2P@<$1%
  1175. XM3D$L(&9S+F-B3&ES="P-"B @(" @(" @(" @(" @(" @(" @(" @("9U;$%T
  1176. XM=')I8G5T97,L($5.54U%05],159%3%].3U]604Q512D-"B @("!\?"!U;$%T
  1177. XM=')I8G5T97,@/3T@, T*(" @('Q\("AP1T5!;&ES=" ](&UA;&QO8RAN36%X
  1178. XM4VEZ92DI(#T]($Y53$P@*0T*("![#0H@(" @9G)E92AP1$5.02D[#0H@(" @
  1179. XM<F5T=7)N.PT*("!]#0H-"B @<$=%02 ]('!'14%L:7-T("T^(&QI<W0[#0H@
  1180. XM('!&;W5N9" ]('!$14Y!.PT*#0H@('=H:6QE("@@=6Q!='1R:6)U=&5S+2T@
  1181. XM*0T*("![#0H@(" @;DQE;F=T:" ]('-T<FQE;BAP1F]U;F0@+3X@<WI.86UE
  1182. XM*3L-"@T*(" @(&EF("@@(2AS=')C;7 H<$9O=6YD("T^('-Z3F%M92P@(BY,
  1183. XM3TY'3D%-12(I(#T](# @)B8@=7-E7VQO;F=N86UE7V5A*2 I#0H@(" @>PT*
  1184. XM(" @(" @<$=%02 M/B!C8DYA;64@/2!P1F]U;F0@+3X@8V).86UE.PT*(" @
  1185. XM(" @<W1R8W!Y*'!'14$@+3X@<WI.86UE+"!P1F]U;F0@+3X@<WI.86UE*3L-
  1186. XM"@T*(" @(" @<$=%02 ]("A01T5!*2 H*%!#2"D@*'!'14$K*RD@*R!N3&5N
  1187. XM9W1H*3L-"B @("!]#0H-"B @("!P1F]U;F0@/2 H4$1%3D$Q*2 H*%!#2"D@
  1188. XM*'!&;W5N9"LK*2 K(&Y,96YG=&@I.PT*("!]#0H-"B @:68@*"!P1T5!(#T]
  1189. XM('!'14%L:7-T("T^(&QI<W0@*0T*("![#0H@(" @9G)E92AP1$5.02D[#0H@
  1190. XM(" @9G)E92AP1T5!;&ES="D[#0H@(" @<F5T=7)N.PT*("!]#0H-"B @<$=%
  1191. XM06QI<W0@+3X@8V),:7-T(#T@*%!#2"D@<$=%02 M("A00T@I('!'14%L:7-T
  1192. XM.PT*#0H@('!&14%L:7-T(#T@*%!&14%,25-4*2!P1$5.03L@+RH@<F5U<V4@
  1193. XM8G5F9F5R("HO#0H@('!&14%L:7-T("T^(&-B3&ES=" ](&9S+F-B3&ES=#L-
  1194. XM"B @<$9%02 ]('!&14%L:7-T("T^(&QI<W0[#0H-"B @96%O<"YF<$=%04QI
  1195. XM<W0@/2!P1T5!;&ES=#L-"B @96%O<"YF<$9%04QI<W0@/2!P1D5!;&ES=#L-
  1196. XM"B @96%O<"YO17)R;W(@/2 P.PT*#0H@(&EF("@@1&]S475E<GE0871H26YF
  1197. XM;RAS>DYA;64L($9)3%]15452645!4T923TU,25-4+ T*(" @(" @(" @(" @
  1198. XM(" @(" @(" H4$)95$4I("9E86]P+"!S:7IE;V8H96%O<"DI("D-"B @>PT*
  1199. XM(" @(&9R964H<$1%3D$I.PT*(" @(&9R964H<$=%06QI<W0I.PT*(" @(')E
  1200. XM='5R;CL-"B @?0T*#0H@("\J(&YO=R!C;VYV97)T(&EN=&\@;F5W($]3+S(@
  1201. XM,BXP(#,R+6)I="!F;W)M870@*B\-"@T*("!P1D5!,FQI<W0@/2 H4$9%03),
  1202. XM25-4*2!P1T5!;&ES=#L@("\J(')E=7-E(&)U9F9E<B J+PT*("!P1D5!,B ]
  1203. XM('!&14$R;&ES=" M/B!L:7-T.PT*#0H@('=H:6QE("@@*%!#2"D@<$9%02 M
  1204. XM("A00T@I('!&14%L:7-T(#P@<$9%06QI<W0@+3X@8V),:7-T("D-"B @>PT*
  1205. XM(" @(&Y,96YG=&@@/2!S:7IE;V8H1D5!*2 K('!&14$@+3X@8V).86UE("L@
  1206. XM,2 K('!&14$@+3X@8V)686QU93L-"B @("!M96UC<'DH*%!#2"D@<$9%03(@
  1207. XM*R!S:7IE;V8H<$9%03(@+3X@;TYE>'1%;G1R>4]F9G-E="DL('!&14$L(&Y,
  1208. XM96YG=&@I.PT*(" @(&UE;7-E="@H4$-(*2!P1D5!,B K('-I>F5O9BAP1D5!
  1209. XM,B M/B!O3F5X=$5N=')Y3V9F<V5T*2 K(&Y,96YG=&@L(# L(#,I.PT*(" @
  1210. XM('!&14$@/2 H4$9%02D@*"A00T@I('!&14$@*R!N3&5N9W1H*3L-"@T*(" @
  1211. XM(&Y,96YG=&@@/2!S:7IE;V8H1D5!,BD@*R!P1D5!,B M/B!C8DYA;64@*R Q
  1212. XM("L@<$9%03(@+3X@8V)686QU93L-"B @("!N3&5N9W1H(#T@*"AN3&5N9W1H
  1213. XM("T@,2D@+R!S:7IE;V8H54Q/3D<I("L@,2D@*B!S:7IE;V8H54Q/3D<I.PT*
  1214. XM(" @("\J(')O=6YD960@=7 @=&\@-"UB>71E(&)O=6YD87)Y("HO#0H@(" @
  1215. XM<$9%03(@+3X@;TYE>'1%;G1R>4]F9G-E=" ]#0H@(" @(" H*%!#2"D@<$9%
  1216. XM02 M("A00T@I('!&14%L:7-T(#P@<$9%06QI<W0@+3X@8V),:7-T*2 _(&Y,
  1217. XM96YG=&@@.B P.PT*(" @('!&14$R(#T@*%!&14$R*2 H*%!#2"D@<$9%03(@
  1218. XM*R!N3&5N9W1H*3L-"B @?0T*#0H@('!&14$R;&ES=" M/B!C8DQI<W0@/2 H
  1219. XM4$-(*2!P1D5!,B M("A00T@I('!&14$R;&ES=#L-"B @=6Q!='1R:6)U=&5S
  1220. XM(#T@<$9%03)L:7-T("T^(&-B3&ES=#L-"@T*("!P14%B;&]C:R ]("A014%(
  1221. XM14%$15(I('!$14Y!.R O*B!R975S92!B=69F97(@*B\-"@T*(" J8G5F<'1R
  1222. XM(#T@*&-H87(@*BD@<$5!8FQO8VL[#0H@("IS:7IE(#T@<VEZ96]F*$5!2$5!
  1223. XM1$52*3L-"@T*("!P14%B;&]C:R M/B!N240@/2!%04E$.PT*("!P14%B;&]C
  1224. XM:R M/B!N4VEZ92 ]('-I>F5O9BAP14%B;&]C:R M/B!L4VEZ92D[#0H@('!%
  1225. XM06)L;V-K("T^(&Q3:7IE(#T@=6Q!='1R:6)U=&5S.R O*B!U;F-O;7!R97-S
  1226. XM960@<VEZ92 J+PT*#0H@(&Y,96YG=&@@/2 H55-(3U)4*2!M96UC;VUP<F5S
  1227. XM<R@H8VAA<B J*2 H<$5!8FQO8VL@*R Q*2P-"B @("!N36%X4VEZ92 M('-I
  1228. XM>F5O9BA%04A%041%4BDL("AC:&%R("HI('!&14$R;&ES="P@=6Q!='1R:6)U
  1229. XM=&5S*3L-"@T*(" J<VEZ92 K/2!N3&5N9W1H.PT*("!P14%B;&]C:R M/B!N
  1230. XM4VEZ92 K/2!N3&5N9W1H.PT*#0H@('!%06)L;V-K(#T@*%!%04A%041%4BD@
  1231. XM<$=%06QI<W0[#0H-"B @*F-B=69P='(@/2 H8VAA<B J*2!P14%B;&]C:SL-
  1232. XM"B @*F-S:7IE(#T@<VEZ96]F*$5!2$5!1$52*3L-"@T*("!P14%B;&]C:R M
  1233. XM/B!N240@/2!%04E$.PT*("!P14%B;&]C:R M/B!N4VEZ92 ]('-I>F5O9BAP
  1234. XM14%B;&]C:R M/B!L4VEZ92D[#0H@('!%06)L;V-K("T^(&Q3:7IE(#T@=6Q!
  1235. XM='1R:6)U=&5S.PT*#0H@(&EF("@@;F]I<WD@*0T*(" @('!R:6YT9B@B("@E
  1236. XM;&0@8GET97,@14$G<RDB+"!U;$%T=')I8G5T97,I.PT*?0T*#0HC96YD:68@
  1237. XM+RH@7U\S,D))5%]?("HO#0H-"@T*(V5N9&EF("\J(%5424P@*B\-"@T*#0HO
  1238. XM*B!);FET:6%L:7IE('1H92!T86)L92!O9B!U<'!E<F-A<V4@8VAA<F%C=&5R
  1239. XM<R!I;F-L=61I;F<@:&%N9&QI;F<@;V8-"B @(&-O=6YT<GD@9&5P96YD96YT
  1240. XM(&-H87)A8W1E<G,N("HO#0H-"G9O:60@:6YI=%]U<'!E<B@I#0I[#0H@($-/
  1241. XM54Y44EE#3T1%(&-C.PT*("!U;G-I9VYE9"!N0VYT+"!N53L-"@T*("!F;W(@
  1242. XM*"!N0VYT(#T@,#L@;D-N=" \('-I>F5O9BAU<'!E<BD[(&Y#;G0K*R I#0H@
  1243. XM(" @=7!P97);;D-N=%T@/2!L;W=E<EMN0VYT72 ]("AU;G-I9VYE9"!C:&%R
  1244. XM*2!N0VYT.PT*#0H@(&-C+F-O=6YT<GD@/2!C8RYC;V1E<&%G92 ](# [#0H@
  1245. XM($1O<TUA<$-A<V4H<VEZ96]F*'5P<&5R*2P@)F-C+" H4$-(05(I('5P<&5R
  1246. XM*3L-"@T*("!F;W(@*"!N0VYT(#T@,#L@;D-N=" \(#(U-CL@;D-N="LK("D-
  1247. XM"B @>PT*(" @(&Y5(#T@=7!P97);;D-N=%T[#0H@(" @:68@*&Y5("$](&Y#
  1248. XM;G0@)B8@;&]W97);;E5=(#T]("AU;G-I9VYE9"!C:&%R*2!N52D-"B @(" @
  1249. XM(&QO=V5R6VY572 ]("AU;G-I9VYE9"!C:&%R*2!N0VYT.PT*("!]#0H-"B @
  1250. XM9F]R("@@;D-N=" ]("=!)SL@;D-N=" \/2 G6B<[(&Y#;G0K*R I#0H@(" @
  1251. XM;&]W97);;D-N=%T@/2 H=6YS:6=N960@8VAA<BD@*&Y#;G0@+2 G02<@*R G
  1252. XM82<I.PT*?0T*#0H-"F-H87(@*E-T<FEN9TQO=V5R*&-H87(@*G-Z07)G*0T*
  1253. XM>PT*("!U;G-I9VYE9"!C:&%R("IS>E!T<CL-"B @9F]R("@@<WI0='(@/2!S
  1254. XM>D%R9SL@*G-Z4'1R.R!S>E!T<BLK("D-"B @(" J<WI0='(@/2!L;W=E<ELJ
  1255. X=<WI0=')=.PT*("!R971U<FX@<WI!<F<[#0I]#0HJ
  1256. Xend
  1257. END_OF_FILE
  1258.  if test 28901 -ne `wc -c <'os2/os2zip.c.UU'`; then
  1259.     echo shar: \"'os2/os2zip.c.UU'\" unpacked with wrong size!
  1260.   else
  1261.     echo shar: Uudecoding \"'os2/os2zip.c'\" \(20954 characters\)
  1262.     cat os2/os2zip.c.UU | uudecode
  1263.     if test 20954 -ne `wc -c <'os2/os2zip.c'`; then
  1264.       echo shar: \"'os2/os2zip.c'\" uudecoded with wrong size!
  1265.     else
  1266.       rm os2/os2zip.c.UU
  1267.     fi
  1268.   fi
  1269.   # end of 'os2/os2zip.c.UU'
  1270. fi
  1271. echo shar: End of archive 5 \(of 11\).
  1272. cp /dev/null ark5isdone
  1273. MISSING=""
  1274. for I in 1 2 3 4 5 6 7 8 9 10 11 ; do
  1275.     if test ! -f ark${I}isdone ; then
  1276.     MISSING="${MISSING} ${I}"
  1277.     fi
  1278. done
  1279. if test "${MISSING}" = "" ; then
  1280.     echo You have unpacked all 11 archives.
  1281.     rm -f ark[1-9]isdone ark[1-9][0-9]isdone
  1282. else
  1283.     echo You still must unpack the following archives:
  1284.     echo "        " ${MISSING}
  1285. fi
  1286. exit 0
  1287. exit 0 # Just in case...
  1288.