34 #define BITSTREAM_READER_LE 
   50     {8,  {0, 4, 5, 4, 4, 4, 6, 6}},
 
   51     {12, {0, 2, 2, 3, 3, 3, 3, 5, 3, 2, 2, 2}},
 
   52     {12, {0, 2, 3, 4, 3, 3, 3, 3, 4, 3, 2, 2}},
 
   53     {12, {0, 3, 4, 4, 3, 3, 3, 3, 3, 2, 2, 2}},
 
   54     {13, {0, 4, 4, 3, 3, 3, 3, 2, 3, 3, 2, 1, 1}},
 
   55     {9,  {0, 4, 4, 4, 4, 3, 3, 3, 2}},
 
   56     {10, {0, 4, 4, 4, 4, 3, 3, 2, 2, 2}},
 
   57     {12, {0, 4, 4, 4, 3, 3, 2, 3, 2, 2, 2, 2}}
 
   62     {10, {1, 2, 3, 4, 4, 7, 5, 5, 4, 1}},
 
   63     {11, {2, 3, 4, 4, 4, 7, 5, 4, 3, 3, 2}},
 
   64     {12, {2, 4, 5, 5, 5, 5, 6, 4, 4, 3, 1, 1}},
 
   65     {13, {3, 3, 4, 4, 5, 6, 6, 4, 4, 3, 2, 1, 1}},
 
   66     {11, {3, 4, 4, 5, 5, 5, 6, 5, 4, 2, 2}},
 
   67     {13, {3, 4, 5, 5, 5, 5, 6, 4, 3, 3, 2, 1, 1}},
 
   68     {13, {3, 4, 5, 5, 5, 6, 5, 4, 3, 3, 2, 1, 1}},
 
   69     {9,  {3, 4, 4, 5, 5, 5, 6, 5, 5}}
 
   75 typedef void (*
ivi_mc_func) (int16_t *buf, 
const int16_t *ref_buf,
 
   76                              ptrdiff_t pitch, 
int mc_type);
 
   78                                  const int16_t *ref_buf2,
 
   79                                  ptrdiff_t pitch, 
int mc_type, 
int mc_type2);
 
   82                   int offs, 
int mv_x, 
int mv_y, 
int mv_x2, 
int mv_y2,
 
   83                   int mc_type, 
int mc_type2)
 
   85     int ref_offs = offs + mv_y * band->
pitch + mv_x;
 
   88     int ref_size = (mc_type > 1) * band->
pitch + (mc_type & 1);
 
   93         av_assert0(buf_size - min_size - ref_size >= ref_offs);
 
   99         int ref_offs2 = offs + mv_y2 * band->
pitch + mv_x2;
 
  100         int ref_size2 = (mc_type2 > 1) * band->
pitch + (mc_type2 & 1);
 
  101         if (offs < 0 || ref_offs2 < 0 || !band->b_ref_buf)
 
  103         if (buf_size - min_size - ref_size2 < ref_offs2)
 
  108                band->
