1 /*
2 * common functions for Indeo Video Interactive codecs (Indeo4 and Indeo5)
3 *
4 * Copyright (c) 2009 Maxim Poliakovski
5 *
6 * This file is part of FFmpeg.
7 *
8 * FFmpeg is free software; you can redistribute it and/or
9 * modify it under the terms of the GNU Lesser General Public
10 * License as published by the Free Software Foundation; either
11 * version 2.1 of the License, or (at your option) any later version.
12 *
13 * FFmpeg is distributed in the hope that it will be useful,
14 * but WITHOUT ANY WARRANTY; without even the implied warranty of
15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
16 * Lesser General Public License for more details.
17 *
18 * You should have received a copy of the GNU Lesser General Public
19 * License along with FFmpeg; if not, write to the Free Software
20 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
21 */
22
23 /**
24 * @file
25 * This file contains functions and data shared by both Indeo4 and
26 * Indeo5 decoders.
27 */
28
29 #include <inttypes.h>
30
31 #define BITSTREAM_READER_LE
40
41 /**
42 * These are 2x8 predefined Huffman codebooks for coding macroblock/block
43 * signals. They are specified using "huffman descriptors" in order to
44 * avoid huge static tables. The decoding tables will be generated at
45 * startup from these descriptors.
46 */
47 /** static macroblock huffman tables */
49 {8, {0, 4, 5, 4, 4, 4, 6, 6}},
50 {12, {0, 2, 2, 3, 3, 3, 3, 5, 3, 2, 2, 2}},
51 {12, {0, 2, 3, 4, 3, 3, 3, 3, 4, 3, 2, 2}},
52 {12, {0, 3, 4, 4, 3, 3, 3, 3, 3, 2, 2, 2}},
53 {13, {0, 4, 4, 3, 3, 3, 3, 2, 3, 3, 2, 1, 1}},
54 {9, {0, 4, 4, 4, 4, 3, 3, 3, 2}},
55 {10, {0, 4, 4, 4, 4, 3, 3, 2, 2, 2}},
56 {12, {0, 4, 4, 4, 3, 3, 2, 3, 2, 2, 2, 2}}
57 };
58
59 /** static block huffman tables */
61 {10, {1, 2, 3, 4, 4, 7, 5, 5, 4, 1}},
62 {11, {2, 3, 4, 4, 4, 7, 5, 4, 3, 3, 2}},
63 {12, {2, 4, 5, 5, 5, 5, 6, 4, 4, 3, 1, 1}},
64 {13, {3, 3, 4, 4, 5, 6, 6, 4, 4, 3, 2, 1, 1}},
65 {11, {3, 4, 4, 5, 5, 5, 6, 5, 4, 2, 2}},
66 {13, {3, 4, 5, 5, 5, 5, 6, 4, 3, 3, 2, 1, 1}},
67 {13, {3, 4, 5, 5, 5, 6, 5, 4, 3, 3, 2, 1, 1}},
68 {9, {3, 4, 4, 5, 5, 5, 6, 5, 5}}
69 };
70
73
75 uint32_t pitch, int mc_type);
77 const int16_t *ref_buf2,
78 uint32_t pitch, int mc_type, int mc_type2);
79
81 int offs, int mv_x, int mv_y, int mv_x2, int mv_y2,
82 int mc_type, int mc_type2)
83 {
84 int ref_offs = offs + mv_y * band->
pitch + mv_x;
87 int ref_size = (mc_type > 1) * band->
pitch + (mc_type & 1);
88
89 if (mc_type != -1) {
92 av_assert0(buf_size - min_size - ref_size >= ref_offs);
93 }
94
95 if (mc_type2 == -1) {
97 } else {
98 int ref_offs2 = offs + mv_y2 * band->
pitch + mv_x2;
99 int ref_size2 = (mc_type2 > 1) * band->
pitch + (mc_type2 & 1);
100 if (offs < 0 || ref_offs2 < 0 || !band->b_ref_buf)
102 if (buf_size - min_size - ref_size2 < ref_offs2)
104
105 if (mc_type == -1)
107 band->
pitch, mc_type2);
108 else
109 mc_avg(band->
buf + offs, band->
ref_buf + ref_offs,
111 mc_type, mc_type2);
112 }
113
114 return 0;
115 }
116
117 /**
118 * Reverse "nbits" bits of the value "val" and return the result
119 * in the least significant bits.
120 */
122 {
123 uint16_t res;
124
125 if (nbits <= 8) {
127 } else
130
131 return res;
132 }
133
134 /*
135 * Generate a huffman codebook from the given descriptor
136 * and convert it into the FFmpeg VLC table.
137 *
138 * @param[in] cb pointer to codebook descriptor
139 * @param[out] vlc where to place the generated VLC table
140 * @param[in] flag flag: 1 - for static or 0 for dynamic tables
141 * @return result code: 0 - OK, -1 = error (invalid codebook descriptor)
142 */
144 {
145 int pos, i, j, codes_per_row, prefix, not_last_row;
146 uint16_t codewords[256]; /* FIXME: move this temporal storage out? */
148
149 pos = 0; /* current position = 0 */
150
151 for (i = 0; i < cb->
num_rows; i++) {
152 codes_per_row = 1 << cb->
xbits[i];
153 not_last_row = (i != cb->
num_rows - 1);
154 prefix = ((1 << i) - 1) << (cb->
xbits[i] + not_last_row);
155
156 for (j = 0; j < codes_per_row; j++) {
157 if (pos >= 256) /* Some Indeo5 codebooks can have more than 256 */
158 break; /* elements, but only 256 codes are allowed! */
159
160 bits[pos] = i + cb->
xbits[i] + not_last_row;
163
164 codewords[pos] =
inv_bits((prefix | j), bits[pos]);
165 if (!bits[pos])
166 bits[pos] = 1;
167
168 pos++;
169 }//for j
170 }//for i
171
172 /* number of codewords = pos */
175 }
176
178 {
179 int i;
181 static int initialized_vlcs = 0;
182
183 if (initialized_vlcs)
184 return;
185 for (i = 0; i < 8; i++) {
186 ivi_mb_vlc_tabs[i].
table = table_data + i * 2 * 8192;
189 &ivi_mb_vlc_tabs[i], 1);
190 ivi_blk_vlc_tabs[i].
table = table_data + (i * 2 + 1) * 8192;
193 &ivi_blk_vlc_tabs[i], 1);
194 }
195 initialized_vlcs = 1;
196 }
197
198 /*
199 * Copy huffman codebook descriptors.
200 *
201 * @param[out] dst ptr to the destination descriptor
202 * @param[in] src ptr to the source descriptor
203 */
205 {
208 }
209
210 /*
211 * Compare two huffman codebook descriptors.
212 *
213 * @param[in] desc1 ptr to the 1st descriptor to compare
214 * @param[in] desc2 ptr to the 2nd descriptor to compare
215 * @return comparison result: 0 - equal, 1 - not equal
216 */
219 {
222 }
223
226 {
227 int i, result;
229
230 if (!desc_coded) {
231 /* select default table */
232 huff_tab->
tab = (which_tab) ? &ivi_blk_vlc_tabs[7]
233 : &ivi_mb_vlc_tabs [7];
234 return 0;
235 }
236
239 /* custom huffman table (explicitly encoded) */
244 }
245
246 for (i = 0; i < new_huff.
num_rows; i++)
248
249 /* Have we got the same custom table? Rebuild if not. */
252
257 if (result) {
258 // reset faulty description
261 "Error while initializing custom vlc table!\n");
262 return result;
263 }
264 }
266 } else {
267 /* select one of predefined tables */
268 huff_tab->
tab = (which_tab) ? &ivi_blk_vlc_tabs[huff_tab->
tab_sel]
269 : &ivi_mb_vlc_tabs [huff_tab->
tab_sel];
270 }
271
272 return 0;
273 }
274
275 /*
276 * Free planes, bands and macroblocks buffers.
277 *
278 * @param[in] planes pointer to the array of the plane descriptors
279 */
281 {
283
284 for (p = 0; p < 3; p++) {
285 if (planes[p].bands)
286 for (b = 0; b < planes[p].
num_bands; b++) {
287 av_freep(&planes[p].bands[b].bufs[0]);
288 av_freep(&planes[p].bands[b].bufs[1]);
289 av_freep(&planes[p].bands[b].bufs[2]);
290 av_freep(&planes[p].bands[b].bufs[3]);
291
292 if (planes[p].bands[b].blk_vlc.cust_tab.table)
295 av_freep(&planes[p].bands[b].tiles[t].mbs);
296 av_freep(&planes[p].bands[b].tiles);
297 }
300 }
301 }
302
304 int is_indeo4)
305 {
307 uint32_t b_width, b_height, align_fac, width_aligned,
308 height_aligned, buf_size;
310
312
316
317 /* fill in the descriptor of the luminance plane */
321
322 /* fill in the descriptors of the chrominance planes */
326
327 for (p = 0; p < 3; p++) {
329 if (!planes[p].bands)
331
332 /* select band dimensions: if there is only one band then it
333 * has the full size, if there are several bands each of them
334 * has only half size */
336 : (planes[p].
width + 1) >> 1;
338 : (planes[p].
height + 1) >> 1;
339
340 /* luma band buffers will be aligned on 16x16 (max macroblock size) */
341 /* chroma band buffers will be aligned on 8x8 (max macroblock size) */
342 align_fac = p ? 8 : 16;
343 width_aligned =
FFALIGN(b_width , align_fac);
344 height_aligned =
FFALIGN(b_height, align_fac);
345 buf_size = width_aligned * height_aligned * sizeof(int16_t);
346
347 for (b = 0; b < planes[p].
num_bands; b++) {
348 band = &planes[p].
bands[
b];
/* select appropriate plane/band */
351 band->
width = b_width;
353 band->
pitch = width_aligned;
354 band->
aheight = height_aligned;
358 if (!band->
bufs[0] || !band->
bufs[1])
360
361 /* allocate the 3rd band buffer for scalability mode */
366 }
367 if (is_indeo4) {
371 }
372 /* reset custom vlc */
374 }
375 }
376
377 return 0;
378 }
379
381 int p,
int b,
int t_height,
int t_width)
382 {
385
386 for (y = 0; y < band->
height; y += t_height) {
387 for (x = 0; x < band->
width; x += t_width) {
394 /* calculate number of macroblocks */
397
402
404 if (p || b) {
408 }
410 ref_tile++;
411 }
412 tile++;
413 }
414 }
415
416 return 0;
417 }
418
420 int tile_width, int tile_height)
421 {
422 int p,
b, x_tiles, y_tiles, t_width, t_height,
ret;
424
425 for (p = 0; p < 3; p++) {
426 t_width = !p ? tile_width : (tile_width + 3) >> 2;
427 t_height = !p ? tile_height : (tile_height + 3) >> 2;
428
429 if (!p && planes[0].num_bands == 4) {
430 t_width >>= 1;
431 t_height >>= 1;
432 }
433 if(t_width<=0 || t_height<=0)
435
436 for (b = 0; b < planes[p].
num_bands; b++) {
437 band = &planes[p].
bands[
b];
441
446
447 /* use the first luma band as reference for motion vectors
448 * and quant */
450 p, b, t_height, t_width);
451 if (ret < 0)
453 }
454 }
455
456 return 0;
457 }
458
459 /*
460 * Decode size of the tile data.
461 * The size is stored as a variable-length field having the following format:
462 * if (tile_data_size < 255) than this field is only one byte long
463 * if (tile_data_size >= 255) than this field four is byte long: 0xFF X1 X2 X3
464 * where X1-X3 is size of the tile data
465 *
466 * @param[in,out] gb the GetBit context
467 * @return size of the tile data in bytes
468 */
470 {
472
473 len = 0;
476 if (len == 255)
478 }
479
480 /* align the bitstream reader on the byte boundary */
482
484 }
485
487 int blk_size)
488 {
490 int min_size = (blk_size - 1) * band->
pitch + blk_size;
491
492 if (min_size > buf_size)
494
496 band->
pitch, blk_size);
497
498 return 0;
499 }
500
503 int mv_x, int mv_y,
504 int mv_x2, int mv_y2,
505 int *prev_dc, int is_intra,
506 int mc_type, int mc_type2,
507 uint32_t
quant,
int offs,
509 {
514 uint32_t sym = 0, lo, hi, q;
517 int num_coeffs = blk_size * blk_size;
518 int col_mask = blk_size - 1;
519 int scan_pos = -1;
523
524 if (min_size > buf_size)
526
530 }
531
532 /* zero transform vector */
533 memset(trvec, 0, num_coeffs * sizeof(trvec[0]));
534 /* zero column flags */
535 memset(col_flags, 0, sizeof(col_flags));
536 while (scan_pos <= num_coeffs) {
540 break; /* End of block */
541
542 /* Escape - run/val explicitly coded using 3 vlc codes */
547 /* merge them and convert into signed val */
549 } else {
553 }
556 }
557
558 /* de-zigzag and dequantize */
560 if (scan_pos >= num_coeffs || scan_pos < 0)
561 break;
562 pos = band->
scan[scan_pos];
563
564 if (!val)
565 av_dlog(avctx,
"Val = 0 encountered!\n");
566
567 q = (base_tab[pos] *
quant) >> 9;
568 if (q > 1)
569 val = val * q +
FFSIGN(val) * (((q ^ 1) - 1) >> 1);
571 /* track columns containing non-zero coeffs */
572 col_flags[pos & col_mask] |= !!
val;
573 }
574
575 if (scan_pos < 0 || scan_pos >= num_coeffs && sym != rvmap->
eob_sym)
577
578 /* undoing DC coeff prediction for intra-blocks */
580 *prev_dc += trvec[0];
581 trvec[0] = *prev_dc;
582 col_flags[0] |= !!*prev_dc;
583 }
584
588 }
589
590 /* apply inverse transform */
592 band->
pitch, col_flags);
593
594 /* apply motion compensation */
595 if (!is_intra)
596 return ivi_mc(band, mc, mc_avg, offs, mv_x, mv_y, mv_x2, mv_y2,
597 mc_type, mc_type2);
598
599 return 0;
600 }
601 /*
602 * Decode block data:
603 * extract huffman-coded transform coefficients from the bitstream,
604 * dequantize them, apply inverse transform and motion compensation
605 * in order to reconstruct the picture.
606 *
607 * @param[in,out] gb the GetBit context
608 * @param[in] band pointer to the band descriptor
609 * @param[in] tile pointer to the tile descriptor
610 * @return result code: 0 - OK, -1 = error (corrupted blocks data)
611 */
614 {
615 int mbn,
blk, num_blocks, blk_size,
ret, is_intra;
616 int mc_type = 0, mc_type2 = -1;
617 int mv_x = 0, mv_y = 0, mv_x2 = 0, mv_y2 = 0;
619 uint32_t cbp,
quant, buf_offs;
624
625 /* init intra prediction for the DC coefficient */
626 prev_dc = 0;
628 /* number of blocks per mb */
629 num_blocks = (band->
mb_size != blk_size) ? 4 : 1;
630 if (blk_size == 8) {
635 } else {
640 }
641
642 for (mbn = 0, mb = tile->
mbs; mbn < tile->num_MBs; mb++, mbn++) {
643 is_intra = !mb->
type;
646
649 quant = av_clip_uintp2(quant, 5);
650 else
651 quant = av_clip(quant, 0, 23);
652
654 if (scale_tab)
655 quant = scale_tab[
quant];
656
657 if (!is_intra) {
663 mc_type = ((mv_y & 1) << 1) | (mv_x & 1);
664 mc_type2 = ((mv_y2 & 1) << 1) | (mv_x2 & 1);
665 mv_x >>= 1;
666 mv_y >>= 1;
667 mv_x2 >>= 1;
668 mv_y2 >>= 1; /* convert halfpel vectors into fullpel ones */
669 }
671 mc_type = -1;
673 mc_type2 = -1;
675 int dmv_x, dmv_y, cx, cy;
676
681
682 if (mb->
xpos + dmv_x < 0 ||
684 mb->
ypos + dmv_y < 0 ||
687 }
688 }
689 if (mb->
type == 2 || mb->
type == 3) {
690 int dmv_x, dmv_y, cx, cy;
691
696
697 if (mb->
xpos + dmv_x < 0 ||
699 mb->
ypos + dmv_y < 0 ||
702 }
703 }
704 }
705
706 for (blk = 0; blk < num_blocks; blk++) {
707 /* adjust block position in the buffer according to its number */
708 if (blk & 1) {
709 buf_offs += blk_size;
710 } else if (blk == 2) {
711 buf_offs -= blk_size;
712 buf_offs += blk_size * band->
pitch;
713 }
714
715 if (cbp & 1) { /* block coded ? */
717 mc_avg_with_delta_func,
718 mv_x, mv_y, mv_x2, mv_y2,
719 &prev_dc, is_intra,
720 mc_type, mc_type2, quant,
721 buf_offs, avctx);
722 if (ret < 0)
724 } else {
725 /* block not coded */
726 /* for intra blocks apply the dc slant transform */
727 /* for inter - perform the motion compensation without delta */
728 if (is_intra) {
730 if (ret < 0)
732 } else {
733 ret =
ivi_mc(band, mc_no_delta_func, mc_avg_no_delta_func,
734 buf_offs, mv_x, mv_y, mv_x2, mv_y2,
735 mc_type, mc_type2);
736 if (ret < 0)
738 }
739 }
740
741 cbp >>= 1;
742 }// for blk
743 }// for mbn
744
746
747 return 0;
748 }
749
750 /**
751 * Handle empty tiles by performing data copying and motion
752 * compensation respectively.
753 *
754 * @param[in] avctx ptr to the AVCodecContext
755 * @param[in] band pointer to the band descriptor
756 * @param[in] tile pointer to the tile descriptor
757 * @param[in] mv_scale scaling factor for motion vectors
758 */
761 {
762 int x,
y, need_mc, mbn,
blk, num_blocks, mv_x, mv_y, mc_type;
763 int offs, mb_offset, row_offset,
ret;
766 int16_t *dst;
768
771 "parameters %d in ivi_process_empty_tile()\n",
774 }
775
780 need_mc = 0; /* reset the mc tracking flag */
781
783 mb_offset = offs;
784
789
790 mb->
type = 1;
/* set the macroblocks type = INTER */
791 mb->
cbp = 0;
/* all blocks are empty */
792
797 }
798
801
803 /* motion vector inheritance */
804 if (mv_scale) {
807 } else {
810 }
811 need_mc |= mb->
mv_x || mb->
mv_y;
/* tracking non-zero motion vectors */
812 {
813 int dmv_x, dmv_y, cx, cy;
814
819
820 if ( mb->
xpos + dmv_x < 0
822 || mb->
ypos + dmv_y < 0
826 }
827 }
828 }
829
830 mb++;
831 if (ref_mb)
832 ref_mb++;
834 } // for x
835 offs += row_offset;
836 } // for y
837
838 if (band->
inherit_mv && need_mc) {
/* apply motion compensation if there is at least one non-zero motion vector */
839 num_blocks = (band->
mb_size != band->
blk_size) ? 4 : 1;
/* number of blocks per mb */
842
843 for (mbn = 0, mb = tile->
mbs; mbn < tile->num_MBs; mb++, mbn++) {
847 mc_type = 0; /* we have only fullpel vectors */
848 } else {
849 mc_type = ((mv_y & 1) << 1) | (mv_x & 1);
850 mv_x >>= 1;
851 mv_y >>= 1; /* convert halfpel vectors into fullpel ones */
852 }
853
854 for (blk = 0; blk < num_blocks; blk++) {
855 /* adjust block position in the buffer according with its number */
857 ret =
ivi_mc(band, mc_no_delta_func, 0, offs,
858 mv_x, mv_y, 0, 0, mc_type, -1);
859 if (ret < 0)
861 }
862 }
863 } else {
864 /* copy data from the reference tile into the current one */
867 for (y = 0; y < tile->
height; y++) {
868 memcpy(dst, src, tile->
width*
sizeof(band->
buf[0]));
871 }
872 }
873
874 return 0;
875 }
876
877
878 #ifdef DEBUG
880 {
882 int16_t *
src, checksum;
883
885 checksum = 0;
886
887 for (y = 0; y < band->
height; src += band->
pitch, y++)
888 for (x = 0; x < band->
width; x++)
889 checksum += src[x];
890
891 return checksum;
892 }
893 #endif
894
895 /*
896 * Convert and output the current plane.
897 * This conversion is done by adding back the bias value of 128
898 * (subtracted in the encoder) and clipping the result.
899 *
900 * @param[in] plane pointer to the descriptor of the plane being processed
901 * @param[out] dst pointer to the buffer receiving converted pixels
902 * @param[in] dst_pitch pitch for moving to the next y line
903 */
905 {
907 const int16_t *src = plane->
bands[0].
buf;
909
910 if (!src)
911 return;
912
913 for (y = 0; y < plane->
height; y++) {
914 for (x = 0; x < plane->
width; x++)
915 dst[x] = av_clip_uint8(src[x] + 128);
916 src += pitch;
918 }
919 }
920
921 /**
922 * Decode an Indeo 4 or 5 band.
923 *
924 * @param[in,out] ctx ptr to the decoder context
925 * @param[in,out] band ptr to the band descriptor
926 * @param[in] avctx ptr to the AVCodecContext
927 * @return result code: 0 = OK, -1 = error
928 */
931 {
932 int result, i, t, idx1, idx2, pos;
934
939 }
943 } else {
946 }
948
950 if (result) {
952 result);
953 return result;
954 }
955
959 }
960
962
963 /* apply corrections to the selected rvmap table if present */
964 for (i = 0; i < band->
num_corr; i++) {
965 idx1 = band->
corr[i * 2];
966 idx2 = band->
corr[i * 2 + 1];
973 }
974
976
978 tile = &band->
tiles[t];
979
984 }
989 if (result < 0)
990 break;
991 av_dlog(avctx,
"Empty tile encountered!\n");
992 } else {
997 break;
998 }
999
1001 if (result < 0)
1002 break;
1003
1005 if (result < 0) {
1007 "Corrupted tile data encountered!\n");
1008 break;
1009 }
1010
1013 "Tile data_size mismatch!\n");
1015 break;
1016 }
1017
1018 pos += tile->
data_size << 3;
// skip to next tile
1019 }
1020 }
1021
1022 /* restore the selected rvmap table by applying its corrections in
1023 * reverse order */
1024 for (i = band->
num_corr-1; i >= 0; i--) {
1025 idx1 = band->
corr[i*2];
1026 idx2 = band->
corr[i*2+1];
1033 }
1034
1035 #ifdef DEBUG
1037 uint16_t chksum = ivi_calc_band_checksum(band);
1040 "Band checksum mismatch! Plane %d, band %d, "
1041 "received: %"PRIx32", calculated: %"PRIx16"\n",
1043 }
1044 }
1045 #endif
1046
1048
1049 return result;
1050 }
1051
1054 {
1058 int buf_size = avpkt->
size;
1060
1064
1066 if (result) {
1068 "Error while decoding picture header: %d\n", result);
1069 return result;
1070 }
1073
1077 *got_frame = 1;
1079 } else {
1080 *got_frame = 0;
1081 }
1082 return buf_size;
1083 }
1084
1088 }
1089
1093 }
1094
1096
1097 //{ START_TIMER;
1098
1101 for (p = 0; p < 3; p++) {
1104 if (result < 0) {
1106 "Error while decoding band: %d, plane: %d\n", b, p);
1107 return result;
1108 }
1109 }
1110 }
1112 } else {
1115
1116 for (p = 0; p < 3; p++) {
1119 }
1120 }
1122 return -1;
1123
1124 //STOP_TIMER("decode_planes"); }
1125
1127 return buf_size;
1128
1130 if (result < 0)
1131 return result;
1132
1134 return result;
1135
1139 else
1141 } else {
1143 }
1144
1147
1148 *got_frame = 1;
1149
1150 /* If the bidirectional mode is enabled, next I and the following P
1151 * frame will be sent together. Unfortunately the approach below seems
1152 * to be the only way to handle the B-frames mode.
1153 * That's exactly the same Intel decoders do.
1154 */
1156 int left;
1157
1158 // skip version string
1162 }
1171 }
1172 }
1173
1174 return buf_size;
1175 }
1176
1177 /**
1178 * Close Indeo5 decoder and clean up its context.
1179 */
1181 {
1183
1185
1188
1189 #if IVI4_STREAM_ANALYSER
1193 if (ctx->uses_tiling)
1195 if (ctx->has_b_frames)
1197 if (ctx->has_transp)
1199 if (ctx->uses_haar)
1201 if (ctx->uses_fullpel)
1203 }
1204 #endif
1205
1207
1208 return 0;
1209 }
1210
1211
1212 /**
1213 * Scan patterns shared between indeo4 and indeo5
1214 */
1216 0, 8, 16, 24, 32, 40, 48, 56,
1217 1, 9, 17, 25, 33, 41, 49, 57,
1218 2, 10, 18, 26, 34, 42, 50, 58,
1219 3, 11, 19, 27, 35, 43, 51, 59,
1220 4, 12, 20, 28, 36, 44, 52, 60,
1221 5, 13, 21, 29, 37, 45, 53, 61,
1222 6, 14, 22, 30, 38, 46, 54, 62,
1223 7, 15, 23, 31, 39, 47, 55, 63
1224 };
1225
1227 0, 1, 2, 3, 4, 5, 6, 7,
1228 8, 9, 10, 11, 12, 13, 14, 15,
1229 16, 17, 18, 19, 20, 21, 22, 23,
1230 24, 25, 26, 27, 28, 29, 30, 31,
1231 32, 33, 34, 35, 36, 37, 38, 39,
1232 40, 41, 42, 43, 44, 45, 46, 47,
1233 48, 49, 50, 51, 52, 53, 54, 55,
1234 56, 57, 58, 59, 60, 61, 62, 63
1235 };
1236
1238 0, 1, 4, 8, 5, 2, 3, 6, 9, 12, 13, 10, 7, 11, 14, 15
1239 };
1240
1241
1242 /**
1243 * Run-value (RLE) tables.
1244 */
1246 { /* MapTab0 */
1247 5, /* eob_sym */
1248 2, /* esc_sym */
1249 /* run table */
1250 {1, 1, 0, 1, 1, 0, 1, 1, 2, 2, 1, 1, 1, 1, 3, 3,
1251 1, 1, 2, 2, 1, 1, 4, 4, 1, 1, 1, 1, 2, 2, 5, 5,
1252 1, 1, 3, 3, 1, 1, 6, 6, 1, 2, 1, 2, 7, 7, 1, 1,
1253 8, 8, 1, 1, 4, 2, 1, 4, 2, 1, 3, 3, 1, 1, 1, 9,
1254 9, 1, 2, 1, 2, 1, 5, 5, 1, 1, 10, 10, 1, 1, 3, 3,
1255 2, 2, 1, 1, 11, 11, 6, 4, 4, 1, 6, 1, 2, 1, 2, 12,
1256 8, 1, 12, 7, 8, 7, 1, 16, 1, 16, 1, 3, 3, 13, 1, 13,
1257 2, 2, 1, 15, 1, 5, 14, 15, 1, 5, 14, 1, 17, 8, 17, 8,
1258 1, 4, 4, 2, 2, 1, 25, 25, 24, 24, 1, 3, 1, 3, 1, 8,
1259 6, 7, 6, 1, 18, 8, 18, 1, 7, 23, 2, 2, 23, 1, 1, 21,
1260 22, 9, 9, 22, 19, 1, 21, 5, 19, 5, 1, 33, 20, 33, 20, 8,
1261 4, 4, 1, 32, 2, 2, 8, 3, 32, 26, 3, 1, 7, 7, 26, 6,
1262 1, 6, 1, 1, 16, 1, 10, 1, 10, 2, 16, 29, 28, 2, 29, 28,
1263 1, 27, 5, 8, 5, 27, 1, 8, 3, 7, 3, 31, 41, 31, 1, 41,
1264 6, 1, 6, 7, 4, 4, 1, 1, 2, 1, 2, 11, 34, 30, 11, 1,
1265 30, 15, 15, 34, 36, 40, 36, 40, 35, 35, 37, 37, 39, 39, 38, 38},
1266
1267 /* value table */
1268 { 1, -1, 0, 2, -2, 0, 3, -3, 1, -1, 4, -4, 5, -5, 1, -1,
1269 6, -6, 2, -2, 7, -7, 1, -1, 8, -8, 9, -9, 3, -3, 1, -1,
1270 10, -10, 2, -2, 11, -11, 1, -1, 12, 4, -12, -4, 1, -1, 13, -13,
1271 1, -1, 14, -14, 2, 5, 15, -2, -5, -15, -3, 3, 16, -16, 17, 1,
1272 -1, -17, 6, 18, -6, -18, 2, -2, 19, -19, 1, -1, 20, -20, 4, -4,
1273 7, -7, 21, -21, 1, -1, 2, 3, -3, 22, -2, -22, 8, 23, -8, 1,
1274 2, -23, -1, 2, -2, -2, 24, 1, -24, -1, 25, 5, -5, 1, -25, -1,
1275 9, -9, 26, 1, -26, 3, 1, -1, 27, -3, -1, -27, 1, 3, -1, -3,
1276 28, -4, 4, 10, -10, -28, 1, -1, 1, -1, 29, 6, -29, -6, 30, -4,
1277 3, 3, -3, -30, 1, 4, -1, 31, -3, 1, 11, -11, -1, -31, 32, -1,
1278 -1, 2, -2, 1, 1, -32, 1, 4, -1, -4, 33, -1, 1, 1, -1, 5,
1279 5, -5, -33, -1, -12, 12, -5, -7, 1, 1, 7, 34, 4, -4, -1, 4,
1280 -34, -4, 35, 36, -2, -35, -2, -36, 2, 13, 2, -1, 1, -13, 1, -1,
1281 37, 1, -5, 6, 5, -1, 38, -6, -8, 5, 8, -1, 1, 1, -37, -1,
1282 5, 39, -5, -5, 6, -6, -38, -39, -14, 40, 14, 2, 1, 1, -2, -40,
1283 -1, -2, 2, -1, -1, -1, 1, 1, 1, -1, 1, -1, 1, -1, 1, -1}
1284 },{
1285 /* MapTab1 */
1286 0, /* eob_sym */
1287 38, /* esc_sym */
1288 /* run table */
1289 {0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 8, 6, 8, 7,
1290 7, 9, 9, 10, 10, 11, 11, 1, 12, 1, 12, 13, 13, 16, 14, 16,
1291 14, 15, 15, 17, 17, 18, 0, 18, 19, 20, 21, 19, 22, 21, 20, 22,
1292 25, 24, 2, 25, 24, 23, 23, 2, 26, 28, 26, 28, 29, 27, 29, 27,
1293 33, 33, 1, 32, 1, 3, 32, 30, 36, 3, 36, 30, 31, 31, 35, 34,
1294 37, 41, 34, 35, 37, 4, 41, 4, 49, 8, 8, 49, 40, 38, 5, 38,
1295 40, 39, 5, 39, 42, 43, 42, 7, 57, 6, 43, 44, 6, 50, 7, 44,
1296 57, 48, 50, 48, 45, 45, 46, 47, 51, 46, 47, 58, 1, 51, 58, 1,
1297 52, 59, 53, 9, 52, 55, 55, 59, 53, 56, 54, 56, 54, 9, 64, 64,
1298 60, 63, 60, 63, 61, 62, 61, 62, 2, 10, 2, 10, 11, 1, 11, 13,
1299 12, 1, 12, 13, 16, 16, 8, 8, 14, 3, 3, 15, 14, 15, 4, 4,
1300 1, 17, 17, 5, 1, 7, 7, 5, 6, 1, 2, 2, 6, 22, 1, 25,
1301 21, 22, 8, 24, 1, 21, 25, 24, 8, 18, 18, 23, 9, 20, 23, 33,
1302 29, 33, 20, 1, 19, 1, 29, 36, 9, 36, 19, 41, 28, 57, 32, 3,
1303 28, 3, 1, 27, 49, 49, 1, 32, 26, 26, 2, 4, 4, 7, 57, 41,
1304 2, 7, 10, 5, 37, 16, 10, 27, 8, 8, 13, 16, 37, 13, 1, 5},
1305
1306 /* value table */
1307 {0, 1, -1, 1, -1, 1, -1, 1, -1, 1, -1, 1, 1, -1, -1, 1,
1308 -1, 1, -1, 1, -1, 1, -1, 2, 1, -2, -1, 1, -1, 1, 1, -1,
1309 -1, 1, -1, 1, -1, 1, 0, -1, 1, 1, 1, -1, 1, -1, -1, -1,
1310 1, 1, 2, -1, -1, 1, -1, -2, 1, 1, -1, -1, 1, 1, -1, -1,
1311 1, -1, 3, 1, -3, 2, -1, 1, 1, -2, -1, -1, -1, 1, 1, 1,
1312 1, 1, -1, -1, -1, 2, -1, -2, 1, 2, -2, -1, 1, 1, 2, -1,
1313 -1, 1, -2, -1, 1, 1, -1, 2, 1, 2, -1, 1, -2, -1, -2, -1,
1314 -1, 1, 1, -1, 1, -1, 1, 1, 1, -1, -1, 1, 4, -1, -1, -4,
1315 1, 1, 1, 2, -1, -1, 1, -1, -1, 1, -1, -1, 1, -2, 1, -1,
1316 1, 1, -1, -1, 1, 1, -1, -1, 3, 2, -3, -2, 2, 5, -2, 2,
1317 2, -5, -2, -2, -2, 2, -3, 3, 2, 3, -3, 2, -2, -2, 3, -3,
1318 6, 2, -2, 3, -6, 3, -3, -3, 3, 7, -4, 4, -3, 2, -7, 2,
1319 2, -2, -4, 2, 8, -2, -2, -2, 4, 2, -2, 2, 3, 2, -2, -2,
1320 2, 2, -2, -8, -2, 9, -2, 2, -3, -2, 2, -2, 2, 2, 2, 4,
1321 -2, -4, 10, 2, 2, -2, -9, -2, 2, -2, 5, 4, -4, 4, -2, 2,
1322 -5, -4, -3, 4, 2, -3, 3, -2, -5, 5, 3, 3, -2, -3, -10, -4}
1323 },{
1324 /* MapTab2 */
1325 2, /* eob_sym */
1326 11, /* esc_sym */
1327 /* run table */
1328 {1, 1, 0, 2, 2, 1, 1, 3, 3, 4, 4, 0, 1, 1, 5, 5,
1329 2, 2, 6, 6, 7, 7, 1, 8, 1, 8, 3, 3, 9, 9, 1, 2,
1330 2, 1, 4, 10, 4, 10, 11, 11, 1, 5, 12, 12, 1, 5, 13, 13,
1331 3, 3, 6, 6, 2, 2, 14, 14, 16, 16, 15, 7, 15, 8, 8, 7,
1332 1, 1, 17, 17, 4, 4, 1, 1, 18, 18, 2, 2, 5, 5, 25, 3,
1333 9, 3, 25, 9, 19, 24, 19, 24, 1, 21, 20, 1, 21, 22, 20, 22,
1334 23, 23, 8, 6, 33, 6, 8, 33, 7, 7, 26, 26, 1, 32, 1, 32,
1335 28, 4, 28, 10, 29, 27, 27, 10, 41, 4, 29, 2, 2, 41, 36, 31,
1336 49, 31, 34, 30, 34, 36, 30, 35, 1, 49, 11, 5, 35, 11, 1, 3,
1337 3, 5, 37, 37, 8, 40, 8, 40, 12, 12, 42, 42, 1, 38, 16, 57,
1338 1, 6, 16, 39, 38, 6, 7, 7, 13, 13, 39, 43, 2, 43, 57, 2,
1339 50, 9, 44, 9, 50, 4, 15, 48, 44, 4, 1, 15, 48, 14, 14, 1,
1340 45, 45, 8, 3, 5, 8, 51, 47, 3, 46, 46, 47, 5, 51, 1, 17,
1341 17, 58, 1, 58, 2, 52, 52, 2, 53, 7, 59, 6, 6, 56, 53, 55,
1342 7, 55, 1, 54, 59, 56, 54, 10, 1, 10, 4, 60, 1, 60, 8, 4,
1343 8, 64, 64, 61, 1, 63, 3, 63, 62, 61, 5, 11, 5, 3, 11, 62},
1344
1345 /* value table */
1346 { 1, -1, 0, 1, -1, 2, -2, 1, -1, 1, -1, 0, 3, -3, 1, -1,
1347 2, -2, 1, -1, 1, -1, 4, 1, -4, -1, 2, -2, 1, -1, 5, 3,
1348 -3, -5, 2, 1, -2, -1, 1, -1, 6, 2, 1, -1, -6, -2, 1, -1,
1349 3, -3, 2, -2, 4, -4, 1, -1, 1, -1, 1, 2, -1, 2, -2, -2,
1350 7, -7, 1, -1, 3, -3, 8, -8, 1, -1, 5, -5, 3, -3, 1, 4,
1351 2, -4, -1, -2, 1, 1, -1, -1, 9, 1, 1, -9, -1, 1, -1, -1,
1352 1, -1, 3, -3, 1, 3, -3, -1, 3, -3, 1, -1, 10, 1, -10, -1,
1353 1, 4, -1, 2, 1, -1, 1, -2, 1, -4, -1, 6, -6, -1, 1, 1,
1354 1, -1, 1, 1, -1, -1, -1, 1, 11, -1, -2, 4, -1, 2, -11, 5,
1355 -5, -4, -1, 1, 4, 1, -4, -1, -2, 2, 1, -1, 12, 1, -2, 1,
1356 -12, 4, 2, 1, -1, -4, 4, -4, 2, -2, -1, 1, 7, -1, -1, -7,
1357 -1, -3, 1, 3, 1, 5, 2, 1, -1, -5, 13, -2, -1, 2, -2, -13,
1358 1, -1, 5, 6, 5, -5, 1, 1, -6, 1, -1, -1, -5, -1, 14, 2,
1359 -2, 1, -14, -1, 8, 1, -1, -8, 1, 5, 1, 5, -5, 1, -1, 1,
1360 -5, -1, 15, 1, -1, -1, -1, 3, -15, -3, 6, 1, 16, -1, 6, -6,
1361 -6, 1, -1, 1, -16, 1, 7, -1, 1, -1, -6, -3, 6, -7, 3, -1}
1362 },{
1363 /* MapTab3 */
1364 0, /* eob_sym */
1365 35, /* esc_sym */
1366 /* run table */
1367 {0, 1, 1, 2, 2, 3, 3, 4, 4, 1, 1, 5, 5, 6, 6, 7,
1368 7, 8, 8, 9, 9, 2, 2, 10, 10, 1, 1, 11, 11, 12, 12, 3,
1369 3, 13, 13, 0, 14, 14, 16, 15, 16, 15, 4, 4, 17, 1, 17, 1,
1370 5, 5, 18, 18, 2, 2, 6, 6, 8, 19, 7, 8, 7, 19, 20, 20,
1371 21, 21, 22, 24, 22, 24, 23, 23, 1, 1, 25, 25, 3, 3, 26, 26,
1372 9, 9, 27, 27, 28, 28, 33, 29, 4, 33, 29, 1, 4, 1, 32, 32,
1373 2, 2, 31, 10, 30, 10, 30, 31, 34, 34, 5, 5, 36, 36, 35, 41,
1374 35, 11, 41, 11, 37, 1, 8, 8, 37, 6, 1, 6, 40, 7, 7, 40,
1375 12, 38, 12, 39, 39, 38, 49, 13, 49, 13, 3, 42, 3, 42, 16, 16,
1376 43, 43, 14, 14, 1, 1, 44, 15, 44, 15, 2, 2, 57, 48, 50, 48,
1377 57, 50, 4, 45, 45, 4, 46, 47, 47, 46, 1, 51, 1, 17, 17, 51,
1378 8, 9, 9, 5, 58, 8, 58, 5, 52, 52, 55, 56, 53, 56, 55, 59,
1379 59, 53, 54, 1, 6, 54, 7, 7, 6, 1, 2, 3, 2, 3, 64, 60,
1380 60, 10, 10, 64, 61, 62, 61, 63, 1, 63, 62, 1, 18, 24, 18, 4,
1381 25, 4, 8, 21, 21, 1, 24, 22, 25, 22, 8, 11, 19, 11, 23, 1,
1382 20, 23, 19, 20, 5, 12, 5, 1, 16, 2, 12, 13, 2, 13, 1, 16},
1383
1384 /* value table */
1385 { 0, 1, -1, 1, -1, 1, -1, 1, -1, 2, -2, 1, -1, 1, -1, 1,
1386 -1, 1, -1, 1, -1, 2, -2, 1, -1, 3, -3, 1, -1, 1, -1, 2,
1387 -2, 1, -1, 0, 1, -1, 1, 1, -1, -1, 2, -2, 1, 4, -1, -4,
1388 2, -2, 1, -1, -3, 3, 2, -2, 2, 1, 2, -2, -2, -1, 1, -1,
1389 1, -1, 1, 1, -1, -1, 1, -1, 5, -5, 1, -1, 3, -3, 1, -1,
1390 2, -2, 1, -1, 1, -1, 1, 1, 3, -1, -1, 6, -3, -6, -1, 1,
1391 4, -4, 1, 2, 1, -2, -1, -1, 1, -1, 3, -3, 1, -1, 1, 1,
1392 -1, 2, -1, -2, 1, 7, -3, 3, -1, 3, -7, -3, 1, -3, 3, -1,
1393 2, 1, -2, 1, -1, -1, 1, 2, -1, -2, -4, -1, 4, 1, 2, -2,
1394 1, -1, -2, 2, 8, -8, -1, 2, 1, -2, -5, 5, 1, -1, -1, 1,
1395 -1, 1, 4, -1, 1, -4, -1, -1, 1, 1, 9, 1, -9, 2, -2, -1,
1396 -4, 3, -3, -4, -1, 4, 1, 4, 1, -1, 1, -1, 1, 1, -1, 1,
1397 -1, -1, -1, 10, 4, 1, 4, -4, -4, -10, 6, 5, -6, -5, 1, -1,
1398 1, 3, -3, -1, 1, -1, -1, -1, 11, 1, 1, -11, -2, -2, 2, 5,
1399 -2, -5, -5, 2, -2, 12, 2, -2, 2, 2, 5, -3, -2, 3, -2, -12,
1400 -2, 2, 2, 2, -5, 3, 5, 13, -3, 7, -3, -3, -7, 3, -13, 3}
1401 },{
1402 /* MapTab4 */
1403 0, /* eob_sym */
1404 34, /* esc_sym */
1405 /* run table */
1406 {0, 1, 1, 1, 2, 2, 1, 3, 3, 1, 1, 1, 4, 4, 1, 5,
1407 2, 1, 5, 2, 1, 1, 6, 6, 1, 1, 1, 1, 1, 7, 3, 1,
1408 2, 3, 0, 1, 2, 7, 1, 1, 1, 8, 1, 1, 8, 1, 1, 1,
1409 9, 1, 9, 1, 2, 1, 1, 2, 1, 1, 10, 4, 1, 10, 1, 4,
1410 1, 1, 1, 1, 1, 3, 1, 1, 1, 3, 2, 1, 5, 1, 1, 1,
1411 2, 5, 1, 11, 1, 11, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1412 2, 1, 6, 1, 6, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 12,
1413 3, 1, 12, 1, 1, 1, 2, 1, 1, 3, 1, 1, 1, 1, 1, 1,
1414 4, 1, 1, 1, 2, 1, 1, 4, 1, 1, 1, 1, 1, 1, 2, 1,
1415 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 1, 2, 1, 1, 5,
1416 1, 1, 1, 1, 1, 7, 1, 7, 1, 1, 2, 3, 1, 1, 1, 1,
1417 5, 1, 1, 1, 1, 1, 1, 2, 13, 1, 1, 1, 1, 1, 1, 1,
1418 1, 1, 1, 1, 1, 1, 1, 1, 13, 2, 1, 1, 4, 1, 1, 1,
1419 3, 1, 6, 1, 1, 1, 14, 1, 1, 1, 1, 1, 14, 6, 1, 1,
1420 1, 1, 15, 2, 4, 1, 2, 3, 15, 1, 1, 1, 8, 1, 1, 8,
1421 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1},
1422
1423 /* value table */
1424 { 0, 1, -1, 2, 1, -1, -2, 1, -1, 3, -3, 4, 1, -1, -4, 1,
1425 2, 5, -1, -2, -5, 6, 1, -1, -6, 7, -7, 8, -8, 1, 2, 9,
1426 3, -2, 0, -9, -3, -1, 10, -10, 11, 1, -11, 12, -1, -12, 13, -13,
1427 1, 14, -1, -14, 4, 15, -15, -4, 16, -16, 1, 2, 17, -1, -17, -2,
1428 18, -18, 19, -19, 20, 3, -20, 21, -21, -3, 5, 22, 2, -22, -23, 23,
1429 -5, -2, 24, 1, -24, -1, 25, -25, 26, -26, -27, 27, 28, 29, -28, -29,
1430 6, 30, 2, -31, -2, -30, 31, -6, -32, 32, 33, -33, 34, -35, -34, 1,
1431 4, -36, -1, 35, 37, 36, 7, -37, 38, -4, -38, 39, 41, 40, -40, -39,
1432 3, 42, -43, -41, -7, -42, 43, -3, 44, -44, 45, -45, 46, 47, 8, -47,
1433 -48, -46, 50, -50, 48, 49, 51, -49, 52, -52, 5, -51, -8, -53, 53, 3,
1434 -56, 56, 55, 54, -54, 2, 60, -2, -55, 58, 9, -5, 59, 57, -57, -63,
1435 -3, -58, -60, -61, 61, -59, -62, -9, 1, 64, 62, 69, -64, 63, 65, -67,
1436 -68, 66, -65, 68, -66, -69, 67, -70, -1, 10, 71, -71, 4, 73, 72, 70,
1437 6, -76, -3, 74, -78, -74, 1, 78, 80, -72, -75, 76, -1, 3, -73, 79,
1438 75, 77, 1, 11, -4, -79, -10, -6, -1, -77, -83, -80, 2, 81, -84, -2,
1439 83, -81, 82, -82, 84, -87, -86, 85, -11, -85, 86, -89, 87, -88, 88, 89}
1440 },{
1441 /* MapTab5 */
1442 2, /* eob_sym */
1443 33, /* esc_sym */
1444 /* run table */
1445 {1, 1, 0, 2, 1, 2, 1, 3, 3, 1, 1, 4, 4, 2, 2, 1,
1446 1, 5, 5, 6, 1, 6, 1, 7, 7, 3, 3, 2, 8, 2, 8, 1,
1447 1, 0, 9, 9, 1, 1, 10, 4, 10, 4, 11, 11, 2, 1, 2, 1,
1448 12, 12, 3, 3, 1, 1, 13, 5, 5, 13, 14, 1, 1, 14, 2, 2,
1449 6, 6, 15, 1, 1, 15, 16, 4, 7, 16, 4, 7, 1, 1, 3, 3,
1450 8, 8, 2, 2, 1, 1, 17, 17, 1, 1, 18, 18, 5, 5, 2, 2,
1451 1, 1, 9, 19, 9, 19, 20, 3, 3, 20, 1, 10, 21, 1, 10, 4,
1452 4, 21, 22, 6, 6, 22, 1, 1, 23, 24, 2, 2, 23, 24, 11, 1,
1453 1, 11, 7, 25, 7, 1, 1, 25, 8, 8, 3, 26, 3, 1, 12, 2,
1454 2, 26, 1, 12, 5, 5, 27, 4, 1, 4, 1, 27, 28, 1, 28, 13,
1455 1, 13, 2, 29, 2, 1, 32, 6, 1, 30, 14, 29, 14, 6, 3, 31,
1456 3, 1, 30, 1, 32, 31, 33, 9, 33, 1, 1, 7, 9, 7, 2, 2,
1457 1, 1, 4, 36, 34, 4, 5, 10, 10, 5, 34, 1, 1, 35, 8, 8,
1458 36, 3, 35, 1, 15, 3, 2, 1, 16, 15, 16, 2, 37, 1, 37, 1,
1459 1, 1, 6, 6, 38, 1, 38, 11, 1, 39, 39, 40, 11, 2, 41, 4,
1460 40, 1, 2, 4, 1, 1, 1, 41, 3, 1, 3, 1, 5, 7, 5, 7},
1461
1462 /* value table */
1463 { 1, -1, 0, 1, 2, -1, -2, 1, -1, 3, -3, 1, -1, 2, -2, 4,
1464 -4, 1, -1, 1, 5, -1, -5, 1, -1, 2, -2, 3, 1, -3, -1, 6,
1465 -6, 0, 1, -1, 7, -7, 1, 2, -1, -2, 1, -1, 4, 8, -4, -8,
1466 1, -1, 3, -3, 9, -9, 1, 2, -2, -1, 1, 10, -10, -1, 5, -5,
1467 2, -2, 1, 11, -11, -1, 1, 3, 2, -1, -3, -2, 12, -12, 4, -4,
1468 2, -2, -6, 6, 13, -13, 1, -1, 14, -14, 1, -1, 3, -3, 7, -7,
1469 15, -15, 2, 1, -2, -1, 1, 5, -5, -1, -16, 2, 1, 16, -2, 4,
1470 -4, -1, 1, 3, -3, -1, 17, -17, 1, 1, -8, 8, -1, -1, 2, 18,
1471 -18, -2, 3, 1, -3, 19, -19, -1, 3, -3, 6, 1, -6, 20, 2, 9,
1472 -9, -1, -20, -2, 4, -4, 1, -5, 21, 5, -21, -1, 1, -22, -1, 2,
1473 22, -2, 10, 1, -10, 23, 1, 4, -23, 1, 2, -1, -2, -4, -7, 1,
1474 7, -24, -1, 24, -1, -1, 1, 3, -1, -25, 25, 4, -3, -4, 11, -11,
1475 26, -26, 6, 1, 1, -6, -5, -3, 3, 5, -1, -27, 27, 1, 4, -4,
1476 -1, -8, -1, 28, 2, 8, -12, -28, -2, -2, 2, 12, -1, 29, 1, -29,
1477 30, -30, 5, -5, 1, -31, -1, 3, 31, -1, 1, 1, -3, -13, 1, -7,
1478 -1, -32, 13, 7, 32, 33, -33, -1, -9, -34, 9, 34, -6, 5, 6, -5}
1479 },{
1480 /* MapTab6 */
1481 2, /* eob_sym */
1482 13, /* esc_sym */
1483 /* run table */
1484 {1, 1, 0, 1, 1, 2, 2, 1, 1, 3, 3, 1, 1, 0, 2, 2,
1485 4, 1, 4, 1, 1, 1, 5, 5, 1, 1, 6, 6, 2, 2, 1, 1,
1486 3, 3, 7, 7, 1, 1, 8, 8, 1, 1, 2, 2, 1, 9, 1, 9,
1487 4, 4, 10, 1, 1, 10, 1, 1, 11, 11, 3, 3, 1, 2, 1, 2,
1488 1, 1, 12, 12, 5, 5, 1, 1, 13, 1, 1, 13, 2, 2, 1, 1,
1489 6, 6, 1, 1, 4, 14, 4, 14, 3, 1, 3, 1, 1, 1, 15, 7,
1490 15, 2, 2, 7, 1, 1, 1, 8, 1, 8, 16, 16, 1, 1, 1, 1,
1491 2, 1, 1, 2, 1, 1, 3, 5, 5, 3, 4, 1, 1, 4, 1, 1,
1492 17, 17, 9, 1, 1, 9, 2, 2, 1, 1, 10, 10, 1, 6, 1, 1,
1493 6, 18, 1, 1, 18, 1, 1, 1, 2, 2, 3, 1, 3, 1, 1, 1,
1494 4, 1, 19, 1, 19, 7, 1, 1, 20, 1, 4, 20, 1, 7, 11, 2,
1495 1, 11, 21, 2, 8, 5, 1, 8, 1, 5, 21, 1, 1, 1, 22, 1,
1496 1, 22, 1, 1, 3, 3, 1, 23, 2, 12, 24, 1, 1, 2, 1, 1,
1497 12, 23, 1, 1, 24, 1, 1, 1, 4, 1, 1, 1, 2, 1, 6, 6,
1498 4, 2, 1, 1, 1, 1, 1, 1, 1, 14, 13, 3, 1, 25, 9, 25,
1499 14, 1, 9, 3, 13, 1, 1, 1, 1, 1, 10, 1, 1, 2, 10, 2},
1500
1501 /* value table */
1502 {-20, -1, 0, 2, -2, 1, -1, 3, -3, 1, -1, 4, -4, 0, 2, -2,
1503 1, 5, -1, -5, 6, -6, 1, -1, 7, -7, 1, -1, 3, -3, 8, -8,
1504 2, -2, 1, -1, 9, -9, 1, -1, 10, -10, 4, -4, 11, 1, -11, -1,
1505 2, -2, 1, 12, -12, -1, 13, -13, 1, -1, 3, -3, 14, 5, -14, -5,
1506 -15, 15, -1, 1, 2, -2, 16, -16, 1, 17, -17, -1, 6, -6, 18, -18,
1507 2, -2, -19, 19, -3, 1, 3, -1, 4, 20, -4, 1, -21, 21, 1, 2,
1508 -1, -7, 7, -2, 22, -22, 23, 2, -23, -2, 1, -1, -24, 24, -25, 25,
1509 -8, -26, 26, 8, -27, 27, 5, 3, -3, -5, -4, 28, -28, 4, 29, -29,
1510 1, -1, -2, -30, 30, 2, 9, -9, -31, 31, 2, -2, -32, 3, 32, -33,
1511 -3, 1, 33, -34, -1, 34, -35, 35, -10, 10, -6, 36, 6, -36, 37, -37,
1512 -5, 38, 1, -38, -1, 3, 39, -39, -1, 40, 5, 1, -40, -3, 2, -11,
1513 -41, -2, 1, 11, -3, -4, 41, 3, 42, 4, -1, -43, -42, 43, 1, -44,
1514 45, -1, 44, -45, -7, 7, -46, 1, -12, 2, 1, -47, 46, 12, 47, 48,
1515 -2, -1, -48, 49, -1, -50, -49, 50, -6, -51, 51, 52, -13, 53, -4, 4,
1516 6, 13, -53, -52, -54, 55, 54, -55, -56, -2, 2, -8, 56, 1, -3, -1,
1517 2, 58, 3, 8, -2, 57, -58, -60, -59, -57, -3, 60, 59, -14, 3, 14}
1518 },{
1519 /* MapTab7 */
1520 2, /* eob_sym */
1521 38, /* esc_sym */
1522 /* run table */
1523 {1, 1, 0, 2, 2, 1, 1, 3, 3, 4, 4, 5, 5, 1, 1, 6,
1524 6, 2, 2, 7, 7, 8, 8, 1, 1, 3, 3, 9, 9, 10, 10, 1,
1525 1, 2, 2, 4, 4, 11, 0, 11, 12, 12, 13, 13, 1, 1, 5, 5,
1526 14, 14, 15, 16, 15, 16, 3, 3, 1, 6, 1, 6, 2, 2, 7, 7,
1527 8, 8, 17, 17, 1, 1, 4, 4, 18, 18, 2, 2, 1, 19, 1, 20,
1528 19, 20, 21, 21, 3, 3, 22, 22, 5, 5, 24, 1, 1, 23, 9, 23,
1529 24, 9, 2, 2, 10, 1, 1, 10, 6, 6, 25, 4, 4, 25, 7, 7,
1530 26, 8, 1, 8, 3, 1, 26, 3, 11, 11, 27, 27, 2, 28, 1, 2,
1531 28, 1, 12, 12, 5, 5, 29, 13, 13, 29, 32, 1, 1, 33, 31, 30,
1532 32, 4, 30, 33, 4, 31, 3, 14, 1, 1, 3, 34, 34, 2, 2, 14,
1533 6, 6, 35, 36, 35, 36, 1, 15, 1, 16, 16, 15, 7, 9, 7, 9,
1534 37, 8, 8, 37, 1, 1, 39, 2, 38, 39, 2, 40, 5, 38, 40, 5,
1535 3, 3, 4, 4, 10, 10, 1, 1, 1, 1, 41, 2, 41, 2, 6, 6,
1536 1, 1, 11, 42, 11, 43, 3, 42, 3, 17, 4, 43, 1, 17, 7, 1,
1537 8, 44, 4, 7, 44, 5, 8, 2, 5, 1, 2, 48, 45, 1, 12, 45,
1538 12, 48, 13, 13, 1, 9, 9, 46, 1, 46, 47, 47, 49, 18, 18, 49},
1539
1540 /* value table */
1541 { 1, -1, 0, 1, -1, 2, -2, 1, -1, 1, -1, 1, -1, 3, -3, 1,
1542 -1, -2, 2, 1, -1, 1, -1, 4, -4, -2, 2, 1, -1, 1, -1, 5,
1543 -5, -3, 3, 2, -2, 1, 0, -1, 1, -1, 1, -1, 6, -6, 2, -2,
1544 1, -1, 1, 1, -1, -1, -3, 3, 7, 2, -7, -2, -4, 4, 2, -2,
1545 2, -2, 1, -1, 8, -8, 3, -3, 1, -1, -5, 5, 9, 1, -9, 1,
1546 -1, -1, 1, -1, -4, 4, 1, -1, 3, -3, 1, -10, 10, 1, 2, -1,
1547 -1, -2, 6, -6, 2, 11, -11, -2, 3, -3, 1, -4, 4, -1, 3, -3,
1548 1, 3, 12, -3, -5, -12, -1, 5, 2, -2, 1, -1, -7, 1, 13, 7,
1549 -1, -13, 2, -2, 4, -4, 1, 2, -2, -1, 1, 14, -14, 1, 1, 1,
1550 -1, -5, -1, -1, 5, -1, -6, 2, -15, 15, 6, 1, -1, -8, 8, -2,
1551 -4, 4, 1, 1, -1, -1, 16, 2, -16, -2, 2, -2, 4, 3, -4, -3,
1552 -1, -4, 4, 1, -17, 17, -1, -9, 1, 1, 9, 1, -5, -1, -1, 5,
1553 -7, 7, 6, -6, 3, -3, 18, -18, 19, -19, 1, -10, -1, 10, -5, 5,
1554 20, -20, -3, 1, 3, 1, 8, -1, -8, 2, 7, -1, -21, -2, 5, 21,
1555 5, -1, -7, -5, 1, -6, -5, -11, 6, 22, 11, 1, 1, -22, -3, -1,
1556 3, -1, 3, -3, -23, 4, -4, 1, 23, -1, 1, -1, 1, -2, 2, -1}
1557 },{
1558 /* MapTab8 */
1559 4, /* eob_sym */
1560 11, /* esc_sym */
1561 /* run table */
1562 {1, 1, 1, 1, 0, 2, 2, 1, 1, 3, 3, 0, 1, 1, 2, 2,
1563 4, 4, 1, 1, 5, 5, 1, 1, 2, 2, 3, 3, 6, 6, 1, 1,
1564 7, 7, 8, 1, 8, 2, 2, 1, 4, 4, 1, 3, 1, 3, 9, 9,
1565 2, 2, 1, 5, 1, 5, 10, 10, 1, 1, 11, 11, 3, 6, 3, 4,
1566 4, 6, 2, 2, 1, 12, 1, 12, 7, 13, 7, 13, 1, 1, 8, 8,
1567 2, 2, 14, 14, 16, 15, 16, 5, 5, 1, 3, 15, 1, 3, 4, 4,
1568 1, 1, 17, 17, 2, 2, 6, 6, 1, 18, 1, 18, 22, 21, 22, 21,
1569 25, 24, 25, 19, 9, 20, 9, 23, 19, 24, 20, 3, 23, 7, 3, 1,
1570 1, 7, 28, 26, 29, 5, 28, 26, 5, 8, 29, 4, 8, 27, 2, 2,
1571 4, 27, 1, 1, 10, 36, 10, 33, 33, 36, 30, 1, 32, 32, 1, 30,
1572 6, 31, 31, 35, 3, 6, 11, 11, 3, 2, 35, 2, 34, 1, 34, 1,
1573 37, 37, 12, 7, 12, 5, 41, 5, 4, 7, 1, 8, 13, 4, 1, 41,
1574 13, 38, 8, 38, 9, 1, 40, 40, 9, 1, 39, 2, 2, 49, 39, 42,
1575 3, 3, 14, 16, 49, 14, 16, 42, 43, 43, 6, 6, 15, 1, 1, 15,
1576 44, 44, 1, 1, 50, 48, 4, 5, 4, 7, 5, 2, 10, 10, 48, 7,
1577 50, 45, 2, 1, 45, 8, 8, 1, 46, 46, 3, 47, 47, 3, 1, 1},
1578
1579 /* value table */
1580 { 1, -1, 2, -2, 0, 1, -1, 3, -3, 1, -1, 0, 4, -4, 2, -2,
1581 1, -1, 5, -5, 1, -1, 6, -6, 3, -3, 2, -2, 1, -1, 7, -7,
1582 1, -1, 1, 8, -1, 4, -4, -8, 2, -2, 9, 3, -9, -3, 1, -1,
1583 5, -5, 10, 2, -10, -2, 1, -1, 11, -11, 1, -1, -4, 2, 4, 3,
1584 -3, -2, 6, -6, 12, 1, -12, -1, 2, 1, -2, -1, 13, -13, 2, -2,
1585 7, -7, 1, -1, 1, 1, -1, 3, -3, 14, 5, -1, -14, -5, 4, -4,
1586 15, -15, 1, -1, 8, -8, -3, 3, 16, 1, -16, -1, 1, 1, -1, -1,
1587 1, 1, -1, 1, 2, 1, -2, 1, -1, -1, -1, 6, -1, 3, -6, 17,
1588 -17, -3, 1, 1, 1, 4, -1, -1, -4, 3, -1, 5, -3, -1, -9, 9,
1589 -5, 1, 18, -18, 2, 1, -2, 1, -1, -1, 1, 19, -1, 1, -19, -1,
1590 4, 1, -1, 1, 7, -4, -2, 2, -7, 10, -1, -10, 1, 20, -1, -20,
1591 1, -1, 2, 4, -2, 5, 1, -5, 6, -4, 21, 4, 2, -6, -21, -1,
1592 -2, 1, -4, -1, -3, 22, -1, 1, 3, -22, -1, 11, -11, 1, 1, 1,
1593 8, -8, 2, 2, -1, -2, -2, -1, 1, -1, -5, 5, 2, 23, -23, -2,
1594 1, -1, 24, -24, -1, -1, 7, 6, -7, 5, -6, 12, -3, 3, 1, -5,
1595 1, 1, -12, 25, -1, -5, 5, -25, -1, 1, 9, 1, -1, -9, 26, -26}
1596 }
1597 };