pitch, mc_type2);
 
  110             mc_avg(band->
buf + offs, band->
ref_buf + ref_offs,
 
  146     int         pos, 
i, j, codes_per_row, prefix, not_last_row;
 
  147     uint16_t    codewords[256]; 
 
  152     for (
i = 0; 
i < 
cb->num_rows; 
i++) {
 
  153         codes_per_row = 1 << 
cb->xbits[
i];
 
  154         not_last_row  = (
i != 
cb->num_rows - 1);
 
  155         prefix        = ((1 << 
i) - 1) << (
cb->xbits[
i] + not_last_row);
 
  157         for (j = 0; j < codes_per_row; j++) {
 
  182     static int initialized_vlcs = 0;
 
  184     if (initialized_vlcs)
 
  186     for (
i = 0; 
i < 8; 
i++) {
 
  196     initialized_vlcs = 1;
 
  262                        "Error while initializing custom vlc table!\n");
 
  285     for (p = 0; p < 3; p++) {
 
  287         for (
b = 0; 
b < 
planes[p].num_bands; 
b++) {
 
  295             for (t = 0; t < 
planes[p].bands[
b].num_tiles; t++)
 
  308     uint32_t b_width, b_height, align_fac, width_aligned,
 
  309              height_aligned, buf_size;
 
  328     for (p = 0; p < 3; p++) {
 
  337                                             : (
planes[p].width  + 1) >> 1;
 
  339                                             : (
planes[p].height + 1) >> 1;
 
  343         align_fac       = p ? 8 : 16;
 
  344         width_aligned   = 
FFALIGN(b_width , align_fac);
 
  345         height_aligned  = 
FFALIGN(b_height, align_fac);
 
  346         buf_size        = width_aligned * height_aligned * 
sizeof(int16_t);
 
  348         for (
b = 0; 
b < 
planes[p].num_bands; 
b++) {
 
  352             band->
width    = b_width;
 
  354             band->
pitch    = width_aligned;
 
  355             band->
aheight  = height_aligned;
 
  362             planes[p].bands[0].blk_vlc.cust_desc.num_rows = 0;
 
  370                           int p, 
int b, 
int t_height, 
int t_width)
 
  375     for (y = 0; y < band->
height; y += t_height) {
 
  376         for (x = 0; x < band->
width; x += t_width) {
 
  409                               int tile_width, 
int tile_height)
 
  411     int p, 
b, x_tiles, y_tiles, t_width, t_height, 
ret;
 
  414     for (p = 0; p < 3; p++) {
 
  415         t_width  = !p ? tile_width  : (tile_width  + 3) >> 2;
 
  416         t_height = !p ? tile_height : (tile_height + 3) >> 2;
 
  418         if (!p && 
planes[0].num_bands == 4) {
 
  419             if (t_width % 2 || t_height % 2) {
 
  426         if(t_width<=0 || t_height<=0)
 
  429         for (
b = 0; 
b < 
planes[p].num_bands; 
b++) {
 
  453                                  p, 
b, t_height, t_width);
 
  493                        band->
pitch, blk_size);
 
  501                                    int mv_x2, 
int mv_y2,
 
  502                                    int *prev_dc, 
int is_intra,
 
  503                                    int mc_type, 
int mc_type2,
 
  504                                    uint32_t 
quant, 
int offs,
 
  511     uint32_t sym = 0, lo, hi, q;
 
  514     int num_coeffs = blk_size * blk_size;
 
  515     int col_mask   = blk_size - 1;
 
  521     if (min_size > buf_size)
 
  530     memset(trvec, 0, num_coeffs * 
sizeof(trvec[0]));
 
  532     memset(col_flags, 0, 
sizeof(col_flags));
 
  533     while (scan_pos <= num_coeffs) {
 
  557         if (scan_pos >= num_coeffs || scan_pos < 0)
 
  562             ff_dlog(avctx, 
"Val = 0 encountered!\n");
 
  569         col_flags[
pos & col_mask] |= !!
val;
 
  572     if (scan_pos < 0 || scan_pos >= num_coeffs && sym != rvmap->
eob_sym)
 
  577         *prev_dc     += trvec[0];
 
  579         col_flags[0] |= !!*prev_dc;
 
  589                         band->
pitch, col_flags);
 
  593         return ivi_mc(band, 
mc, mc_avg, offs, mv_x, mv_y, mv_x2, mv_y2,
 
  612     int mbn, 
blk, num_blocks, blk_size, 
ret, is_intra;
 
  613     int mc_type = 0, mc_type2 = -1;
 
  614     int mv_x = 0, mv_y = 0, mv_x2 = 0, mv_y2 = 0;
 
  616     uint32_t cbp, 
quant, buf_offs;
 
  626     num_blocks = (band->
mb_size != blk_size) ? 4 : 1;
 
  639     for (mbn = 0, 
mb = tile->
mbs; mbn < tile->num_MBs; 
mb++, mbn++) {
 
  640         is_intra = !
mb->type;
 
  642         buf_offs = 
mb->buf_offs;
 
  660                 mc_type  = ((mv_y  & 1) << 1) | (mv_x  & 1);
 
  661                 mc_type2 = ((mv_y2 & 1) << 1) | (mv_x2 & 1);
 
  669             if (
mb->type != 2 && 
mb->type != 3)
 
  672                 int dmv_x, dmv_y, cx, cy;
 
  679                 if (
mb->xpos + dmv_x < 0 ||
 
  681                     mb->ypos + dmv_y < 0 ||
 
  686             if (
mb->type == 2 || 
mb->type == 3) {
 
  687                 int dmv_x, dmv_y, cx, cy;
 
  694                 if (
mb->xpos + dmv_x < 0 ||
 
  696                     mb->ypos + dmv_y < 0 ||
 
  706                 buf_offs += blk_size;
 
  707             } 
else if (
blk == 2) {
 
  708                 buf_offs -= blk_size;
 
  709                 buf_offs += blk_size * band->
pitch;
 
  714                                               mc_avg_with_delta_func,
 
  715                                               mv_x, mv_y, mv_x2, mv_y2,
 
  717                                               mc_type, mc_type2, 
quant,
 
  723                 int min_size = (blk_size - 1) * band->
pitch + blk_size;
 
  725                 if (min_size > buf_size)
 
  735                     ret = 
ivi_mc(band, mc_no_delta_func, mc_avg_no_delta_func,
 
  736                                  buf_offs, mv_x, mv_y, mv_x2, mv_y2,
 
  764     int             x, y, need_mc, mbn, 
blk, num_blocks, mv_x, mv_y, mc_type;
 
  765     int             offs, mb_offset, row_offset, 
ret;
 
  774     int             pitch       = band->
pitch;
 
  778                "parameters %d in ivi_process_empty_tile()\n",
 
  783     offs       = tile->
ypos * pitch + tile->
xpos;
 
  786     row_offset = mb_size * pitch;
 
  789     for (y = tile->
ypos; y < (tile->
ypos + tile->
height); y += mb_size) {
 
  792         for (x = tile->
xpos; x < xend; x += mb_size) {
 
  795             mb->buf_offs = mb_offset;
 
  819                     need_mc |= 
mb->mv_x || 
mb->mv_y; 
 
  821                         int dmv_x, dmv_y, cx, cy;
 
  823                         dmv_x = 
mb->mv_x >> is_halfpel;
 
  824                         dmv_y = 
mb->mv_y >> is_halfpel;
 
  825                         cx    = 
mb->mv_x &  is_halfpel;
 
  826                         cy    = 
mb->mv_y &  is_halfpel;
 
  828                         if (   
mb->xpos + dmv_x < 0
 
  829                             || 
mb->xpos + dmv_x + mb_size + cx > pitch
 
  830                             || 
mb->ypos + dmv_y < 0
 
  831                             || 
mb->ypos + dmv_y + mb_size + cy > band->
aheight) {
 
  841             mb_offset += mb_size;
 
  847         num_blocks = (mb_size != band->
blk_size) ? 4 : 1; 
 
  851         for (mbn = 0, 
mb = tile->
mbs; mbn < tile->num_MBs; 
mb++, mbn++) {
 
  857                 mc_type = ((mv_y & 1) << 1) | (mv_x & 1);
 
  865                 ret = 
ivi_mc(band, mc_no_delta_func, 0, offs,
 
  866                              mv_x, mv_y, 0, 0, mc_type, -1);
 
  875         for (y = 0; y < tile->
height; y++) {
 
  876             memcpy(dst, 
src, tile->
width*
sizeof(band->
buf[0]));
 
  887 static uint16_t ivi_calc_band_checksum(
const IVIBandDesc *band)
 
  896         for (x = 0; x < band->
width; x++)
 
  921     for (y = 0; y < plane->
height; y++) {
 
  924         for (x = 0; x < 
w; x++) {
 
  925             int t = 
src[x] + 128;
 
  930             for (x = 0; x < 
w; x++)
 
  931                 dst[x] = av_clip_uint8(
src[x] + 128);
 
  939     if (
ctx->pic_conf.luma_bands <= 1 && 
i == 2)
 
  943     return band->
bufs[
i];
 
  994         idx1 = band->
corr[
i * 2];
 
  995         idx2 = band->
corr[
i * 2 + 1];
 
 1007         tile = &band->
tiles[t];
 
 1017                                       (
ctx->planes[0].bands[0].mb_size >> 3) - (band->
mb_size >> 3));
 
 1020             ff_dlog(avctx, 
"Empty tile encountered!\n");
 
 1036                        "Corrupted tile data encountered!\n");
 
 1042                        "Tile data_size mismatch!\n");
 
 1054         idx1 = band->
corr[
i*2];
 
 1055         idx2 = band->
corr[
i*2+1];
 
 1066         uint16_t chksum = ivi_calc_band_checksum(band);
 
 1069                    "Band checksum mismatch! Plane %d, band %d, " 
 1070                    "received: %"PRIx32
", calculated: %"PRIx16
"\n",
 
 1087     int             buf_size = avpkt->
size;
 
 1093     ctx->frame_data = buf;
 
 1094     ctx->frame_size = buf_size;
 
 1099                "Error while decoding picture header: %d\n", 
result);
 
 1102     if (
ctx->gop_invalid)
 
 1106         if (
ctx->got_p_frame) {
 
 1109             ctx->got_p_frame = 0;
 
 1121     if (!
ctx->planes[0].bands) {
 
 1126     ctx->switch_buffers(
ctx);
 
 1128     if (
ctx->is_nonnull_frame(
ctx)) {
 
 1129         ctx->buf_invalid[
ctx->dst_buf] = 1;
 
 1130         for (p = 0; p < 3; p++) {
 
 1131             for (
b = 0; 
b < 
ctx->planes[p].num_bands; 
b++) {
 
 1135                            "Error while decoding band: %d, plane: %d\n", 
b, p);
 
 1140         ctx->buf_invalid[
ctx->dst_buf] = 0;
 
 1142         if (
ctx->is_scalable)
 
 1145         for (p = 0; p < 3; p++) {
 
 1146             if (!
ctx->planes[p].bands[0].buf)
 
 1150     if (
ctx->buf_invalid[
ctx->dst_buf])
 
 1153     if (!
ctx->is_nonnull_frame(
ctx))
 
 1163     if (
ctx->is_scalable) {
 
 1197             ctx->got_p_frame = 0;
 
 1203     if (
ctx->show_indeo4_info) {
 
 1204         if (
ctx->is_scalable)
 
 1206         if (
ctx->uses_tiling)
 
 1208         if (
ctx->has_b_frames)
 
 1210         if (
ctx->has_transp)
 
 1214         if (
ctx->uses_fullpel)
 
 1216         ctx->show_indeo4_info = 0;
 
 1231     if (
ctx->mb_vlc.cust_tab.table)
 
 1234     if (
ctx->blk_vlc.cust_tab.table)
 
 1247     0,  8, 16, 24, 32, 40, 48, 56,
 
 1248     1,  9, 17, 25, 33, 41, 49, 57,
 
 1249     2, 10, 18, 26, 34, 42, 50, 58,
 
 1250     3, 11, 19, 27, 35, 43, 51, 59,
 
 1251     4, 12, 20, 28, 36, 44, 52, 60,
 
 1252     5, 13, 21, 29, 37, 45, 53, 61,
 
 1253     6, 14, 22, 30, 38, 46, 54, 62,
 
 1254     7, 15, 23, 31, 39, 47, 55, 63
 
 1258      0,  1,  2,  3,  4,  5,  6,  7,
 
 1259      8,  9, 10, 11, 12, 13, 14, 15,
 
 1260     16, 17, 18, 19, 20, 21, 22, 23,
 
 1261     24, 25, 26, 27, 28, 29, 30, 31,
 
 1262     32, 33, 34, 35, 36, 37, 38, 39,
 
 1263     40, 41, 42, 43, 44, 45, 46, 47,
 
 1264     48, 49, 50, 51, 52, 53, 54, 55,
 
 1265     56, 57, 58, 59, 60, 61, 62, 63
 
 1269     0, 1, 4, 8, 5, 2, 3, 6, 9, 12, 13, 10, 7, 11, 14, 15
 
 1281     {1,  1,  0,  1,  1,  0,  1,  1,  2,  2,  1,  1,  1,  1,  3,  3,
 
 1282      1,  1,  2,  2,  1,  1,  4,  4,  1,  1,  1,  1,  2,  2,  5,  5,
 
 1283      1,  1,  3,  3,  1,  1,  6,  6,  1,  2,  1,  2,  7,  7,  1,  1,
 
 1284      8,  8,  1,  1,  4,  2,  1,  4,  2,  1,  3,  3,  1,  1,  1,  9,
 
 1285      9,  1,  2,  1,  2,  1,  5,  5,  1,  1, 10, 10,  1,  1,  3,  3,
 
 1286      2,  2,  1,  1, 11, 11,  6,  4,  4,  1,  6,  1,  2,  1,  2, 12,
 
 1287      8,  1, 12,  7,  8,  7,  1, 16,  1, 16,  1,  3,  3, 13,  1, 13,
 
 1288      2,  2,  1, 15,  1,  5, 14, 15,  1,  5, 14,  1, 17,  8, 17,  8,
 
 1289      1,  4,  4,  2,  2,  1, 25, 25, 24, 24,  1,  3,  1,  3,  1,  8,
 
 1290      6,  7,  6,  1, 18,  8, 18,  1,  7, 23,  2,  2, 23,  1,  1, 21,
 
 1291     22,  9,  9, 22, 19,  1, 21,  5, 19,  5,  1, 33, 20, 33, 20,  8,
 
 1292      4,  4,  1, 32,  2,  2,  8,  3, 32, 26,  3,  1,  7,  7, 26,  6,
 
 1293      1,  6,  1,  1, 16,  1, 10,  1, 10,  2, 16, 29, 28,  2, 29, 28,
 
 1294      1, 27,  5,  8,  5, 27,  1,  8,  3,  7,  3, 31, 41, 31,  1, 41,
 
 1295      6,  1,  6,  7,  4,  4,  1,  1,  2,  1,  2, 11, 34, 30, 11,  1,
 
 1296     30, 15, 15, 34, 36, 40, 36, 40, 35, 35, 37, 37, 39, 39, 38, 38},
 
 1299     { 1,  -1,   0,   2,  -2,   0,   3,  -3,   1,  -1,   4,  -4,   5,  -5,   1,  -1,
 
 1300       6,  -6,   2,  -2,   7,  -7,   1,  -1,   8,  -8,   9,  -9,   3,  -3,   1,  -1,
 
 1301      10, -10,   2,  -2,  11, -11,   1,  -1,  12,   4, -12,  -4,   1,  -1,  13, -13,
 
 1302       1,  -1,  14, -14,   2,   5,  15,  -2,  -5, -15,  -3,   3,  16, -16,  17,   1,
 
 1303      -1, -17,   6,  18,  -6, -18,   2,  -2,  19, -19,   1,  -1,  20, -20,   4,  -4,
 
 1304       7,  -7,  21, -21,   1,  -1,   2,   3,  -3,  22,  -2, -22,   8,  23,  -8,   1,
 
 1305       2, -23,  -1,   2,  -2,  -2,  24,   1, -24,  -1,  25,   5,  -5,   1, -25,  -1,
 
 1306       9,  -9,  26,   1, -26,   3,   1,  -1,  27,  -3,  -1, -27,   1,   3,  -1,  -3,
 
 1307      28,  -4,   4,  10, -10, -28,   1,  -1,   1,  -1,  29,   6, -29,  -6,  30,  -4,
 
 1308       3,   3,  -3, -30,   1,   4,  -1,  31,  -3,   1,  11, -11,  -1, -31,  32,  -1,
 
 1309      -1,   2,  -2,   1,   1, -32,   1,   4,  -1,  -4,  33,  -1,   1,   1,  -1,   5,
 
 1310       5,  -5, -33,  -1, -12,  12,  -5,  -7,   1,   1,   7,  34,   4,  -4,  -1,   4,
 
 1311     -34,  -4,  35,  36,  -2, -35,  -2, -36,   2,  13,   2,  -1,   1, -13,   1,  -1,
 
 1312      37,   1,  -5,   6,   5,  -1,  38,  -6,  -8,   5,   8,  -1,   1,   1, -37,  -1,
 
 1313       5,  39,  -5,  -5,   6,  -6, -38, -39, -14,  40,  14,   2,   1,   1,  -2, -40,
 
 1314      -1,  -2,   2,  -1,  -1,  -1,   1,   1,   1,  -1,   1,  -1,   1,  -1,   1,  -1}
 
 1320     {0,  1,  1,  2,  2,  3,  3,  4,  4,  5,  5,  6,  8,  6,  8,  7,
 
 1321      7,  9,  9, 10, 10, 11, 11,  1, 12,  1, 12, 13, 13, 16, 14, 16,
 
 1322     14, 15, 15, 17, 17, 18,  0, 18, 19, 20, 21, 19, 22, 21, 20, 22,
 
 1323     25, 24,  2, 25, 24, 23, 23,  2, 26, 28, 26, 28, 29, 27, 29, 27,
 
 1324     33, 33,  1, 32,  1,  3, 32, 30, 36,  3, 36, 30, 31, 31, 35, 34,
 
 1325     37, 41, 34, 35, 37,  4, 41,  4, 49,  8,  8, 49, 40, 38,  5, 38,
 
 1326     40, 39,  5, 39, 42, 43, 42,  7, 57,  6, 43, 44,  6, 50,  7, 44,
 
 1327     57, 48, 50, 48, 45, 45, 46, 47, 51, 46, 47, 58,  1, 51, 58,  1,
 
 1328     52, 59, 53,  9, 52, 55, 55, 59, 53, 56, 54, 56, 54,  9, 64, 64,
 
 1329     60, 63, 60, 63, 61, 62, 61, 62,  2, 10,  2, 10, 11,  1, 11, 13,
 
 1330     12,  1, 12, 13, 16, 16,  8,  8, 14,  3,  3, 15, 14, 15,  4,  4,
 
 1331      1, 17, 17,  5,  1,  7,  7,  5,  6,  1,  2,  2,  6, 22,  1, 25,
 
 1332     21, 22,  8, 24,  1, 21, 25, 24,  8, 18, 18, 23,  9, 20, 23, 33,
 
 1333     29, 33, 20,  1, 19,  1, 29, 36,  9, 36, 19, 41, 28, 57, 32,  3,
 
 1334     28,  3,  1, 27, 49, 49,  1, 32, 26, 26,  2,  4,  4,  7, 57, 41,
 
 1335      2,  7, 10,  5, 37, 16, 10, 27,  8,  8, 13, 16, 37, 13,  1,  5},
 
 1338     {0,   1,  -1,   1,  -1,   1,  -1,   1,  -1,   1,  -1,   1,   1,  -1,  -1,   1,
 
 1339     -1,   1,  -1,   1,  -1,   1,  -1,   2,   1,  -2,  -1,   1,  -1,   1,   1,  -1,
 
 1340     -1,   1,  -1,   1,  -1,   1,   0,  -1,   1,   1,   1,  -1,   1,  -1,  -1,  -1,
 
 1341      1,   1,   2,  -1,  -1,   1,  -1,  -2,   1,   1,  -1,  -1,   1,   1,  -1,  -1,
 
 1342      1,  -1,   3,   1,  -3,   2,  -1,   1,   1,  -2,  -1,  -1,  -1,   1,   1,   1,
 
 1343      1,   1,  -1,  -1,  -1,   2,  -1,  -2,   1,   2,  -2,  -1,   1,   1,   2,  -1,
 
 1344     -1,   1,  -2,  -1,   1,   1,  -1,   2,   1,   2,  -1,   1,  -2,  -1,  -2,  -1,
 
 1345     -1,   1,   1,  -1,   1,  -1,   1,   1,   1,  -1,  -1,   1,   4,  -1,  -1,  -4,
 
 1346      1,   1,   1,   2,  -1,  -1,   1,  -1,  -1,   1,  -1,  -1,   1,  -2,   1,  -1,
 
 1347      1,   1,  -1,  -1,   1,   1,  -1,  -1,   3,   2,  -3,  -2,   2,   5,  -2,   2,
 
 1348      2,  -5,  -2,  -2,  -2,   2,  -3,   3,   2,   3,  -3,   2,  -2,  -2,   3,  -3,
 
 1349      6,   2,  -2,   3,  -6,   3,  -3,  -3,   3,   7,  -4,   4,  -3,   2,  -7,   2,
 
 1350      2,  -2,  -4,   2,   8,  -2,  -2,  -2,   4,   2,  -2,   2,   3,   2,  -2,  -2,
 
 1351      2,   2,  -2,  -8,  -2,   9,  -2,   2,  -3,  -2,   2,  -2,   2,   2,   2,   4,
 
 1352     -2,  -4,  10,   2,   2,  -2,  -9,  -2,   2,  -2,   5,   4,  -4,   4,  -2,   2,
 
 1353     -5,  -4,  -3,   4,   2,  -3,   3,  -2,  -5,   5,   3,   3,  -2,  -3, -10,  -4}
 
 1359     {1,  1,  0,  2,  2,  1,  1,  3,  3,  4,  4,  0,  1,  1,  5,  5,
 
 1360      2,  2,  6,  6,  7,  7,  1,  8,  1,  8,  3,  3,  9,  9,  1,  2,
 
 1361      2,  1,  4, 10,  4, 10, 11, 11,  1,  5, 12, 12,  1,  5, 13, 13,
 
 1362      3,  3,  6,  6,  2,  2, 14, 14, 16, 16, 15,  7, 15,  8,  8,  7,
 
 1363      1,  1, 17, 17,  4,  4,  1,  1, 18, 18,  2,  2,  5,  5, 25,  3,
 
 1364      9,  3, 25,  9, 19, 24, 19, 24,  1, 21, 20,  1, 21, 22, 20, 22,
 
 1365     23, 23,  8,  6, 33,  6,  8, 33,  7,  7, 26, 26,  1, 32,  1, 32,
 
 1366     28,  4, 28, 10, 29, 27, 27, 10, 41,  4, 29,  2,  2, 41, 36, 31,
 
 1367     49, 31, 34, 30, 34, 36, 30, 35,  1, 49, 11,  5, 35, 11,  1,  3,
 
 1368      3,  5, 37, 37,  8, 40,  8, 40, 12, 12, 42, 42,  1, 38, 16, 57,
 
 1369      1,  6, 16, 39, 38,  6,  7,  7, 13, 13, 39, 43,  2, 43, 57,  2,
 
 1370     50,  9, 44,  9, 50,  4, 15, 48, 44,  4,  1, 15, 48, 14, 14,  1,
 
 1371     45, 45,  8,  3,  5,  8, 51, 47,  3, 46, 46, 47,  5, 51,  1, 17,
 
 1372     17, 58,  1, 58,  2, 52, 52,  2, 53,  7, 59,  6,  6, 56, 53, 55,
 
 1373      7, 55,  1, 54, 59, 56, 54, 10,  1, 10,  4, 60,  1, 60,  8,  4,
 
 1374      8, 64, 64, 61,  1, 63,  3, 63, 62, 61,  5, 11,  5,  3, 11, 62},
 
 1377     { 1,  -1,   0,   1,  -1,   2,  -2,   1,  -1,   1,  -1,   0,   3,  -3,   1,  -1,
 
 1378       2,  -2,   1,  -1,   1,  -1,   4,   1,  -4,  -1,   2,  -2,   1,  -1,   5,   3,
 
 1379      -3,  -5,   2,   1,  -2,  -1,   1,  -1,   6,   2,   1,  -1,  -6,  -2,   1,  -1,
 
 1380       3,  -3,   2,  -2,   4,  -4,   1,  -1,   1,  -1,   1,   2,  -1,   2,  -2,  -2,
 
 1381       7,  -7,   1,  -1,   3,  -3,   8,  -8,   1,  -1,   5,  -5,   3,  -3,   1,   4,
 
 1382       2,  -4,  -1,  -2,   1,   1,  -1,  -1,   9,   1,   1,  -9,  -1,   1,  -1,  -1,
 
 1383       1,  -1,   3,  -3,   1,   3,  -3,  -1,   3,  -3,   1,  -1,  10,   1, -10,  -1,
 
 1384       1,   4,  -1,   2,   1,  -1,   1,  -2,   1,  -4,  -1,   6,  -6,  -1,   1,   1,
 
 1385       1,  -1,   1,   1,  -1,  -1,  -1,   1,  11,  -1,  -2,   4,  -1,   2, -11,   5,
 
 1386      -5,  -4,  -1,   1,   4,   1,  -4,  -1,  -2,   2,   1,  -1,  12,   1,  -2,   1,
 
 1387     -12,   4,   2,   1,  -1,  -4,   4,  -4,   2,  -2,  -1,   1,   7,  -1,  -1,  -7,
 
 1388      -1,  -3,   1,   3,   1,   5,   2,   1,  -1,  -5,  13,  -2,  -1,   2,  -2, -13,
 
 1389       1,  -1,   5,   6,   5,  -5,   1,   1,  -6,   1,  -1,  -1,  -5,  -1,  14,   2,
 
 1390      -2,   1, -14,  -1,   8,   1,  -1,  -8,   1,   5,   1,   5,  -5,   1,  -1,   1,
 
 1391      -5,  -1,  15,   1,  -1,  -1,  -1,   3, -15,  -3,   6,   1,  16,  -1,   6,  -6,
 
 1392      -6,   1,  -1,   1, -16,   1,   7,  -1,   1,  -1,  -6,  -3,   6,  -7,   3,  -1}
 
 1398     {0,  1,  1,  2,  2,  3,  3,  4,  4,  1,  1,  5,  5,  6,  6,  7,
 
 1399      7,  8,  8,  9,  9,  2,  2, 10, 10,  1,  1, 11, 11, 12, 12,  3,
 
 1400      3, 13, 13,  0, 14, 14, 16, 15, 16, 15,  4,  4, 17,  1, 17,  1,
 
 1401      5,  5, 18, 18,  2,  2,  6,  6,  8, 19,  7,  8,  7, 19, 20, 20,
 
 1402     21, 21, 22, 24, 22, 24, 23, 23,  1,  1, 25, 25,  3,  3, 26, 26,
 
 1403      9,  9, 27, 27, 28, 28, 33, 29,  4, 33, 29,  1,  4,  1, 32, 32,
 
 1404      2,  2, 31, 10, 30, 10, 30, 31, 34, 34,  5,  5, 36, 36, 35, 41,
 
 1405     35, 11, 41, 11, 37,  1,  8,  8, 37,  6,  1,  6, 40,  7,  7, 40,
 
 1406     12, 38, 12, 39, 39, 38, 49, 13, 49, 13,  3, 42,  3, 42, 16, 16,
 
 1407     43, 43, 14, 14,  1,  1, 44, 15, 44, 15,  2,  2, 57, 48, 50, 48,
 
 1408     57, 50,  4, 45, 45,  4, 46, 47, 47, 46,  1, 51,  1, 17, 17, 51,
 
 1409      8,  9,  9,  5, 58,  8, 58,  5, 52, 52, 55, 56, 53, 56, 55, 59,
 
 1410     59, 53, 54,  1,  6, 54,  7,  7,  6,  1,  2,  3,  2,  3, 64, 60,
 
 1411     60, 10, 10, 64, 61, 62, 61, 63,  1, 63, 62,  1, 18, 24, 18,  4,
 
 1412     25,  4,  8, 21, 21,  1, 24, 22, 25, 22,  8, 11, 19, 11, 23,  1,
 
 1413     20, 23, 19, 20,  5, 12,  5,  1, 16,  2, 12, 13,  2, 13,  1, 16},
 
 1416     { 0,   1,  -1,   1,  -1,   1,  -1,   1,  -1,   2,  -2,   1,  -1,   1,  -1,   1,
 
 1417      -1,   1,  -1,   1,  -1,   2,  -2,   1,  -1,   3,  -3,   1,  -1,   1,  -1,   2,
 
 1418      -2,   1,  -1,   0,   1,  -1,   1,   1,  -1,  -1,   2,  -2,   1,   4,  -1,  -4,
 
 1419       2,  -2,   1,  -1,  -3,   3,   2,  -2,   2,   1,   2,  -2,  -2,  -1,   1,  -1,
 
 1420       1,  -1,   1,   1,  -1,  -1,   1,  -1,   5,  -5,   1,  -1,   3,  -3,   1,  -1,
 
 1421       2,  -2,   1,  -1,   1,  -1,   1,   1,   3,  -1,  -1,   6,  -3,  -6,  -1,   1,
 
 1422       4,  -4,   1,   2,   1,  -2,  -1,  -1,   1,  -1,   3,  -3,   1,  -1,   1,   1,
 
 1423      -1,   2,  -1,  -2,   1,   7,  -3,   3,  -1,   3,  -7,  -3,   1,  -3,   3,  -1,
 
 1424       2,   1,  -2,   1,  -1,  -1,   1,   2,  -1,  -2,  -4,  -1,   4,   1,   2,  -2,
 
 1425       1,  -1,  -2,   2,   8,  -8,  -1,   2,   1,  -2,  -5,   5,   1,  -1,  -1,   1,
 
 1426      -1,   1,   4,  -1,   1,  -4,  -1,  -1,   1,   1,   9,   1,  -9,   2,  -2,  -1,
 
 1427      -4,   3,  -3,  -4,  -1,   4,   1,   4,   1,  -1,   1,  -1,   1,   1,  -1,   1,
 
 1428      -1,  -1,  -1,  10,   4,   1,   4,  -4,  -4, -10,   6,   5,  -6,  -5,   1,  -1,
 
 1429       1,   3,  -3,  -1,   1,  -1,  -1,  -1,  11,   1,   1, -11,  -2,  -2,   2,   5,
 
 1430      -2,  -5,  -5,   2,  -2,  12,   2,  -2,   2,   2,   5,  -3,  -2,   3,  -2, -12,
 
 1431      -2,   2,   2,   2,  -5,   3,   5,  13,  -3,   7,  -3,  -3,  -7,   3, -13,   3}
 
 1437     {0,  1,  1,  1,  2,  2,  1,  3,  3,  1,  1,  1,  4,  4,  1,  5,
 
 1438      2,  1,  5,  2,  1,  1,  6,  6,  1,  1,  1,  1,  1,  7,  3,  1,
 
 1439      2,  3,  0,  1,  2,  7,  1,  1,  1,  8,  1,  1,  8,  1,  1,  1,
 
 1440      9,  1,  9,  1,  2,  1,  1,  2,  1,  1, 10,  4,  1, 10,  1,  4,
 
 1441      1,  1,  1,  1,  1,  3,  1,  1,  1,  3,  2,  1,  5,  1,  1,  1,
 
 1442      2,  5,  1, 11,  1, 11,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,
 
 1443      2,  1,  6,  1,  6,  1,  1,  2,  1,  1,  1,  1,  1,  1,  1, 12,
 
 1444      3,  1, 12,  1,  1,  1,  2,  1,  1,  3,  1,  1,  1,  1,  1,  1,
 
 1445      4,  1,  1,  1,  2,  1,  1,  4,  1,  1,  1,  1,  1,  1,  2,  1,
 
 1446      1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  3,  1,  2,  1,  1,  5,
 
 1447      1,  1,  1,  1,  1,  7,  1,  7,  1,  1,  2,  3,  1,  1,  1,  1,
 
 1448      5,  1,  1,  1,  1,  1,  1,  2, 13,  1,  1,  1,  1,  1,  1,  1,
 
 1449      1,  1,  1,  1,  1,  1,  1,  1, 13,  2,  1,  1,  4,  1,  1,  1,
 
 1450      3,  1,  6,  1,  1,  1, 14,  1,  1,  1,  1,  1, 14,  6,  1,  1,
 
 1451      1,  1, 15,  2,  4,  1,  2,  3, 15,  1,  1,  1,  8,  1,  1,  8,
 
 1452      1,  1,  1,  1,  1,  1,  1,  1,  2,  1,  1,  1,  1,  1,  1,  1},
 
 1455     { 0,   1,  -1,   2,   1,  -1,  -2,   1,  -1,   3,  -3,   4,   1,  -1,  -4,   1,
 
 1456       2,   5,  -1,  -2,  -5,   6,   1,  -1,  -6,   7,  -7,   8,  -8,   1,   2,   9,
 
 1457       3,  -2,   0,  -9,  -3,  -1,  10, -10,  11,   1, -11,  12,  -1, -12,  13, -13,
 
 1458       1,  14,  -1, -14,   4,  15, -15,  -4,  16, -16,   1,   2,  17,  -1, -17,  -2,
 
 1459      18, -18,  19, -19,  20,   3, -20,  21, -21,  -3,   5,  22,   2, -22, -23,  23,
 
 1460      -5,  -2,  24,   1, -24,  -1,  25, -25,  26, -26, -27,  27,  28,  29, -28, -29,
 
 1461       6,  30,   2, -31,  -2, -30,  31,  -6, -32,  32,  33, -33,  34, -35, -34,   1,
 
 1462       4, -36,  -1,  35,  37,  36,   7, -37,  38,  -4, -38,  39,  41,  40, -40, -39,
 
 1463       3,  42, -43, -41,  -7, -42,  43,  -3,  44, -44,  45, -45,  46,  47,   8, -47,
 
 1464     -48, -46,  50, -50,  48,  49,  51, -49,  52, -52,   5, -51,  -8, -53,  53,   3,
 
 1465     -56,  56,  55,  54, -54,   2,  60,  -2, -55,  58,   9,  -5,  59,  57, -57, -63,
 
 1466      -3, -58, -60, -61,  61, -59, -62,  -9,   1,  64,  62,  69, -64,  63,  65, -67,
 
 1467     -68,  66, -65,  68, -66, -69,  67, -70,  -1,  10,  71, -71,   4,  73,  72,  70,
 
 1468       6, -76,  -3,  74, -78, -74,   1,  78,  80, -72, -75,  76,  -1,   3, -73,  79,
 
 1469      75,  77,   1,  11,  -4, -79, -10,  -6,  -1, -77, -83, -80,   2,  81, -84,  -2,
 
 1470      83, -81,  82, -82,  84, -87, -86,  85, -11, -85,  86, -89,  87, -88,  88,  89}
 
 1476     {1,  1,  0,  2,  1,  2,  1,  3,  3,  1,  1,  4,  4,  2,  2,  1,
 
 1477      1,  5,  5,  6,  1,  6,  1,  7,  7,  3,  3,  2,  8,  2,  8,  1,
 
 1478      1,  0,  9,  9,  1,  1, 10,  4, 10,  4, 11, 11,  2,  1,  2,  1,
 
 1479     12, 12,  3,  3,  1,  1, 13,  5,  5, 13, 14,  1,  1, 14,  2,  2,
 
 1480      6,  6, 15,  1,  1, 15, 16,  4,  7, 16,  4,  7,  1,  1,  3,  3,
 
 1481      8,  8,  2,  2,  1,  1, 17, 17,  1,  1, 18, 18,  5,  5,  2,  2,
 
 1482      1,  1,  9, 19,  9, 19, 20,  3,  3, 20,  1, 10, 21,  1, 10,  4,
 
 1483      4, 21, 22,  6,  6, 22,  1,  1, 23, 24,  2,  2, 23, 24, 11,  1,
 
 1484      1, 11,  7, 25,  7,  1,  1, 25,  8,  8,  3, 26,  3,  1, 12,  2,
 
 1485      2, 26,  1, 12,  5,  5, 27,  4,  1,  4,  1, 27, 28,  1, 28, 13,
 
 1486      1, 13,  2, 29,  2,  1, 32,  6,  1, 30, 14, 29, 14,  6,  3, 31,
 
 1487      3,  1, 30,  1, 32, 31, 33,  9, 33,  1,  1,  7,  9,  7,  2,  2,
 
 1488      1,  1,  4, 36, 34,  4,  5, 10, 10,  5, 34,  1,  1, 35,  8,  8,
 
 1489     36,  3, 35,  1, 15,  3,  2,  1, 16, 15, 16,  2, 37,  1, 37,  1,
 
 1490      1,  1,  6,  6, 38,  1, 38, 11,  1, 39, 39, 40, 11,  2, 41,  4,
 
 1491     40,  1,  2,  4,  1,  1,  1, 41,  3,  1,  3,  1,  5,  7,  5,  7},
 
 1494     { 1,  -1,   0,   1,   2,  -1,  -2,   1,  -1,   3,  -3,   1,  -1,   2,  -2,   4,
 
 1495      -4,   1,  -1,   1,   5,  -1,  -5,   1,  -1,   2,  -2,   3,   1,  -3,  -1,   6,
 
 1496      -6,   0,   1,  -1,   7,  -7,   1,   2,  -1,  -2,   1,  -1,   4,   8,  -4,  -8,
 
 1497       1,  -1,   3,  -3,   9,  -9,   1,   2,  -2,  -1,   1,  10, -10,  -1,   5,  -5,
 
 1498       2,  -2,   1,  11, -11,  -1,   1,   3,   2,  -1,  -3,  -2,  12, -12,   4,  -4,
 
 1499       2,  -2,  -6,   6,  13, -13,   1,  -1,  14, -14,   1,  -1,   3,  -3,   7,  -7,
 
 1500      15, -15,   2,   1,  -2,  -1,   1,   5,  -5,  -1, -16,   2,   1,  16,  -2,   4,
 
 1501      -4,  -1,   1,   3,  -3,  -1,  17, -17,   1,   1,  -8,   8,  -1,  -1,   2,  18,
 
 1502     -18,  -2,   3,   1,  -3,  19, -19,  -1,   3,  -3,   6,   1,  -6,  20,   2,   9,
 
 1503      -9,  -1, -20,  -2,   4,  -4,   1,  -5,  21,   5, -21,  -1,   1, -22,  -1,   2,
 
 1504      22,  -2,  10,   1, -10,  23,   1,   4, -23,   1,   2,  -1,  -2,  -4,  -7,   1,
 
 1505       7, -24,  -1,  24,  -1,  -1,   1,   3,  -1, -25,  25,   4,  -3,  -4,  11, -11,
 
 1506      26, -26,   6,   1,   1,  -6,  -5,  -3,   3,   5,  -1, -27,  27,   1,   4,  -4,
 
 1507      -1,  -8,  -1,  28,   2,   8, -12, -28,  -2,  -2,   2,  12,  -1,  29,   1, -29,
 
 1508      30, -30,   5,  -5,   1, -31,  -1,   3,  31,  -1,   1,   1,  -3, -13,   1,  -7,
 
 1509      -1, -32,  13,   7,  32,  33, -33,  -1,  -9, -34,   9,  34,  -6,   5,   6,  -5}
 
 1515     {1,  1,  0,  1,  1,  2,  2,  1,  1,  3,  3,  1,  1,  0,  2,  2,
 
 1516      4,  1,  4,  1,  1,  1,  5,  5,  1,  1,  6,  6,  2,  2,  1,  1,
 
 1517      3,  3,  7,  7,  1,  1,  8,  8,  1,  1,  2,  2,  1,  9,  1,  9,
 
 1518      4,  4, 10,  1,  1, 10,  1,  1, 11, 11,  3,  3,  1,  2,  1,  2,
 
 1519      1,  1, 12, 12,  5,  5,  1,  1, 13,  1,  1, 13,  2,  2,  1,  1,
 
 1520      6,  6,  1,  1,  4, 14,  4, 14,  3,  1,  3,  1,  1,  1, 15,  7,
 
 1521     15,  2,  2,  7,  1,  1,  1,  8,  1,  8, 16, 16,  1,  1,  1,  1,
 
 1522      2,  1,  1,  2,  1,  1,  3,  5,  5,  3,  4,  1,  1,  4,  1,  1,
 
 1523     17, 17,  9,  1,  1,  9,  2,  2,  1,  1, 10, 10,  1,  6,  1,  1,
 
 1524      6, 18,  1,  1, 18,  1,  1,  1,  2,  2,  3,  1,  3,  1,  1,  1,
 
 1525      4,  1, 19,  1, 19,  7,  1,  1, 20,  1,  4, 20,  1,  7, 11,  2,
 
 1526      1, 11, 21,  2,  8,  5,  1,  8,  1,  5, 21,  1,  1,  1, 22,  1,
 
 1527      1, 22,  1,  1,  3,  3,  1, 23,  2, 12, 24,  1,  1,  2,  1,  1,
 
 1528     12, 23,  1,  1, 24,  1,  1,  1,  4,  1,  1,  1,  2,  1,  6,  6,
 
 1529      4,  2,  1,  1,  1,  1,  1,  1,  1, 14, 13,  3,  1, 25,  9, 25,
 
 1530     14,  1,  9,  3, 13,  1,  1,  1,  1,  1, 10,  1,  1,  2, 10,  2},
 
 1533     {-20,  -1,   0,   2,  -2,   1,  -1,   3,  -3,   1,  -1,   4,  -4,   0,   2,  -2,
 
 1534        1,   5,  -1,  -5,   6,  -6,   1,  -1,   7,  -7,   1,  -1,   3,  -3,   8,  -8,
 
 1535        2,  -2,   1,  -1,   9,  -9,   1,  -1,  10, -10,   4,  -4,  11,   1, -11,  -1,
 
 1536        2,  -2,   1,  12, -12,  -1,  13, -13,   1,  -1,   3,  -3,  14,   5, -14,  -5,
 
 1537      -15,  15,  -1,   1,   2,  -2,  16, -16,   1,  17, -17,  -1,   6,  -6,  18, -18,
 
 1538        2,  -2, -19,  19,  -3,   1,   3,  -1,   4,  20,  -4,   1, -21,  21,   1,   2,
 
 1539       -1,  -7,   7,  -2,  22, -22,  23,   2, -23,  -2,   1,  -1, -24,  24, -25,  25,
 
 1540       -8, -26,  26,   8, -27,  27,   5,   3,  -3,  -5,  -4,  28, -28,   4,  29, -29,
 
 1541        1,  -1,  -2, -30,  30,   2,   9,  -9, -31,  31,   2,  -2, -32,   3,  32, -33,
 
 1542       -3,   1,  33, -34,  -1,  34, -35,  35, -10,  10,  -6,  36,   6, -36,  37, -37,
 
 1543       -5,  38,   1, -38,  -1,   3,  39, -39,  -1,  40,   5,   1, -40,  -3,   2, -11,
 
 1544      -41,  -2,   1,  11,  -3,  -4,  41,   3,  42,   4,  -1, -43, -42,  43,   1, -44,
 
 1545       45,  -1,  44, -45,  -7,   7, -46,   1, -12,   2,   1, -47,  46,  12,  47,  48,
 
 1546       -2,  -1, -48,  49,  -1, -50, -49,  50,  -6, -51,  51,  52, -13,  53,  -4,   4,
 
 1547        6,  13, -53, -52, -54,  55,  54, -55, -56,  -2,   2,  -8,  56,   1,  -3,  -1,
 
 1548        2,  58,   3,   8,  -2,  57, -58, -60, -59, -57,  -3,  60,  59, -14,   3,  14}
 
 1554     {1,  1,  0,  2,  2,  1,  1,  3,  3,  4,  4,  5,  5,  1,  1,  6,
 
 1555      6,  2,  2,  7,  7,  8,  8,  1,  1,  3,  3,  9,  9, 10, 10,  1,
 
 1556      1,  2,  2,  4,  4, 11,  0, 11, 12, 12, 13, 13,  1,  1,  5,  5,
 
 1557     14, 14, 15, 16, 15, 16,  3,  3,  1,  6,  1,  6,  2,  2,  7,  7,
 
 1558      8,  8, 17, 17,  1,  1,  4,  4, 18, 18,  2,  2,  1, 19,  1, 20,
 
 1559     19, 20, 21, 21,  3,  3, 22, 22,  5,  5, 24,  1,  1, 23,  9, 23,
 
 1560     24,  9,  2,  2, 10,  1,  1, 10,  6,  6, 25,  4,  4, 25,  7,  7,
 
 1561     26,  8,  1,  8,  3,  1, 26,  3, 11, 11, 27, 27,  2, 28,  1,  2,
 
 1562     28,  1, 12, 12,  5,  5, 29, 13, 13, 29, 32,  1,  1, 33, 31, 30,
 
 1563     32,  4, 30, 33,  4, 31,  3, 14,  1,  1,  3, 34, 34,  2,  2, 14,
 
 1564      6,  6, 35, 36, 35, 36,  1, 15,  1, 16, 16, 15,  7,  9,  7,  9,
 
 1565     37,  8,  8, 37,  1,  1, 39,  2, 38, 39,  2, 40,  5, 38, 40,  5,
 
 1566      3,  3,  4,  4, 10, 10,  1,  1,  1,  1, 41,  2, 41,  2,  6,  6,
 
 1567      1,  1, 11, 42, 11, 43,  3, 42,  3, 17,  4, 43,  1, 17,  7,  1,
 
 1568      8, 44,  4,  7, 44,  5,  8,  2,  5,  1,  2, 48, 45,  1, 12, 45,
 
 1569     12, 48, 13, 13,  1,  9,  9, 46,  1, 46, 47, 47, 49, 18, 18, 49},
 
 1572     { 1,  -1,   0,   1,  -1,   2,  -2,   1,  -1,   1,  -1,   1,  -1,   3,  -3,   1,
 
 1573      -1,  -2,   2,   1,  -1,   1,  -1,   4,  -4,  -2,   2,   1,  -1,   1,  -1,   5,
 
 1574      -5,  -3,   3,   2,  -2,   1,   0,  -1,   1,  -1,   1,  -1,   6,  -6,   2,  -2,
 
 1575       1,  -1,   1,   1,  -1,  -1,  -3,   3,   7,   2,  -7,  -2,  -4,   4,   2,  -2,
 
 1576       2,  -2,   1,  -1,   8,  -8,   3,  -3,   1,  -1,  -5,   5,   9,   1,  -9,   1,
 
 1577      -1,  -1,   1,  -1,  -4,   4,   1,  -1,   3,  -3,   1, -10,  10,   1,   2,  -1,
 
 1578      -1,  -2,   6,  -6,   2,  11, -11,  -2,   3,  -3,   1,  -4,   4,  -1,   3,  -3,
 
 1579       1,   3,  12,  -3,  -5, -12,  -1,   5,   2,  -2,   1,  -1,  -7,   1,  13,   7,
 
 1580      -1, -13,   2,  -2,   4,  -4,   1,   2,  -2,  -1,   1,  14, -14,   1,   1,   1,
 
 1581      -1,  -5,  -1,  -1,   5,  -1,  -6,   2, -15,  15,   6,   1,  -1,  -8,   8,  -2,
 
 1582      -4,   4,   1,   1,  -1,  -1,  16,   2, -16,  -2,   2,  -2,   4,   3,  -4,  -3,
 
 1583      -1,  -4,   4,   1, -17,  17,  -1,  -9,   1,   1,   9,   1,  -5,  -1,  -1,   5,
 
 1584      -7,   7,   6,  -6,   3,  -3,  18, -18,  19, -19,   1, -10,  -1,  10,  -5,   5,
 
 1585      20, -20,  -3,   1,   3,   1,   8,  -1,  -8,   2,   7,  -1, -21,  -2,   5,  21,
 
 1586       5,  -1,  -7,  -5,   1,  -6,  -5, -11,   6,  22,  11,   1,   1, -22,  -3,  -1,
 
 1587       3,  -1,   3,  -3, -23,   4,  -4,   1,  23,  -1,   1,  -1,   1,  -2,   2,  -1}
 
 1593     {1,  1,  1,  1,  0,  2,  2,  1,  1,  3,  3,  0,  1,  1,  2,  2,
 
 1594      4,  4,  1,  1,  5,  5,  1,  1,  2,  2,  3,  3,  6,  6,  1,  1,
 
 1595      7,  7,  8,  1,  8,  2,  2,  1,  4,  4,  1,  3,  1,  3,  9,  9,
 
 1596      2,  2,  1,  5,  1,  5, 10, 10,  1,  1, 11, 11,  3,  6,  3,  4,
 
 1597      4,  6,  2,  2,  1, 12,  1, 12,  7, 13,  7, 13,  1,  1,  8,  8,
 
 1598      2,  2, 14, 14, 16, 15, 16,  5,  5,  1,  3, 15,  1,  3,  4,  4,
 
 1599      1,  1, 17, 17,  2,  2,  6,  6,  1, 18,  1, 18, 22, 21, 22, 21,
 
 1600     25, 24, 25, 19,  9, 20,  9, 23, 19, 24, 20,  3, 23,  7,  3,  1,
 
 1601      1,  7, 28, 26, 29,  5, 28, 26,  5,  8, 29,  4,  8, 27,  2,  2,
 
 1602      4, 27,  1,  1, 10, 36, 10, 33, 33, 36, 30,  1, 32, 32,  1, 30,
 
 1603      6, 31, 31, 35,  3,  6, 11, 11,  3,  2, 35,  2, 34,  1, 34,  1,
 
 1604     37, 37, 12,  7, 12,  5, 41,  5,  4,  7,  1,  8, 13,  4,  1, 41,
 
 1605     13, 38,  8, 38,  9,  1, 40, 40,  9,  1, 39,  2,  2, 49, 39, 42,
 
 1606      3,  3, 14, 16, 49, 14, 16, 42, 43, 43,  6,  6, 15,  1,  1, 15,
 
 1607     44, 44,  1,  1, 50, 48,  4,  5,  4,  7,  5,  2, 10, 10, 48,  7,
 
 1608     50, 45,  2,  1, 45,  8,  8,  1, 46, 46,  3, 47, 47,  3,  1,  1},
 
 1611     { 1,  -1,   2,  -2,   0,   1,  -1,   3,  -3,   1,  -1,   0,   4,  -4,   2,  -2,
 
 1612       1,  -1,   5,  -5,   1,  -1,   6,  -6,   3,  -3,   2,  -2,   1,  -1,   7,  -7,
 
 1613       1,  -1,   1,   8,  -1,   4,  -4,  -8,   2,  -2,   9,   3,  -9,  -3,   1,  -1,
 
 1614       5,  -5,  10,   2, -10,  -2,   1,  -1,  11, -11,   1,  -1,  -4,   2,   4,   3,
 
 1615      -3,  -2,   6,  -6,  12,   1, -12,  -1,   2,   1,  -2,  -1,  13, -13,   2,  -2,
 
 1616       7,  -7,   1,  -1,   1,   1,  -1,   3,  -3,  14,   5,  -1, -14,  -5,   4,  -4,
 
 1617      15, -15,   1,  -1,   8,  -8,  -3,   3,  16,   1, -16,  -1,   1,   1,  -1,  -1,
 
 1618       1,   1,  -1,   1,   2,   1,  -2,   1,  -1,  -1,  -1,   6,  -1,   3,  -6,  17,
 
 1619     -17,  -3,   1,   1,   1,   4,  -1,  -1,  -4,   3,  -1,   5,  -3,  -1,  -9,   9,
 
 1620      -5,   1,  18, -18,   2,   1,  -2,   1,  -1,  -1,   1,  19,  -1,   1, -19,  -1,
 
 1621       4,   1,  -1,   1,   7,  -4,  -2,   2,  -7,  10,  -1, -10,   1,  20,  -1, -20,
 
 1622       1,  -1,   2,   4,  -2,   5,   1,  -5,   6,  -4,  21,   4,   2,  -6, -21,  -1,
 
 1623      -2,   1,  -4,  -1,  -3,  22,  -1,   1,   3, -22,  -1,  11, -11,   1,   1,   1,
 
 1624       8,  -8,   2,   2,  -1,  -2,  -2,  -1,   1,  -1,  -5,   5,   2,  23, -23,  -2,
 
 1625       1,  -1,  24, -24,  -1,  -1,   7,   6,  -7,   5,  -6,  12,  -3,   3,   1,  -5,
 
 1626       1,   1, -12,  25,  -1,  -5,   5, -25,  -1,   1,   9,   1,  -1,  -9,  26, -26}