• Main Page
  • Related Pages
  • Modules
  • Data Structures
  • Files
  • Examples
  • File List
  • Globals

libavcodec/ra144.c

Go to the documentation of this file.
00001 /*
00002  * Real Audio 1.0 (14.4K)
00003  * Copyright (c) 2003 the ffmpeg project
00004  *
00005  * This file is part of Libav.
00006  *
00007  * Libav is free software; you can redistribute it and/or
00008  * modify it under the terms of the GNU Lesser General Public
00009  * License as published by the Free Software Foundation; either
00010  * version 2.1 of the License, or (at your option) any later version.
00011  *
00012  * Libav is distributed in the hope that it will be useful,
00013  * but WITHOUT ANY WARRANTY; without even the implied warranty of
00014  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
00015  * Lesser General Public License for more details.
00016  *
00017  * You should have received a copy of the GNU Lesser General Public
00018  * License along with Libav; if not, write to the Free Software
00019  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
00020  */
00021 
00022 #include <stdint.h>
00023 #include "avcodec.h"
00024 #include "celp_filters.h"
00025 #include "ra144.h"
00026 
00027 const int16_t ff_gain_val_tab[256][3] = {
00028     { 541, 956,  768}, { 877, 581,  568}, { 675,1574,  635}, {1248,1464,  668},
00029     {1246, 839, 1394}, {2560,1386,  991}, { 925, 687,  608}, {2208, 797, 1144},
00030     { 535, 832,  799}, { 762, 605, 1154}, { 832,1122, 1003}, {1180, 687, 1176},
00031     {1292, 901,  732}, {1656, 689,  896}, {1750,1248,  848}, {2284, 942, 1022},
00032     { 824,1472,  643}, { 517, 765,  512}, { 562,1816, 1522}, { 694,1826, 2700},
00033     { 704, 524,  672}, {1442, 757, 2232}, { 884, 551, 1266}, {2232,1007, 1692},
00034     { 932, 746,  777}, {1132, 822,  926}, {1226, 771,  611}, {2948,1342, 1008},
00035     {1302, 594, 1158}, {1602, 636, 1128}, {3408, 910, 1438}, {1996, 614,  575},
00036     { 665, 935,  628}, { 631,1192,  829}, { 644, 926, 1052}, { 879, 988, 1226},
00037     { 941,2768, 2772}, { 565,1344, 2304}, { 547, 628,  740}, { 639, 532, 1074},
00038     { 955,1208,  598}, {1124,1160,  900}, {1206, 899, 1242}, { 746, 533,  624},
00039     {1458,1028,  735}, {1706,1102,  692}, {1898,1018, 1004}, {2176, 988,  735},
00040     {1578, 782, 1642}, { 897, 516,  754}, {2068, 702, 1656}, {2344, 818, 1526},
00041     { 907, 652,  592}, {1056, 652,  642}, {2124,1416,  780}, {2664,1250,  727},
00042     {1894, 727, 1108}, {2196, 657,  981}, {4840, 920, 1704}, {4992,1238,  983},
00043     {2420, 909, 1094}, {2760, 935, 1032}, {2800, 612,  853}, {3068, 832,  574},
00044     { 523,1796,  923}, { 722,1916, 1382}, {1226,1542,  928}, { 758, 757,  584},
00045     { 512,1134,  577}, { 615,1276,  698}, { 574,2568, 2356}, { 993,2728, 3512},
00046     { 539, 890,  913}, { 694, 928, 1088}, { 805, 600, 1360}, {2160, 951, 3128},
00047     { 816, 950,  590}, { 955, 847,  811}, {1094, 883,  556}, {1304, 888,  604},
00048     { 863,1170,  855}, {1023, 997, 1032}, { 932,1228, 1280}, { 627, 564,  573},
00049     { 876, 900, 1448}, {1030, 857, 1792}, {1294, 953, 1758}, {1612, 854, 1714},
00050     {1090,1166,  631}, {1314,1202,  751}, {1480, 905,  795}, {1682,1016,  568},
00051     {1494,1178,  983}, { 878, 613,  526}, {1728,1446,  779}, {2136,1348,  774},
00052     { 950, 649,  939}, {1180, 703,  899}, {1236, 527, 1158}, {1450, 647,  972},
00053     {1282, 647,  707}, {1460, 663,  644}, {1614, 572,  578}, {3516,1222,  821},
00054     {2668, 729, 1682}, {3128, 585, 1502}, {3208, 733,  976}, {6800, 871, 1416},
00055     {3480, 743, 1408}, {3764, 899, 1170}, {3772, 632,  875}, {4092, 732,  638},
00056     {3112, 753, 2620}, {3372, 945, 1890}, {3768, 969, 2288}, {2016, 559,  854},
00057     {1736, 729,  787}, {1940, 686,  547}, {2140, 635,  674}, {4480,1272,  828},
00058     {3976, 592, 1666}, {4384, 621, 1388}, {4400, 801,  955}, {4656, 522,  646},
00059     {4848, 625, 1636}, {4984, 591,  874}, {5352, 535, 1001}, {11216,938, 1184},
00060     { 925,3280, 1476}, { 735,1580, 1088}, {1150,1576,  674}, { 655, 783,  528},
00061     { 527,2052, 1354}, { 782,1704, 1880}, { 578, 910, 1026}, { 692, 882, 1468},
00062     { 586, 683,  715}, { 739, 609,  717}, { 778, 773,  697}, { 922, 785,  813},
00063     { 766, 651,  984}, { 978, 596, 1030}, {1070, 757, 1080}, {1324, 687, 1178},
00064     {1108,2144,  979}, { 723, 982,  690}, { 936, 956,  527}, {1180,1002,  547},
00065     { 517,1306,  825}, { 832,1184,  974}, {1024, 957,  903}, {1262,1090,  906},
00066     {1028, 720,  649}, {1192, 679,  694}, {2468,1480,  979}, {2844,1370,  877},
00067     {1310, 835,  848}, {1508, 839,  698}, {1742,1030,  769}, {1910, 852,  573},
00068     {1280, 859, 1174}, {1584, 863, 1108}, {1686, 708, 1364}, {1942, 768, 1104},
00069     { 891, 536,  690}, {1016, 560,  663}, {2172, 870, 1348}, {2404, 999, 1170},
00070     {1890, 966,  889}, {2116, 912,  777}, {2296,1020,  714}, {4872,1844,  932},
00071     {2392, 778,  929}, {2604, 772,  744}, {2764, 957,  722}, {5832,1532,  984},
00072     {2188, 519, 1264}, {2332, 532,  922}, {5064, 995, 2412}, {2708, 571,  874},
00073     {2408, 545,  666}, {5016,1084,  875}, {5376, 983, 1196}, {5536, 979,  730},
00074     {5344, 634, 1744}, {5688, 706, 1348}, {5912, 977, 1190}, {6072, 905,  763},
00075     {6048, 582, 1526}, {11968,1013,1816}, {12864,937, 1900}, {12560,1086, 998},
00076     {1998, 684, 1884}, {2504, 633, 1992}, {1252, 567,  835}, {1478, 571,  973},
00077     {2620, 769, 1414}, {2808, 952, 1142}, {2908, 712, 1028}, {2976, 686,  741},
00078     {1462, 552,  714}, {3296, 991, 1452}, {1590, 615,  544}, {3480,1150,  824},
00079     {3212, 832,  923}, {3276, 839,  531}, {3548, 786,  852}, {3732, 764,  570},
00080     {5728, 906, 2616}, {6272, 804, 2252}, {3096, 535,  876}, {3228, 598,  649},
00081     {6536, 759, 1436}, {6648, 993,  846}, {6864, 567, 1210},{14016,1012, 1302},
00082     {3408, 548, 1098}, {7160,1008, 1742}, {7136,1000, 1182}, {7480,1032,  836},
00083     {7448, 612, 1552}, {7744, 614,  816}, {8384, 777, 1438}, {8784, 694,  786},
00084     { 882,1508, 1068}, { 597, 837,  766}, {1270, 954, 1408}, { 803, 550,  798},
00085     {1398,1308,  798}, {1848,1534,  738}, { 970, 675,  608}, {1264, 706,  684},
00086     {1716, 767, 1126}, {2108, 765, 1404}, {2236, 924, 1003}, {2472,1048,  611},
00087     { 999, 942,  963}, {1094, 857,  935}, {2936, 926, 1138}, {1934, 746,  551},
00088     {3336, 633, 1762}, {3764, 701, 1454}, {1890, 564,  636}, {4096,1126,  793},
00089     {3936, 556, 1140}, {3936, 540,  740}, {4216, 764,  874}, {8480,1328, 1014},
00090     {2184, 515, 1042}, {4432, 934, 1344}, {4784, 945, 1112}, {5016,1062,  733},
00091     {9216,1020, 2028}, {9968, 924, 1188}, {5424, 909, 1206}, {6512, 744, 1086}
00092 };
00093 
00094 const uint8_t ff_gain_exp_tab[256] = {
00095    15, 15, 15, 15, 15, 16, 14, 15, 14, 14, 14, 14, 14, 14, 14, 14,
00096    14, 13, 14, 14, 13, 14, 13, 14, 13, 13, 13, 14, 13, 13, 14, 13,
00097    13, 13, 13, 13, 14, 13, 12, 12, 13, 13, 13, 12, 13, 13, 13, 13,
00098    13, 12, 13, 13, 12, 12, 13, 13, 13, 13, 14, 14, 13, 13, 13, 13,
00099    13, 13, 13, 12, 12, 12, 13, 13, 12, 12, 12, 13, 12, 12, 12, 12,
00100    12, 12, 12, 11, 12, 12, 12, 12, 12, 12, 12, 12, 12, 11, 12, 12,
00101    12, 12, 12, 12, 12, 12, 12, 13, 13, 13, 13, 14, 13, 13, 13, 13,
00102    13, 13, 13, 12, 12, 12, 12, 13, 13, 13, 13, 13, 13, 13, 13, 14,
00103    13, 12, 12, 11, 12, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
00104    12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 12, 12, 11, 11, 11, 11,
00105    12, 12, 12, 12, 11, 11, 12, 12, 12, 12, 12, 13, 12, 12, 12, 13,
00106    12, 12, 13, 12, 12, 13, 13, 13, 13, 13, 13, 13, 13, 14, 14, 14,
00107    12, 12, 11, 11, 12, 12, 12, 12, 11, 12, 11, 12, 12, 12, 12, 12,
00108    13, 13, 12, 12, 13, 13, 13, 14, 12, 13, 13, 13, 13, 13, 13, 13,
00109    11, 10, 11, 10, 11, 11, 10, 10, 11, 11, 11, 11, 10,  9, 11, 10,
00110    12, 12, 11, 12, 12, 12, 12, 13, 11, 12, 12, 12, 13, 13, 12, 12
00111 };
00112 
00113 const int8_t ff_cb1_vects[128][40]={
00114     {
00115      38,  -4,  15,  -4,  14, -13,  12, -11,  -2,  -6,
00116      -6, -11, -45, -16, -11, -13,  -7,   6, -12,   4,
00117     -20,   3, -16,  12,  -1,  12,  46,  24,   0,  33,
00118      -3,   9, -12, -12,  -8,  -7,  17,  -6,   0,  -2,
00119     }, {
00120      60, -16,   3, -22,  10, -32,   0, -28, -17, -18,
00121      -3, -25, -37, -23, -10,   3,   2,   3,   0,   3,
00122     -14,   0, -14,  -1,   0,   2,  32,   9,  -1,  25,
00123       7,  13,  -5,  13,   8,   1,   2,   8, -10,   6,
00124     }, {
00125      27, -12,  28,  -2,   6,  -7,  15,   9, -11,   1,
00126     -13, -11, -40,   4, -29, -14, -19,  -5, -23,  -8,
00127     -30, -13, -17,   0, -14,  12,  34,  20,  -2,  25,
00128       2, -16,  -4, -12,  15,  16,  29,   7,  24,  10,
00129     }, {
00130      49, -24,  16, -20,   2, -26,   2,  -7, -25, -10,
00131     -11, -25, -32,  -3, -27,   2,  -8,  -8, -11,  -9,
00132     -24, -17, -16, -14, -13,   2,  20,   5,  -4,  17,
00133      14, -12,   3,  13,  33,  25,  14,  23,  15,  19,
00134     }, {
00135      46,  -6,  21,   8,  -2, -16,  -5,  -8, -11,   4,
00136       8,  15, -24,   4,  -2, -26,  -3, -16, -16, -14,
00137      -9,  -2,  -1,   4,  19,   7,  36,  17,   9,  13,
00138       0,  31,  -5, -12,   7,  -8,  11, -15, -13,  -4,
00139     }, {
00140      68, -18,   9,  -9,  -6, -35, -18, -25, -26,  -7,
00141      10,   1, -16,  -3,  -1,  -9,   6, -19,  -4, -15,
00142      -4,  -6,   0,  -8,  20,  -2,  23,   2,   7,   5,
00143      12,  35,   1,  13,  24,   0,  -3,   0, -22,   4,
00144     }, {
00145      35, -14,  34,  10, -10, -10,  -1,  12, -20,  12,
00146       0,  15, -18,  24, -20, -27, -14, -28, -27, -27,
00147     -20, -19,  -2,  -8,   5,   7,  25,  13,   5,   5,
00148       6,   5,   2, -12,  31,  15,  23,  -1,  12,   8,
00149     }, {
00150      57, -26,  22,  -7, -14, -28, -14,  -3, -35,   0,
00151       3,   1, -11,  16, -18, -10,  -4, -31, -15, -28,
00152     -14, -23,  -1, -21,   7,  -2,  11,  -1,   3,  -1,
00153      18,   9,  10,  13,  49,  24,   8,  14,   2,  16,
00154     }, {
00155      25,  15,  22,  11,  18,   4,  15, -22,   8,  -2,
00156     -17,  -9, -48, -20, -30, -17, -16,  11,  -1,  16,
00157       2,  10,  -5,  26,  -2,  -4,  22,   0,   2,  10,
00158      -6,  13, -14,  10, -23,   0,  10,  -2,   1,   0,
00159     }, {
00160      47,   3,  11,  -6,  15, -13,   2, -38,  -6, -13,
00161     -15, -22, -40, -28, -28,   0,  -5,   8,  10,  15,
00162       7,   7,  -4,  13,  -1, -14,   9, -14,   0,   2,
00163       4,  18,  -7,  36,  -6,   8,  -3,  13,  -7,   8,
00164     }, {
00165      14,   7,  36,  13,  10,  10,  18,   0,   0,   5,
00166     -25,  -8, -43,   0, -48, -18, -27,   0, -12,   3,
00167      -7,  -6,  -7,  13, -15,  -5,  11,  -3,   0,   2,
00168       0, -12,  -6,  10,   0,  23,  22,  11,  26,  12,
00169     }, {
00170      36,  -5,  24,  -4,   7,  -7,   6, -17, -14,  -5,
00171     -22, -22, -35,  -8, -46,  -1, -17,  -3,   0,   2,
00172      -2, -10,  -5,   0, -14, -15,  -2, -18,  -2,  -4,
00173      11,  -7,   1,  36,  18,  32,   7,  27,  17,  20,
00174     }, {
00175      33,  13,  29,  24,   1,   1,  -2, -18,   0,   9,
00176      -3,  17, -27,   0, -21, -30, -12, -11,  -5,  -2,
00177      12,   4,   9,  19,  18,  -9,  13,  -6,  11,  -8,
00178      -2,  35,  -8,  10,  -7,  -1,   4, -11, -10,  -2,
00179     }, {
00180      55,   1,  17,   6,  -1, -16, -15, -35, -15,  -2,
00181       0,   4, -19,  -8, -20, -13,  -1, -14,   7,  -3,
00182      18,   0,  10,   5,  19, -19,   0, -21,   8, -16,
00183       9,  39,   0,  36,  10,   7,  -9,   4, -20,   5,
00184     }, {
00185      22,   5,  42,  26,  -6,   8,   1,   2,  -9,  17,
00186     -10,  18, -21,  19, -39, -31, -23, -23, -16, -15,
00187       2, -12,   7,   6,   5,  -9,   1, -10,   7, -16,
00188       4,   9,   0,  10,  17,  22,  16,   2,  14,   9,
00189     }, {
00190      44,  -6,  30,   8,  -9, -10, -11, -14, -23,   5,
00191      -8,   4, -14,  12, -37, -14, -12, -26,  -4, -16,
00192       8, -16,   9,  -7,   6, -19, -12, -25,   5, -24,
00193      15,  13,   8,  36,  34,  31,   1,  18,   4,  18,
00194     }, {
00195      -3,  -5,  -9,  -7,  15,  -1,   5,  13,   2,  12,
00196       5,   2, -21, -23,  -2, -16,   0,   5,  -6,  13,
00197     -23,   3, -32,  10, -15,   8,  44,  28,   9,  37,
00198      -2,  13,  -9, -15, -12, -27,  -7, -12,   0, -11,
00199     }, {
00200      18, -17, -21, -25,  11, -19,  -6,  -3, -11,   0,
00201       7, -11, -13, -31,  -1,   0,   9,   1,   5,  12,
00202     -18,   0, -31,  -2, -13,  -1,  30,  14,   7,  29,
00203       9,  18,  -1,  10,   4, -18, -22,   3, -10,  -2,
00204     }, {
00205     -13, -13,   3,  -5,   7,   4,   9,  34,  -5,  20,
00206      -2,   3, -16,  -3, -20, -17, -11,  -7, -17,   0,
00207     -34, -13, -33,  -2, -28,   8,  32,  24,   5,  29,
00208       3, -12,   0, -15,  11,  -3,   3,   2,  24,   1,
00209     }, {
00210       8, -25,  -8, -23,   3, -13,  -3,  17, -20,   8,
00211       0, -10,  -8, -11, -18,   0,  -1, -10,  -5,   0,
00212     -28, -17, -32, -15, -26,  -1,  19,   9,   3,  21,
00213      15,  -7,   6,   9,  29,   5, -10,  17,  15,   9,
00214     }, {
00215       4,  -6,  -3,   5,  -1,  -4, -11,  16,  -6,  23,
00216      19,  29,   0,  -3,   6, -30,   3, -17, -10,  -5,
00217     -13,  -2, -17,   3,   5,   3,  35,  21,  17,  17,
00218       2,  35,  -2, -15,   3, -28, -13, -21, -13, -13,
00219     }, {
00220      26, -19, -15, -12,  -5, -22, -24,   0, -21,  12,
00221      21,  15,   8, -11,   7, -12,  14, -20,   2,  -6,
00222      -7,  -6, -16,  -9,   6,  -5,  21,   7,  15,  10,
00223      13,  39,   5,  10,  20, -19, -28,  -5, -22,  -5,
00224     }, {
00225      -5, -15,   9,   7,  -9,   2,  -8,  37, -14,  31,
00226      11,  29,   5,  16, -11, -30,  -7, -29, -21, -18,
00227     -23, -19, -18,  -9,  -7,   3,  23,  17,  14,   9,
00228       8,   9,   6, -15,  27,  -4,  -2,  -6,  12,  -1,
00229     }, {
00230      16, -27,  -2, -10, -13, -16, -20,  20, -29,  20,
00231      14,  16,  13,   8,  -9, -13,   2, -33,  -9, -19,
00232     -17, -23, -17, -22,  -6,  -6,   9,   2,  12,   2,
00233      20,  13,  13,  10,  45,   4, -16,   8,   2,   7,
00234     }, {
00235     -16,  14,  -2,   8,  20,  17,   9,   2,  14,  16,
00236      -6,   5, -24, -28, -21, -20,  -8,   9,   4,  25,
00237      -1,  11, -22,  24, -15,  -8,  21,   5,  11,  14,
00238      -5,  18, -11,   7, -27, -20, -14,  -7,   1,  -9,
00239     }, {
00240       6,   2, -14,  -9,  16,  -1,  -3, -14,   0,   5,
00241      -3,  -8, -16, -36, -19,  -3,   1,   6,  17,  24,
00242       4,   7, -21,  11, -14, -18,   7,  -9,   9,   7,
00243       6,  22,  -3,  33, -10, -11, -28,   7,  -7,   0,
00244     }, {
00245     -26,   6,  11,  10,  12,  23,  12,  23,   5,  24,
00246     -13,   5, -19,  -8, -38, -21, -20,  -2,  -6,  12,
00247     -11,  -5, -23,  11, -29,  -9,   9,   0,   7,   6,
00248       1,  -7,  -2,   7,  -3,   3,  -2,   6,  27,   3,
00249     }, {
00250      -4,  -6,   0,  -7,   8,   4,   0,   6,  -9,  13,
00251     -11,  -7, -11, -15, -37,  -4,  -9,  -5,   5,  11,
00252      -5,  -9, -22,  -1, -27, -18,  -4, -14,   5,   0,
00253      12,  -3,   4,  32,  14,  12, -17,  22,  17,  11,
00254     }, {
00255      -8,  12,   3,  21,   3,  14,  -8,   5,   4,  28,
00256       7,  32,  -2,  -8, -12, -34,  -4, -12,   1,   6,
00257       9,   4,  -7,  17,   4, -13,  11,  -1,  19,  -4,
00258       0,  39,  -4,   7, -11, -21, -20, -16, -10, -11,
00259     }, {
00260      13,   0,  -8,   3,   0,  -4, -21, -11,  -9,  16,
00261      10,  18,   5, -16, -10, -16,   5, -15,  13,   5,
00262      15,   1,  -6,   4,   6, -23,  -2, -16,  17, -12,
00263      10,  44,   3,  33,   6, -12, -34,  -1, -20,  -3,
00264     }, {
00265     -18,   4,  17,  23,  -4,  20,  -4,  26,  -3,  36,
00266       0,  32,   2,  12, -29, -34, -16, -24, -10,  -6,
00267       0, -12,  -8,   4,  -8, -13,   0,  -6,  16, -12,
00268       5,  13,   3,   7,  13,   3,  -8,  -2,  14,   0,
00269     }, {
00270       3,  -7,   5,   5,  -8,   2, -17,   9, -18,  24,
00271       2,  19,  10,   4, -28, -17,  -5, -28,   2,  -7,
00272       4, -15,  -7,  -8,  -6, -23, -13, -21,  14, -20,
00273      17,  18,  11,  33,  30,  11, -23,  13,   5,   9,
00274     }, {
00275      60,  10,   7,  -1,   9,  -8,   6, -13,   2, -15,
00276      -1, -10, -13, -11,  15,   0,   6,   9,  -1,   0,
00277     -13,   1, -11,  -3, -13,  21,  13,  26,  -7,  31,
00278     -10,  -7, -16, -33, -31, -10,  22,  -8,   1,  -2,
00279     }, {
00280      82,  -1,  -4, -19,   6, -27,  -6, -29, -12, -26,
00281       1, -24,  -5, -18,  17,  17,  17,   6,  10,   0,
00282      -7,  -2,  -9, -16, -12,  11,   0,  11,  -9,  23,
00283       0,  -3,  -8,  -8, -13,  -1,   8,   7,  -7,   6,
00284     }, {
00285      49,   2,  21,   0,   1,  -2,   9,   8,  -6,  -6,
00286      -8, -10,  -8,   9,  -2,   0,  -4,  -2, -13, -12,
00287     -23, -15, -12, -16, -26,  21,   2,  21, -11,  23,
00288      -4, -33,  -7, -33,  -6,  13,  34,   5,  27,  10,
00289     }, {
00290      71, -10,   9, -17,  -1, -20,  -3,  -8, -21, -18,
00291      -6, -24,   0,   1,   0,  16,   6,  -5,   0, -13,
00292     -17, -19, -11, -29, -25,  11, -11,   6, -13,  15,
00293       7, -29,   0,  -8,  11,  22,  20,  21,  17,  18,
00294     }, {
00295      67,   8,  14,  11,  -7, -11, -11,  -9,  -7,  -3,
00296      13,  16,   8,   9,  24, -12,  10, -13,  -5, -17,
00297      -2,  -4,   3, -10,   6,  17,   4,  19,   0,  11,
00298      -6,  13,  -9, -33, -14, -10,  16, -17, -10,  -4,
00299     }, {
00300      90,  -3,   2,  -6, -10, -29, -24, -26, -21, -15,
00301      15,   2,  16,   1,  25,   4,  21, -16,   6, -18,
00302       3,  -8,   5, -24,   8,   7,  -9,   4,  -1,   3,
00303       5,  18,  -1,  -7,   2,  -1,   2,  -1, -19,   3,
00304     }, {
00305      57,   0,  27,  13, -14,  -5,  -7,  11, -15,   4,
00306       5,  16,  13,  29,   6, -13,   0, -25, -16, -31,
00307     -12, -22,   2, -23,  -6,  16,  -7,  14,  -2,   3,
00308       0, -12,   0, -33,   9,  13,  28,  -3,  14,   7,
00309     }, {
00310      79, -11,  15,  -4, -18, -23, -20,  -5, -30,  -7,
00311       7,   2,  21,  21,   8,   3,  10, -28,  -4, -31,
00312      -6, -25,   3, -37,  -4,   7, -20,   0,  -4,  -4,
00313      11,  -7,   6,  -8,  27,  22,  14,  12,   5,  16,
00314     }, {
00315      47,  30,  15,  14,  14,   9,   9, -23,  13, -10,
00316     -12,  -7, -16, -15,  -3,  -3,  -1,  14,   9,  12,
00317       9,   8,   0,  10, -14,   4,  -9,   2,  -5,   8,
00318     -13,  -3, -18, -10, -45,  -3,  16,  -4,   4,   0,
00319     }, {
00320      69,  17,   3,  -3,  10,  -8,  -3, -40,  -1, -21,
00321     -10, -21,  -8, -23,  -1,  13,   8,  11,  21,  11,
00322      15,   4,   0,  -2, -13,  -5, -23, -12,  -7,   0,
00323      -1,   0, -10,  14, -28,   5,   1,  11,  -5,   7,
00324     }, {
00325      36,  21,  28,  16,   6,  16,  12,  -2,   4,  -2,
00326     -20,  -7, -11,   4, -20,  -4, -12,   2,  -1,   0,
00327       0,  -8,  -2,  -2, -27,   4, -21,  -2,  -9,   0,
00328      -6, -29,  -9, -10, -21,  21,  28,  10,  29,  11,
00329     }, {
00330      58,   9,  16,  -1,   2,  -2,   0, -19, -10, -13,
00331     -17, -21,  -3,  -3, -19,  12,  -2,   0,  10,  -1,
00332       5, -12,   0, -15, -26,  -5, -34, -16, -11,  -7,
00333       4, -25,  -2,  14,  -3,  29,  13,  25,  20,  20,
00334     }, {
00335      55,  28,  21,  27,  -2,   7,  -8, -20,   4,   1,
00336       1,  18,   5,   4,   5, -16,   2,  -8,   5,  -5,
00337      19,   2,  14,   3,   6,   0, -18,  -4,   2, -11,
00338      -8,  18, -11, -10, -29,  -3,  10, -13,  -8,  -3,
00339     }, {
00340      77,  16,   9,   9,  -6, -11, -21, -37, -10, -10,
00341       4,   5,  13,  -3,   7,   0,  13, -11,  17,  -6,
00342      25,  -1,  15,  -9,   7,  -9, -32, -19,   0, -18,
00343       2,  22,  -3,  15, -12,   5,  -4,   2, -17,   5,
00344     }, {
00345      44,  20,  34,  29, -10,  13,  -4,   0,  -4,   9,
00346      -5,  19,  10,  24, -11, -17,  -8, -20,  -5, -19,
00347       9, -14,  12,  -9,  -6,   0, -30,  -9,   0, -19,
00348      -2,  -7,  -2, -10,  -5,  20,  21,   1,  17,   9,
00349     }, {
00350      66,   8,  23,  11, -14,  -5, -17, -16, -19,  -2,
00351      -3,   5,  18,  17, -10,   0,   1, -23,   6, -20,
00352      15, -18,  14, -22,  -5, -10, -44, -23,  -2, -26,
00353       9,  -3,   4,  14,  12,  29,   7,  16,   7,  18,
00354     }, {
00355      18,   9, -17,  -4,  11,   3,   0,  11,   7,   4,
00356      10,   3,  10, -18,  24,  -3,  14,   7,   4,  10,
00357     -16,   1, -27,  -4, -27,  17,  12,  30,   0,  35,
00358      -9,  -3, -12, -36, -35, -30,  -2, -13,   2, -11,
00359     }, {
00360      40,  -2, -29, -22,   7, -14, -12,  -5,  -7,  -7,
00361      12,  -9,  18, -26,  26,  14,  24,   4,  16,   9,
00362     -10,  -2, -26, -18, -26,   7,  -1,  15,  -1,  27,
00363       2,   0,  -4, -11, -17, -21, -16,   1,  -7,  -3,
00364     }, {
00365       8,   1,  -3,  -2,   3,  10,   3,  32,  -1,  12,
00366       2,   4,  15,   1,   7,  -3,   2,  -4,  -6,  -3,
00367     -26, -15, -29, -17, -40,  17,   0,  26,  -2,  27,
00368      -2, -29,  -4, -36, -10,  -6,   9,   0,  27,   0,
00369     }, {
00370      30, -11, -15, -20,   0,  -8,  -9,  15, -15,   0,
00371       5,  -9,  23,  -6,   8,  13,  13,  -7,   5,  -3,
00372     -20, -19, -27, -31, -39,   7, -13,  11,  -4,  19,
00373       8, -25,   3, -11,   7,   2,  -4,  16,  18,   9,
00374     }, {
00375      26,   7, -11,   8,  -5,   1, -17,  14,  -1,  15,
00376      24,  30,  32,   1,  33, -16,  18, -14,   0,  -8,
00377      -6,  -4, -12, -12,  -6,  13,   2,  23,   8,  15,
00378      -4,  17,  -5, -36, -18, -30,  -8, -22, -10, -14,
00379     }, {
00380      48,  -4, -23,  -9,  -9, -17, -30,  -2, -16,   3,
00381      26,  16,  40,  -6,  35,   1,  28, -17,  12,  -9,
00382       0,  -8, -11, -25,  -5,   3, -10,   8,   6,   7,
00383       6,  22,   1, -11,  -1, -21, -22,  -7, -19,  -5,
00384     }, {
00385      15,   0,   2,  10, -13,   7, -14,  35, -10,  23,
00386      16,  31,  37,  21,  16, -17,   6, -26, -10, -21,
00387     -16, -21, -13, -25, -19,  13,  -8,  19,   5,   7,
00388       1,  -8,   2, -36,   5,  -6,   3,  -8,  15,  -1,
00389     }, {
00390      37, -12,  -9,  -7, -17, -11, -26,  18, -25,  12,
00391      19,  17,  45,  14,  17,   0,  17, -30,   1, -22,
00392     -10, -25, -12, -38, -18,   3, -22,   4,   3,   0,
00393      13,  -3,  10, -11,  23,   2, -10,   7,   5,   7,
00394     }, {
00395       5,  29,  -9,  11,  15,  22,   3,   0,  18,   8,
00396      -1,   6,   7, -23,   6,  -6,   5,  12,  15,  21,
00397       5,   8, -17,   9, -28,   0, -11,   6,   2,  12,
00398     -11,   0, -14, -13, -49, -22,  -8,  -9,   4,  -9,
00399     }, {
00400      27,  16, -21,  -6,  12,   3,  -9, -16,   3,  -2,
00401       1,  -7,  15, -31,   7,  10,  16,   9,  27,  21,
00402      11,   5, -16,  -3, -26,  -9, -24,  -7,   0,   4,
00403       0,   4,  -6,  11, -32, -14, -23,   6,  -5,  -1,
00404     }, {
00405      -4,  20,   3,  13,   8,  28,   6,  21,  10,  16,
00406      -8,   7,  12,  -3, -11,  -7,  -5,   0,   4,   8,
00407      -4,  -8, -18,  -3, -41,   0, -22,   2,   0,   4,
00408      -5, -25,  -6, -14, -25,   1,   2,   4,  29,   2,
00409     }, {
00410      17,   8,  -8,  -4,   4,  10,  -6,   5,  -4,   5,
00411      -6,  -6,  20, -10,  -9,   9,   4,  -2,  16,   7,
00412       1, -12, -17, -16, -39,  -9, -36, -12,  -2,  -3,
00413       6, -21,   1,  11,  -7,  10, -11,  20,  20,  11,
00414     }, {
00415      13,  27,  -3,  24,  -1,  19, -14,   3,   9,  20,
00416      12,  33,  29,  -3,  15, -20,   9,  -9,  11,   3,
00417      16,   2,  -2,   2,  -7,  -3, -20,   0,  10,  -7,
00418      -7,  22,  -7, -13, -33, -23, -14, -18,  -7, -12,
00419     }, {
00420      35,  15, -15,   6,  -4,   1, -27, -12,  -5,   8,
00421      15,  19,  37, -11,  16,  -2,  20, -12,  23,   2,
00422      22,  -1,  -1, -11,  -5, -13, -34, -14,   8, -14,
00423       4,  26,   0,  11, -16, -14, -29,  -2, -17,  -3,
00424     }, {
00425       3,  19,   9,  26,  -8,  26, -10,  24,   0,  28,
00426       5,  33,  34,  17,  -2, -20,  -1, -22,   0, -10,
00427       6, -14,  -3, -10, -20,  -4, -32,  -4,   7, -15,
00428       0,  -3,   0, -13,  -9,   0,  -3,  -4,  17,   0,
00429     }, {
00430      25,   7,  -2,   8, -12,   7, -23,   8, -13,  16,
00431       7,  20,  42,   9,   0,  -3,   9, -25,  12, -10,
00432      12, -18,  -2, -24, -19, -13, -46, -19,   5, -22,
00433      10,   0,   8,  11,   8,   9, -17,  11,   7,   8,
00434     }, {
00435     -25,  -7,   2,  -8,  12,  -7,  23,  -8,  13, -16,
00436      -7, -20, -42,  -9,   0,   3,  -9,  25, -12,  10,
00437     -12,  18,   2,  24,  19,  13,  46,  19,  -5,  22,
00438     -10,   0,  -8, -11,  -8,  -9,  17, -11,  -7,  -8,
00439     }, {
00440      -3, -19,  -9, -26,   8, -26,  10, -24,   0, -28,
00441      -5, -33, -34, -17,   2,  20,   1,  22,   0,  10,
00442      -6,  14,   3,  10,  20,   4,  32,   4,  -7,  15,
00443       0,   3,   0,  13,   9,   0,   3,   4, -17,   0,
00444     }, {
00445     -35, -15,  15,  -6,   4,  -1,  27,  12,   5,  -8,
00446     -15, -19, -37,  11, -16,   2, -20,  12, -23,  -2,
00447     -22,   1,   1,  11,   5,  13,  34,  14,  -8,  14,
00448      -4, -26,   0, -11,  16,  14,  29,   2,  17,   3,
00449     }, {
00450     -13, -27,   3, -24,   1, -19,  14,  -3,  -9, -20,
00451     -12, -33, -29,   3, -15,  20,  -9,   9, -11,  -3,
00452     -16,  -2,   2,  -2,   7,   3,  20,   0, -10,   7,
00453       7, -22,   7,  13,  33,  23,  14,  18,   7,  12,
00454     }, {
00455     -17,  -8,   8,   4,  -4, -10,   6,  -5,   4,  -5,
00456       6,   6, -20,  10,   9,  -9,  -4,   2, -16,  -7,
00457      -1,  12,  17,  16,  39,   9,  36,  12,   2,   3,
00458      -6,  21,  -1, -11,   7, -10,  11, -20, -20, -11,
00459     }, {
00460       4, -20,  -3, -13,  -8, -28,  -6, -21, -10, -16,
00461       8,  -7, -12,   3,  11,   7,   5,   0,  -4,  -8,
00462       4,   8,  18,   3,  41,   0,  22,  -2,   0,  -4,
00463       5,  25,   6,  14,  25,  -1,  -2,  -4, -29,  -2,
00464     }, {
00465     -27, -16,  21,   6, -12,  -3,   9,  16,  -3,   2,
00466      -1,   7, -15,  31,  -7, -10, -16,  -9, -27, -21,
00467     -11,  -5,  16,   3,  26,   9,  24,   7,   0,  -4,
00468       0,  -4,   6, -11,  32,  14,  23,  -6,   5,   1,
00469     }, {
00470      -5, -29,   9, -11, -15, -22,  -3,   0, -18,  -8,
00471       1,  -6,  -7,  23,  -6,   6,  -5, -12, -15, -21,
00472      -5,  -8,  17,  -9,  28,   0,  11,  -6,  -2, -12,
00473      11,   0,  14,  13,  49,  22,   8,   9,  -4,   9,
00474     }, {
00475     -37,  12,   9,   7,  17,  11,  26, -18,  25, -12,
00476     -19, -17, -45, -14, -17,   0, -17,  30,  -1,  22,
00477      10,  25,  12,  38,  18,  -3,  22,  -4,  -3,   0,
00478     -13,   3, -10,  11, -23,  -2,  10,  -7,  -5,  -7,
00479     }, {
00480     -15,   0,  -2, -10,  13,  -7,  14, -35,  10, -23,
00481     -16, -31, -37, -21, -16,  17,  -6,  26,  10,  21,
00482      16,  21,  13,  25,  19, -13,   8, -19,  -5,  -7,
00483      -1,   8,  -2,  36,  -5,   6,  -3,   8, -15,   1,
00484     }, {
00485     -48,   4,  23,   9,   9,  17,  30,   2,  16,  -3,
00486     -26, -16, -40,   6, -35,  -1, -28,  17, -12,   9,
00487       0,   8,  11,  25,   5,  -3,  10,  -8,  -6,  -7,
00488      -6, -22,  -1,  11,   1,  21,  22,   7,  19,   5,
00489     }, {
00490     -26,  -7,  11,  -8,   5,  -1,  17, -14,   1, -15,
00491     -24, -30, -32,  -1, -33,  16, -18,  14,   0,   8,
00492       6,   4,  12,  12,   6, -13,  -2, -23,  -8, -15,
00493       4, -17,   5,  36,  18,  30,   8,  22,  10,  14,
00494     }, {
00495     -30,  11,  15,  20,   0,   8,   9, -15,  15,   0,
00496      -5,   9, -23,   6,  -8, -13, -13,   7,  -5,   3,
00497      20,  19,  27,  31,  39,  -7,  13, -11,   4, -19,
00498      -8,  25,  -3,  11,  -7,  -2,   4, -16, -18,  -9,
00499     }, {
00500      -8,  -1,   3,   2,  -3, -10,  -3, -32,   1, -12,
00501      -2,  -4, -15,  -1,  -7,   3,  -2,   4,   6,   3,
00502      26,  15,  29,  17,  40, -17,   0, -26,   2, -27,
00503       2,  29,   4,  36,  10,   6,  -9,   0, -27,   0,
00504     }, {
00505     -40,   2,  29,  22,  -7,  14,  12,   5,   7,   7,
00506     -12,   9, -18,  26, -26, -14, -24,  -4, -16,  -9,
00507      10,   2,  26,  18,  26,  -7,   1, -15,   1, -27,
00508      -2,   0,   4,  11,  17,  21,  16,  -1,   7,   3,
00509     }, {
00510     -18,  -9,  17,   4, -11,  -3,   0, -11,  -7,  -4,
00511     -10,  -3, -10,  18, -24,   3, -14,  -7,  -4, -10,
00512      16,  -1,  27,   4,  27, -17, -12, -30,   0, -35,
00513       9,   3,  12,  36,  35,  30,   2,  13,  -2,  11,
00514     }, {
00515     -66,  -8, -23, -11,  14,   5,  17,  16,  19,   2,
00516       3,  -5, -18, -17,  10,   0,  -1,  23,  -6,  20,
00517     -15,  18, -14,  22,   5,  10,  44,  23,   2,  26,
00518      -9,   3,  -4, -14, -12, -29,  -7, -16,  -7, -18,
00519     }, {
00520     -44, -20, -34, -29,  10, -13,   4,   0,   4,  -9,
00521       5, -19, -10, -24,  11,  17,   8,  20,   5,  19,
00522      -9,  14, -12,   9,   6,   0,  30,   9,   0,  19,
00523       2,   7,   2,  10,   5, -20, -21,  -1, -17,  -9,
00524     }, {
00525     -77, -16,  -9,  -9,   6,  11,  21,  37,  10,  10,
00526      -4,  -5, -13,   3,  -7,   0, -13,  11, -17,   6,
00527     -25,   1, -15,   9,  -7,   9,  32,  19,   0,  18,
00528      -2, -22,   3, -15,  12,  -5,   4,  -2,  17,  -5,
00529     }, {
00530     -55, -28, -21, -27,   2,  -7,   8,  20,  -4,  -1,
00531      -1, -18,  -5,  -4,  -5,  16,  -2,   8,  -5,   5,
00532     -19,  -2, -14,  -3,  -6,   0,  18,   4,  -2,  11,
00533       8, -18,  11,  10,  29,   3, -10,  13,   8,   3,
00534     }, {
00535     -58,  -9, -16,   1,  -2,   2,   0,  19,  10,  13,
00536      17,  21,   3,   3,  19, -12,   2,   0, -10,   1,
00537      -5,  12,   0,  15,  26,   5,  34,  16,  11,   7,
00538      -4,  25,   2, -14,   3, -29, -13, -25, -20, -20,
00539     }, {
00540     -36, -21, -28, -16,  -6, -16, -12,   2,  -4,   2,
00541      20,   7,  11,  -4,  20,   4,  12,  -2,   1,   0,
00542       0,   8,   2,   2,  27,  -4,  21,   2,   9,   0,
00543       6,  29,   9,  10,  21, -21, -28, -10, -29, -11,
00544     }, {
00545     -69, -17,  -3,   3, -10,   8,   3,  40,   1,  21,
00546      10,  21,   8,  23,   1, -13,  -8, -11, -21, -11,
00547     -15,  -4,   0,   2,  13,   5,  23,  12,   7,   0,
00548       1,   0,  10, -14,  28,  -5,  -1, -11,   5,  -7,
00549     }, {
00550     -47, -30, -15, -14, -14,  -9,  -9,  23, -13,  10,
00551      12,   7,  16,  15,   3,   3,   1, -14,  -9, -12,
00552      -9,  -8,   0, -10,  14,  -4,   9,  -2,   5,  -8,
00553      13,   3,  18,  10,  45,   3, -16,   4,  -4,   0,
00554     }, {
00555     -79,  11, -15,   4,  18,  23,  20,   5,  30,   7,
00556      -7,  -2, -21, -21,  -8,  -3, -10,  28,   4,  31,
00557       6,  25,  -3,  37,   4,  -7,  20,   0,   4,   4,
00558     -11,   7,  -6,   8, -27, -22, -14, -12,  -5, -16,
00559     }, {
00560     -57,   0, -27, -13,  14,   5,   7, -11,  15,  -4,
00561      -5, -16, -13, -29,  -6,  13,   0,  25,  16,  31,
00562      12,  22,  -2,  23,   6, -16,   7, -14,   2,  -3,
00563       0,  12,   0,  33,  -9, -13, -28,   3, -14,  -7,
00564     }, {
00565     -90,   3,  -2,   6,  10,  29,  24,  26,  21,  15,
00566     -15,  -2, -16,  -1, -25,  -4, -21,  16,  -6,  18,
00567      -3,   8,  -5,  24,  -8,  -7,   9,  -4,   1,  -3,
00568      -5, -18,   1,   7,  -2,   1,  -2,   1,  19,  -3,
00569     }, {
00570     -67,  -8, -14, -11,   7,  11,  11,   9,   7,   3,
00571     -13, -16,  -8,  -9, -24,  12, -10,  13,   5,  17,
00572       2,   4,  -3,  10,  -6, -17,  -4, -19,   0, -11,
00573       6, -13,   9,  33,  14,  10, -16,  17,  10,   4,
00574     }, {
00575     -71,  10,  -9,  17,   1,  20,   3,   8,  21,  18,
00576       6,  24,   0,  -1,   0, -16,  -6,   5,   0,  13,
00577      17,  19,  11,  29,  25, -11,  11,  -6,  13, -15,
00578      -7,  29,   0,   8, -11, -22, -20, -21, -17, -18,
00579     }, {
00580     -49,  -2, -21,   0,  -1,   2,  -9,  -8,   6,   6,
00581       8,  10,   8,  -9,   2,   0,   4,   2,  13,  12,
00582      23,  15,  12,  16,  26, -21,  -2, -21,  11, -23,
00583       4,  33,   7,  33,   6, -13, -34,  -5, -27, -10,
00584     }, {
00585     -82,   1,   4,  19,  -6,  27,   6,  29,  12,  26,
00586      -1,  24,   5,  18, -17, -17, -17,  -6, -10,   0,
00587       7,   2,   9,  16,  12, -11,   0, -11,   9, -23,
00588       0,   3,   8,   8,  13,   1,  -8,  -7,   7,  -6,
00589     }, {
00590     -60, -10,  -7,   1,  -9,   8,  -6,  13,  -2,  15,
00591       1,  10,  13,  11, -15,   0,  -6,  -9,   1,   0,
00592      13,  -1,  11,   3,  13, -21, -13, -26,   7, -31,
00593      10,   7,  16,  33,  31,  10, -22,   8,  -1,   2,
00594     }, {
00595      -3,   7,  -5,  -5,   8,  -2,  17,  -9,  18, -24,
00596      -2, -19, -10,  -4,  28,  17,   5,  28,  -2,   7,
00597      -4,  15,   7,   8,   6,  23,  13,  21, -14,  20,
00598     -17, -18, -11, -33, -30, -11,  23, -13,  -5,  -9,
00599     }, {
00600      18,  -4, -17, -23,   4, -20,   4, -26,   3, -36,
00601       0, -32,  -2, -12,  29,  34,  16,  24,  10,   6,
00602       0,  12,   8,  -4,   8,  13,   0,   6, -16,  12,
00603      -5, -13,  -3,  -7, -13,  -3,   8,   2, -14,   0,
00604     }, {
00605     -13,   0,   8,  -3,   0,   4,  21,  11,   9, -16,
00606     -10, -18,  -5,  16,  10,  16,  -5,  15, -13,  -5,
00607     -15,  -1,   6,  -4,  -6,  23,   2,  16, -17,  12,
00608     -10, -44,  -3, -33,  -6,  12,  34,   1,  20,   3,
00609     }, {
00610       8, -12,  -3, -21,  -3, -14,   8,  -5,  -4, -28,
00611      -7, -32,   2,   8,  12,  34,   4,  12,  -1,  -6,
00612      -9,  -4,   7, -17,  -4,  13, -11,   1, -19,   4,
00613       0, -39,   4,  -7,  11,  21,  20,  16,  10,  11,
00614     }, {
00615       4,   6,   0,   7,  -8,  -4,   0,  -6,   9, -13,
00616      11,   7,  11,  15,  37,   4,   9,   5,  -5, -11,
00617       5,   9,  22,   1,  27,  18,   4,  14,  -5,   0,
00618     -12,   3,  -4, -32, -14, -12,  17, -22, -17, -11,
00619     }, {
00620      26,  -6, -11, -10, -12, -23, -12, -23,  -5, -24,
00621      13,  -5,  19,   8,  38,  21,  20,   2,   6, -12,
00622      11,   5,  23, -11,  29,   9,  -9,   0,  -7,  -6,
00623      -1,   7,   2,  -7,   3,  -3,   2,  -6, -27,  -3,
00624     }, {
00625      -6,  -2,  14,   9, -16,   1,   3,  14,   0,  -5,
00626       3,   8,  16,  36,  19,   3,  -1,  -6, -17, -24,
00627      -4,  -7,  21, -11,  14,  18,  -7,   9,  -9,  -7,
00628      -6, -22,   3, -33,  10,  11,  28,  -7,   7,   0,
00629     }, {
00630      16, -14,   2,  -8, -20, -17,  -9,  -2, -14, -16,
00631       6,  -5,  24,  28,  21,  20,   8,  -9,  -4, -25,
00632       1, -11,  22, -24,  15,   8, -21,  -5, -11, -14,
00633       5, -18,  11,  -7,  27,  20,  14,   7,  -1,   9,
00634     }, {
00635     -16,  27,   2,  10,  13,  16,  20, -20,  29, -20,
00636     -14, -16, -13,  -8,   9,  13,  -2,  33,   9,  19,
00637      17,  23,  17,  22,   6,   6,  -9,  -2, -12,  -2,
00638     -20, -13, -13, -10, -45,  -4,  16,  -8,  -2,  -7,
00639     }, {
00640       5,  15,  -9,  -7,   9,  -2,   8, -37,  14, -31,
00641     -11, -29,  -5, -16,  11,  30,   7,  29,  21,  18,
00642      23,  19,  18,   9,   7,  -3, -23, -17, -14,  -9,
00643      -8,  -9,  -6,  15, -27,   4,   2,   6, -12,   1,
00644     }, {
00645     -26,  19,  15,  12,   5,  22,  24,   0,  21, -12,
00646     -21, -15,  -8,  11,  -7,  12, -14,  20,  -2,   6,
00647       7,   6,  16,   9,  -6,   5, -21,  -7, -15, -10,
00648     -13, -39,  -5, -10, -20,  19,  28,   5,  22,   5,
00649     }, {
00650      -4,   6,   3,  -5,   1,   4,  11, -16,   6, -23,
00651     -19, -29,   0,   3,  -6,  30,  -3,  17,  10,   5,
00652      13,   2,  17,  -3,  -5,  -3, -35, -21, -17, -17,
00653      -2, -35,   2,  15,  -3,  28,  13,  21,  13,  13,
00654     }, {
00655      -8,  25,   8,  23,  -3,  13,   3, -17,  20,  -8,
00656       0,  10,   8,  11,  18,   0,   1,  10,   5,   0,
00657      28,  17,  32,  15,  26,   1, -19,  -9,  -3, -21,
00658     -15,   7,  -6,  -9, -29,  -5,  10, -17, -15,  -9,
00659     }, {
00660      13,  13,  -3,   5,  -7,  -4,  -9, -34,   5, -20,
00661       2,  -3,  16,   3,  20,  17,  11,   7,  17,   0,
00662      34,  13,  33,   2,  28,  -8, -32, -24,  -5, -29,
00663      -3,  12,   0,  15, -11,   3,  -3,  -2, -24,  -1,
00664     }, {
00665     -18,  17,  21,  25, -11,  19,   6,   3,  11,   0,
00666      -7,  11,  13,  31,   1,   0,  -9,  -1,  -5, -12,
00667      18,   0,  31,   2,  13,   1, -30, -14,  -7, -29,
00668      -9, -18,   1, -10,  -4,  18,  22,  -3,  10,   2,
00669     }, {
00670       3,   5,   9,   7, -15,   1,  -5, -13,  -2, -12,
00671      -5,  -2,  21,  23,   2,  16,   0,  -5,   6, -13,
00672      23,  -3,  32, -10,  15,  -8, -44, -28,  -9, -37,
00673       2, -13,   9,  15,  12,  27,   7,  12,   0,  11,
00674     }, {
00675     -44,   6, -30,  -8,   9,  10,  11,  14,  23,  -5,
00676       8,  -4,  14, -12,  37,  14,  12,  26,   4,  16,
00677      -8,  16,  -9,   7,  -6,  19,  12,  25,  -5,  24,
00678     -15, -13,  -8, -36, -34, -31,  -1, -18,  -4, -18,
00679     }, {
00680     -22,  -5, -42, -26,   6,  -8,  -1,  -2,   9, -17,
00681      10, -18,  21, -19,  39,  31,  23,  23,  16,  15,
00682      -2,  12,  -7,  -6,  -5,   9,  -1,  10,  -7,  16,
00683      -4,  -9,   0, -10, -17, -22, -16,  -2, -14,  -9,
00684     }, {
00685     -55,  -1, -17,  -6,   1,  16,  15,  35,  15,   2,
00686       0,  -4,  19,   8,  20,  13,   1,  14,  -7,   3,
00687     -18,   0, -10,  -5, -19,  19,   0,  21,  -8,  16,
00688      -9, -39,   0, -36, -10,  -7,   9,  -4,  20,  -5,
00689     }, {
00690     -33, -13, -29, -24,  -1,  -1,   2,  18,   0,  -9,
00691       3, -17,  27,   0,  21,  30,  12,  11,   5,   2,
00692     -12,  -4,  -9, -19, -18,   9, -13,   6, -11,   8,
00693       2, -35,   8, -10,   7,   1,  -4,  11,  10,   2,
00694     }, {
00695     -36,   5, -24,   4,  -7,   7,  -6,  17,  14,   5,
00696      22,  22,  35,   8,  46,   1,  17,   3,   0,  -2,
00697       2,  10,   5,   0,  14,  15,   2,  18,   2,   4,
00698     -11,   7,  -1, -36, -18, -32,  -7, -27, -17, -20,
00699     }, {
00700     -14,  -7, -36, -13, -10, -10, -18,   0,   0,  -5,
00701      25,   8,  43,   0,  48,  18,  27,   0,  12,  -3,
00702       7,   6,   7, -13,  15,   5, -11,   3,   0,  -2,
00703       0,  12,   6, -10,   0, -23, -22, -11, -26, -12,
00704     }, {
00705     -47,  -3, -11,   6, -15,  13,  -2,  38,   6,  13,
00706      15,  22,  40,  28,  28,   0,   5,  -8, -10, -15,
00707      -7,  -7,   4, -13,   1,  14,  -9,  14,   0,  -2,
00708      -4, -18,   7, -36,   6,  -8,   3, -13,   7,  -8,
00709     }, {
00710     -25, -15, -22, -11, -18,  -4, -15,  22,  -8,   2,
00711      17,   9,  48,  20,  30,  17,  16, -11,   1, -16,
00712      -2, -10,   5, -26,   2,   4, -22,   0,  -2, -10,
00713       6, -13,  14, -10,  23,   0, -10,   2,  -1,   0,
00714     }, {
00715     -57,  26, -22,   7,  14,  28,  14,   3,  35,   0,
00716      -3,  -1,  11, -16,  18,  10,   4,  31,  15,  28,
00717      14,  23,   1,  21,  -7,   2, -11,   1,  -3,   1,
00718     -18,  -9, -10, -13, -49, -24,  -8, -14,  -2, -16,
00719     }, {
00720     -35,  14, -34, -10,  10,  10,   1, -12,  20, -12,
00721       0, -15,  18, -24,  20,  27,  14,  28,  27,  27,
00722      20,  19,   2,   8,  -5,  -7, -25, -13,  -5,  -5,
00723      -6,  -5,  -2,  12, -31, -15, -23,   1, -12,  -8,
00724     }, {
00725     -68,  18,  -9,   9,   6,  35,  18,  25,  26,   7,
00726     -10,  -1,  16,   3,   1,   9,  -6,  19,   4,  15,
00727       4,   6,   0,   8, -20,   2, -23,  -2,  -7,  -5,
00728     -12, -35,  -1, -13, -24,   0,   3,   0,  22,  -4,
00729     }, {
00730     -46,   6, -21,  -8,   2,  16,   5,   8,  11,  -4,
00731      -8, -15,  24,  -4,   2,  26,   3,  16,  16,  14,
00732       9,   2,   1,  -4, -19,  -7, -36, -17,  -9, -13,
00733       0, -31,   5,  12,  -7,   8, -11,  15,  13,   4,
00734     }, {
00735     -49,  24, -16,  20,  -2,  26,  -2,   7,  25,  10,
00736      11,  25,  32,   3,  27,  -2,   8,   8,  11,   9,
00737      24,  17,  16,  14,  13,  -2, -20,  -5,   4, -17,
00738     -14,  12,  -3, -13, -33, -25, -14, -23, -15, -19,
00739     }, {
00740     -27,  12, -28,   2,  -6,   7, -15,  -9,  11,  -1,
00741      13,  11,  40,  -4,  29,  14,  19,   5,  23,   8,
00742      30,  13,  17,   0,  14, -12, -34, -20,   2, -25,
00743      -2,  16,   4,  12, -15, -16, -29,  -7, -24, -10,
00744     }, {
00745     -60,  16,  -3,  22, -10,  32,   0,  28,  17,  18,
00746       3,  25,  37,  23,  10,  -3,  -2,  -3,   0,  -3,
00747      14,   0,  14,   1,   0,  -2, -32,  -9,   1, -25,
00748      -7, -13,   5, -13,  -8,  -1,  -2,  -8,  10,  -6,
00749     }, {
00750     -38,   4, -15,   4, -14,  13, -12,  11,   2,   6,
00751       6,  11,  45,  16,  11,  13,   7,  -6,  12,  -4,
00752      20,  -3,  16, -12,   1, -12, -46, -24,   0, -33,
00753       3,  -9,  12,  12,   8,   7, -17,   6,   0,   2
00754     }
00755 };
00756 
00757 const int8_t ff_cb2_vects[128][40]={
00758     {
00759      73, -32, -60, -15, -26,  59,   2, -33,  30, -10,
00760      -3, -17,   8,  30,  -1, -26,  -4, -22,  10,  16,
00761     -36,  -5, -11,  56,  37,   6, -10,  -5, -13,  -3,
00762       6,  -5,  11,   4, -19,  -5, -16,  41,  24,  13,
00763     }, {
00764       4, -11, -37,  23,  -5,  46,  -2, -29,  -5, -39,
00765     -21,  -9,   0,  49,  12,  -9, -16, -26,  22,  15,
00766     -45, -20,  -5,  40,  22,  17, -26,  31, -14,   2,
00767     -14,  10,  30,  20, -27,  -9, -39,  39,  18,   5,
00768     }, {
00769      34, -25, -48, -28, -11,  34,  -2, -41,   9,  -7,
00770     -17,  21,  20,  24, -17, -33,   0, -24,  10,  42,
00771       3,  -5,  10,  42,  11,   8,  -3,   3,  16,   9,
00772      22,  -2,   0, -33, -10,  18,   7,  58,  10,  28,
00773     }, {
00774     -34,  -4, -25,  10,   9,  21,  -7, -36, -26, -36,
00775     -35,  28,  12,  42,  -3, -16, -12, -28,  21,  42,
00776      -5, -21,  16,  26,  -4,  19, -19,  39,  15,  15,
00777       1,  13,  19, -17, -17,  14, -15,  55,   4,  19,
00778     }, {
00779      28, -20, -51, -14,  -6,   7,   0, -26,  27,  -4,
00780      18, -40,  -6,  16,  -1, -15,   0, -55,  -5, -16,
00781     -19,  14,  -3,  49,  14,   1, -22, -30, -12,   0,
00782      24,  15,   9, -17, -45, -29,   4,  28,  51,  35,
00783     }, {
00784     -40,   0, -28,  24,  14,  -5,  -4, -21,  -7, -33,
00785       0, -32, -15,  35,  12,   1, -11, -58,   5, -16,
00786     -28,   0,   1,  33,   0,  11, -39,   5, -14,   6,
00787       3,  31,  28,  -1, -53, -33, -19,  25,  46,  26,
00788     }, {
00789     -11, -14, -39, -27,   9, -17,  -4, -33,   6,   0,
00790       4,  -1,   5,  10, -17, -22,   5, -57,  -5,   9,
00791      20,  13,  18,  35, -11,   3, -16, -22,  17,  13,
00792      40,  19,  -1, -55, -35,  -5,  27,  44,  37,  49,
00793     }, {
00794     -80,   6, -16,  11,  30, -30,  -9, -28, -28, -29,
00795     -13,   6,  -2,  28,  -3,  -5,  -7, -60,   5,   9,
00796      11,  -1,  24,  19, -27,  13, -32,  13,  15,  19,
00797      19,  35,  17, -39, -43,  -9,   4,  42,  32,  41,
00798     }, {
00799      78, -21, -43,   4, -38,  17,  17,  -5,  55,  24,
00800     -15, -36,  14,   4,  24, -24,  12,   5,  17,  31,
00801     -54,  -5,  -2,  27,  43, -12,   2,   9,  -9, -15,
00802      22,  -3,  28,  21, -20,   3,  20,  28,   9,  -5,
00803     }, {
00804       9,  -1, -20,  43, -17,   3,  12,   0,  20,  -4,
00805     -33, -29,   6,  22,  38,  -7,   0,   1,  29,  30,
00806     -63, -21,   3,  11,  27,  -1, -14,  45, -10,  -9,
00807       1,  12,  47,  37, -28,   0,  -2,  26,   4, -13,
00808     }, {
00809      39, -14, -30,  -8, -22,  -8,  12, -12,  34,  27,
00810     -29,   2,  26,  -2,   8, -31,  16,   3,  17,  57,
00811     -14,  -6,  19,  13,  16, -10,   8,  17,  20,  -2,
00812      38,   0,  17, -16, -11,  27,  44,  45,  -4,   8,
00813     }, {
00814     -29,   5,  -7,  30,  -1, -21,   7,  -7,   0,   0,
00815     -47,   9,  18,  15,  22, -14,   4,   0,  28,  57,
00816     -23, -21,  25,  -2,   1,   0,  -7,  53,  19,   3,
00817      17,  15,  36,   0, -19,  24,  21,  43,  -9,   0,
00818     }, {
00819      33, -10, -34,   5, -17, -35,  15,   1,  53,  30,
00820       6, -59,   0, -10,  24, -13,  17, -27,   1,  -1,
00821     -37,  13,   4,  20,  20, -18, -10, -16,  -8, -11,
00822      39,  18,  26,   0, -46, -20,  41,  15,  37,  15,
00823     }, {
00824     -35,  10, -11,  44,   3, -48,  10,   6,  17,   2,
00825     -11, -51,  -8,   8,  38,   3,   4, -31,  12,  -2,
00826     -46,  -1,  10,   4,   5,  -7, -26,  19, -10,  -5,
00827      18,  34,  45,  15, -54, -24,  18,  13,  31,   7,
00828     }, {
00829      -5,  -3, -21,  -7,  -2, -60,  10,  -5,  32,  34,
00830      -7, -20,  11, -16,   8, -20,  21, -29,   1,  24,
00831       2,  13,  27,   6,  -5, -15,  -3,  -8,  21,   1,
00832      55,  21,  15, -38, -37,   3,  65,  32,  23,  30,
00833     }, {
00834     -74,  17,   0,  31,  18, -73,   5,   0,  -3,   5,
00835     -25, -12,   3,   1,  22,  -3,   9, -33,  12,  24,
00836      -6,  -2,  33,  -9, -21,  -5, -20,  27,  19,   7,
00837      34,  37,  34, -22, -44,   0,  41,  29,  17,  21,
00838     }, {
00839      76, -35, -31, -28, -49,  43, -40,   0,  29, -14,
00840       8,   5,  10,  18, -26, -46,   0,   7,   6,   3,
00841     -25,  -7,  -2,  40,  28,  14,  18,  -3, -27, -28,
00842      -8, -45, -13,  34, -13, -27, -15,  31,  12,   3,
00843     }, {
00844       7, -15,  -9,   9, -28,  29, -45,   5,  -6, -43,
00845      -9,  12,   2,  36, -12, -30, -11,   3,  17,   3,
00846     -34, -22,   3,  24,  12,  24,   2,  32, -28, -22,
00847     -29, -29,   5,  50, -21, -31, -38,  29,   7,  -5,
00848     }, {
00849      36, -29, -19, -41, -34,  18, -45,  -6,   8, -10,
00850      -5,  43,  23,  11, -42, -53,   5,   5,   6,  30,
00851      14,  -8,  20,  26,   1,  16,  25,   4,   3, -15,
00852       7, -41, -23,  -3,  -4,  -3,   8,  48,  -1,  17,
00853     }, {
00854     -32,  -8,   3,  -2, -13,   4, -50,  -1, -27, -39,
00855     -23,  51,  15,  30, -27, -37,  -7,   1,  17,  29,
00856       5, -23,  25,  10, -14,  26,   8,  41,   1,  -9,
00857     -13, -26,  -5,  12, -12,  -7, -14,  45,  -6,   9,
00858     }, {
00859      31, -24, -23, -27, -29,  -9, -43,   8,  26,  -7,
00860      30, -17,  -4,   3, -26, -35,   5, -24, -10, -28,
00861      -9,  12,   5,  33,   5,   8,   5, -29, -26, -24,
00862       9, -23, -14,  12, -39, -52,   5,  18,  39,  24,
00863     }, {
00864     -37,  -3,   0,  10,  -7, -22, -48,  12,  -8, -36,
00865      12,  -9, -12,  22, -12, -19,  -6, -28,   0, -29,
00866     -18,  -3,  11,  17, -10,  18, -10,   7, -27, -18,
00867     -11,  -7,   3,  28, -47, -55, -18,  15,  34,  16,
00868     }, {
00869      -8, -17, -10, -40, -13, -34, -47,   0,   5,  -4,
00870      16,  21,   8,  -2, -42, -43,  10, -26, -10,  -2,
00871      31,  11,  27,  19, -21,  10,  12, -20,   3, -11,
00872      25, -20, -25, -25, -29, -28,  28,  34,  25,  38,
00873     }, {
00874     -77,   2,  11,  -1,   7, -47, -52,   5, -29, -33,
00875      -1,  28,   0,  15, -28, -26,  -2, -30,   0,  -2,
00876      22,  -4,  33,   3, -36,  21,  -3,  15,   2,  -5,
00877       4,  -4,  -6,  -9, -37, -31,   5,  32,  20,  30,
00878     }, {
00879      81, -25, -14,  -8, -61,   0, -25,  28,  54,  20,
00880      -3, -14,  17,  -8,   0, -44,  16,  35,  13,  18,
00881     -43,  -7,   6,  11,  33,  -4,  30,  11, -22, -40,
00882       6, -43,   3,  50, -14, -18,  22,  18,  -1, -16,
00883     }, {
00884      12,  -4,   8,  29, -39, -12, -30,  33,  19,  -8,
00885     -21,  -6,   8,   9,  13, -28,   4,  31,  24,  18,
00886     -52, -23,  12,  -4,  18,   5,  14,  47, -24, -34,
00887     -14, -27,  22,  66, -22, -22,  -1,  16,  -6, -24,
00888     }, {
00889      41, -18,  -2, -21, -45, -24, -30,  21,  33,  24,
00890     -17,  24,  29, -15, -16, -51,  21,  33,  13,  45,
00891      -3,  -8,  28,  -2,   7,  -2,  37,  19,   7, -27,
00892      22, -39,  -7,  12,  -5,   5,  45,  35, -15,  -1,
00893     }, {
00894     -27,   1,  20,  17, -24, -38, -35,  26,  -1,  -4,
00895     -35,  32,  21,   3,  -2, -35,   8,  29,  24,  44,
00896     -12, -24,  34, -18,  -8,   7,  21,  55,   5, -21,
00897       2, -23,  11,  28, -13,   1,  22,  33, -21, -10,
00898     }, {
00899      36, -13,  -5,  -7, -40, -51, -28,  36,  52,  27,
00900      18, -36,   2, -22,   0, -33,  21,   2,  -3, -13,
00901     -26,  11,  14,   4,  10, -10,  18, -14, -22, -36,
00902      24, -21,   1,  28, -40, -42,  42,   5,  25,   5,
00903     }, {
00904     -32,   6,  17,  31, -19, -65, -33,  41,  16,  -1,
00905       0, -29,  -6,  -4,  13, -17,   9,  -1,   8, -14,
00906     -35,  -3,  19, -11,  -4,   0,   1,  21, -23, -30,
00907       3,  -5,  20,  44, -48, -46,  19,   3,  20,  -3,
00908     }, {
00909      -3,  -7,   6, -20, -25, -77, -32,  29,  31,  30,
00910       4,   2,  14, -29, -16, -40,  26,   0,  -3,  12,
00911      13,  10,  36,  -9, -15,  -8,  24,  -6,   7, -22,
00912      40, -17,  -8,  -9, -31, -18,  66,  22,  11,  19,
00913     }, {
00914     -72,  13,  29,  18,  -4, -90, -37,  34,  -4,   1,
00915     -13,   9,   6, -11,  -2, -24,  13,  -3,   7,  11,
00916       4,  -4,  42, -25, -31,   1,   8,  29,   6, -17,
00917      19,  -2,  10,   6, -38, -22,  42,  19,   6,  11,
00918     }, {
00919     116, -20, -68, -30, -28,  83,  28, -18,  32, -22,
00920     -13, -21,   5,  28,   5,  -7, -24,  -8, -22,  17,
00921     -23,  30, -25,  45,  15,  -9, -11, -18,  22, -10,
00922       4,  -2,  19, -12,  23,   3, -43,   2,  12,  -4,
00923     }, {
00924      47,   0, -45,   7,  -7,  69,  23, -13,  -2, -51,
00925     -32, -14,  -3,  47,  19,   8, -37, -11, -10,  16,
00926     -32,  15, -19,  29,   0,   1, -28,  18,  20,  -4,
00927     -16,  13,  38,   3,  15,   0, -66,   0,   7, -13,
00928     }, {
00929      77, -13, -56, -43, -13,  57,  23, -26,  11, -19,
00930     -27,  16,  17,  22, -10, -15, -19, -10, -22,  43,
00931      16,  30,  -2,  31, -11,  -6,  -5,  -9,  52,   2,
00932      20,   0,   8, -50,  33,  27, -19,  19,  -1,   9,
00933     }, {
00934       8,   6, -33,  -4,   7,  44,  18, -21, -23, -48,
00935     -46,  24,   9,  40,   3,   1, -32, -13, -11,  43,
00936       7,  14,   3,  15, -26,   3, -21,  26,  50,   8,
00937       0,  16,  27, -34,  25,  23, -43,  17,  -6,   1,
00938     }, {
00939      71,  -9, -59, -29,  -8,  30,  26, -11,  30, -16,
00940       8, -44,  -9,  14,   5,   2, -19, -40, -38, -15,
00941      -7,  50, -17,  38,  -7, -14, -24, -43,  22,  -6,
00942      22,  19,  17, -34,  -2, -20, -23, -10,  39,  16,
00943     }, {
00944       2,  11, -36,   9,  13,  17,  21,  -6,  -5, -45,
00945     -10, -36, -18,  33,  19,  19, -31, -44, -27, -15,
00946     -16,  34, -11,  22, -22,  -4, -40,  -7,  21,   0,
00947       1,  35,  36, -18, -10, -24, -46, -12,  34,   8,
00948     }, {
00949      32,  -2, -47, -42,   7,   5,  21, -18,   9, -12,
00950      -5,  -5,   2,   8, -10,  -4, -14, -42, -38,  10,
00951      33,  49,   5,  24, -33, -12, -17, -35,  52,   6,
00952      38,  22,   7, -72,   7,   3,   0,   6,  25,  30,
00953     }, {
00954     -36,  18, -24,  -3,  28,  -7,  16, -13, -26, -41,
00955     -24,   1,  -5,  26,   3,  12, -27, -46, -27,  10,
00956      24,  34,  10,   8, -49,  -2, -34,   0,  51,  12,
00957      17,  38,  25, -56,   0,   0, -22,   3,  20,  22,
00958     }, {
00959     121,  -9, -50, -10, -40,  40,  43,   9,  58,  12,
00960     -25, -41,  11,   2,  31,  -5,  -8,  19, -15,  32,
00961     -41,  30, -16,  16,  20, -28,   0,  -3,  26, -22,
00962      19,   0,  36,   4,  22,  12,  -6,  -9,  -1, -24,
00963     }, {
00964      52,  10, -27,  27, -18,  26,  38,  14,  23, -16,
00965     -44, -33,   3,  20,  45,  10, -20,  15,  -3,  31,
00966     -50,  14, -10,   0,   5, -17, -15,  32,  24, -16,
00967      -1,  15,  55,  20,  14,   8, -29, -12,  -7, -32,
00968     }, {
00969      82,  -3, -38, -23, -24,  15,  38,   2,  37,  15,
00970     -39,  -2,  23,  -4,  15, -12,  -3,  17, -15,  58,
00971      -1,  29,   6,   2,  -5, -26,   7,   4,  56,  -9,
00972      35,   3,  25, -33,  32,  36,  17,   7, -15,  -9,
00973     }, {
00974      13,  17, -15,  15,  -3,   1,  33,   7,   1, -12,
00975     -58,   5,  15,  13,  29,   3, -16,  13,  -4,  57,
00976     -10,  13,  11, -13, -21, -15,  -9,  40,  55,  -3,
00977      14,  19,  44, -17,  24,  32,  -5,   4, -21, -18,
00978     }, {
00979      76,   1, -41,  -9, -19, -12,  41,  17,  55,  18,
00980      -3, -63,  -3, -12,  30,   5,  -3, -12, -31,   0,
00981     -24,  49,  -8,   9,  -1, -33, -12, -29,  27, -18,
00982      37,  21,  34, -17,  -3, -11,  14, -23,  25,  -2,
00983     }, {
00984       7,  22, -18,  29,   1, -25,  36,  21,  20,  -9,
00985     -22, -56, -11,   6,  45,  21, -15, -16, -20,  -1,
00986     -33,  34,  -2,  -6, -17, -23, -28,   6,  25, -12,
00987      16,  37,  53,  -1, -11, -15,  -8, -25,  20, -11,
00988     }, {
00989      37,   8, -29, -22,  -4, -37,  36,   9,  34,  22,
00990     -17, -24,   8, -18,  15,  -2,   1, -14, -31,  25,
00991      15,  48,  13,  -4, -28, -31,  -5, -21,  57,  -4,
00992      53,  24,  23, -55,   6,  12,  37,  -6,  11,  11,
00993     }, {
00994     -31,  28,  -6,  16,  16, -50,  31,  14,   0,  -6,
00995     -36, -17,   0,   0,  29,  14, -11, -18, -20,  25,
00996       6,  33,  19, -20, -43, -21, -21,  14,  55,   0,
00997      32,  40,  42, -39,  -1,   8,  14,  -8,   6,   3,
00998     }, {
00999     119, -24, -39, -44, -51,  66, -14,  15,  31, -26,
01000      -1,   0,   7,  16, -19, -28, -19,  22, -26,   4,
01001     -13,  28, -16,  29,   5,  -1,  16, -16,   8, -35,
01002     -10, -42,  -4,  17,  29, -19, -42,  -7,   0, -15,
01003     }, {
01004      50,  -3, -16,  -5, -30,  53, -19,  20,  -3, -55,
01005     -19,   8,   0,  34,  -5, -11, -32,  18, -15,   4,
01006     -22,  13, -10,  13,  -9,   8,   0,  19,   7, -29,
01007     -31, -26,  13,  33,  21, -22, -65,  -9,  -4, -23,
01008     }, {
01009      79, -17, -27, -56, -36,  41, -19,   8,  10, -22,
01010     -15,  39,  20,   9, -35, -35, -15,  20, -26,  31,
01011      26,  27,   6,  15, -20,   0,  23,  -8,  38, -22,
01012       5, -38, -15, -20,  39,   4, -18,   9, -13,  -1,
01013     }, {
01014      10,   3,  -4, -18, -15,  27, -24,  13, -24, -51,
01015     -34,  47,  12,  28, -21, -19, -27,  16, -15,  30,
01016      17,  12,  12,   0, -36,  10,   7,  27,  37, -16,
01017     -15, -22,   3,  -4,  31,   1, -42,   7, -18,  -9,
01018     }, {
01019      74, -12, -30, -42, -30,  14, -16,  23,  29, -19,
01020      20, -21,  -7,   1, -19, -17, -14, -10, -43, -27,
01021       3,  48,  -8,  22, -16,  -7,   4, -42,   9, -31,
01022       6, -20,  -6,  -4,   3, -43, -22, -20,  28,   5,
01023     }, {
01024       5,   7,  -7,  -4,  -9,   0, -21,  28,  -6, -48,
01025       2, -14, -15,  20,  -5,   0, -27, -14, -32, -28,
01026      -5,  32,  -2,   6, -32,   3, -12,  -5,   8, -25,
01027     -14,  -4,  12,  11,  -4, -47, -45, -22,  22,  -2,
01028     }, {
01029      34,  -6, -18, -55, -15, -11, -21,  16,   8, -16,
01030       6,  16,   5,  -4, -35, -24, -10, -12, -43,  -1,
01031      43,  47,  14,   8, -43,  -5,  10, -34,  39, -18,
01032      22, -16, -17, -42,  13, -19,   1,  -3,  14,  20,
01033     }, {
01034     -34,  14,   4, -17,   5, -24, -26,  20, -27, -45,
01035     -12,  24,  -2,  13, -21,  -8, -22, -16, -32,  -2,
01036      34,  31,  20,  -7, -58,   5,  -5,   2,  38, -12,
01037       2,  -1,   1, -26,   5, -23, -21,  -6,   8,  11,
01038     }, {
01039     124, -13, -21, -23, -62,  23,   0,  43,  57,   8,
01040     -13, -18,  14, -10,   6, -26,  -3,  49, -19,  19,
01041     -31,  27,  -7,   0,  11, -20,  29,  -1,  12, -47,
01042       4, -39,  11,  34,  28,  -9,  -5, -19, -13, -34,
01043     }, {
01044      55,   6,   1,  14, -41,  10,  -4,  48,  22, -20,
01045     -31, -10,   5,   7,  20,  -9, -16,  45,  -8,  19,
01046     -40,  12,  -1, -15,  -4, -10,  12,  34,  11, -41,
01047     -16, -24,  30,  49,  20, -13, -28, -22, -18, -43,
01048     }, {
01049      84,  -6,  -9, -36, -47,  -1,  -4,  36,  36,  12,
01050     -27,  20,  26, -17,  -9, -33,   1,  47, -19,  46,
01051       9,  27,  15, -13, -15, -18,  35,   6,  42, -33,
01052      20, -36,   1,  -4,  38,  14,  18,  -2, -27, -20,
01053     }, {
01054      15,  13,  13,   1, -26, -14,  -9,  41,   1, -16,
01055     -46,  27,  18,   1,   4, -16, -11,  43,  -8,  45,
01056       0,  11,  21, -29, -30,  -8,  19,  42,  41, -28,
01057       0, -20,  20,  11,  30,  10,  -4,  -5, -32, -28,
01058     }, {
01059      79,  -2, -12, -22, -42, -28,  -1,  51,  54,  15,
01060       8, -41,   0, -24,   6, -15,   1,  17, -36, -12,
01061     -14,  47,   0,  -6, -11, -26,  16, -27,  13, -43,
01062      22, -18,  10,  12,   2, -34,  15, -33,  13, -13,
01063     }, {
01064      10,  18,  10,  15, -21, -41,  -6,  56,  19, -13,
01065      -9, -33,  -9,  -6,  20,   1, -11,  13, -24, -13,
01066     -23,  32,   6, -22, -26, -15,   0,   8,  12, -37,
01067       1,  -2,  28,  27,  -5, -37,  -7, -35,   8, -21,
01068     }, {
01069      39,   4,   0, -35, -27, -53,  -6,  44,  33,  18,
01070      -5,  -2,  11, -31,  -9, -22,   6,  15, -36,  13,
01071      25,  46,  23, -20, -37, -24,  23, -19,  43, -29,
01072      38, -14,   0, -26,  12, -10,  38, -16,   0,   0,
01073     }, {
01074     -29,  25,  22,   2,  -6, -67, -11,  49,  -1, -10,
01075     -24,   5,   3, -13,   4,  -5,  -6,  11, -25,  12,
01076      16,  31,  28, -36, -53, -13,   6,  16,  42, -24,
01077      17,   1,  18, -10,   4, -13,  15, -18,  -5,  -7,
01078     }, {
01079      29, -25, -22,  -2,   6,  67,  11, -49,   1,  10,
01080      24,  -5,  -3,  13,  -4,   5,   6, -11,  25, -12,
01081     -16, -31, -28,  36,  53,  13,  -6, -16, -42,  24,
01082     -17,  -1, -18,  10,  -4,  13, -15,  18,   5,   7,
01083     }, {
01084     -39,  -4,   0,  35,  27,  53,   6, -44, -33, -18,
01085       5,   2, -11,  31,   9,  22,  -6, -15,  36, -13,
01086     -25, -46, -23,  20,  37,  24, -23,  19, -43,  29,
01087     -38,  14,   0,  26, -12,  10, -38,  16,   0,   0,
01088     }, {
01089     -10, -18, -10, -15,  21,  41,   6, -56, -19,  13,
01090       9,  33,   9,   6, -20,  -1,  11, -13,  24,  13,
01091      23, -32,  -6,  22,  26,  15,   0,  -8, -12,  37,
01092      -1,   2, -28, -27,   5,  37,   7,  35,  -8,  21,
01093     }, {
01094     -79,   2,  12,  22,  42,  28,   1, -51, -54, -15,
01095      -8,  41,   0,  24,  -6,  15,  -1, -17,  36,  12,
01096      14, -47,   0,   6,  11,  26, -16,  27, -13,  43,
01097     -22,  18, -10, -12,  -2,  34, -15,  33, -13,  13,
01098     }, {
01099     -15, -13, -13,  -1,  26,  14,   9, -41,  -1,  16,
01100      46, -27, -18,  -1,  -4,  16,  11, -43,   8, -45,
01101       0, -11, -21,  29,  30,   8, -19, -42, -41,  28,
01102       0,  20, -20, -11, -30, -10,   4,   5,  32,  28,
01103     }, {
01104     -84,   6,   9,  36,  47,   1,   4, -36, -36, -12,
01105      27, -20, -26,  17,   9,  33,  -1, -47,  19, -46,
01106      -9, -27, -15,  13,  15,  18, -35,  -6, -42,  33,
01107     -20,  36,  -1,   4, -38, -14, -18,   2,  27,  20,
01108     }, {
01109     -55,  -6,  -1, -14,  41, -10,   4, -48, -22,  20,
01110      31,  10,  -5,  -7, -20,   9,  16, -45,   8, -19,
01111      40, -12,   1,  15,   4,  10, -12, -34, -11,  41,
01112      16,  24, -30, -49, -20,  13,  28,  22,  18,  43,
01113     }, {
01114    -124,  13,  21,  23,  62, -23,   0, -43, -57,  -8,
01115      13,  18, -14,  10,  -6,  26,   3, -49,  19, -19,
01116      31, -27,   7,   0, -11,  20, -29,   1, -12,  47,
01117      -4,  39, -11, -34, -28,   9,   5,  19,  13,  34,
01118     }, {
01119      34, -14,  -4,  17,  -5,  24,  26, -20,  27,  45,
01120      12, -24,   2, -13,  21,   8,  22,  16,  32,   2,
01121     -34, -31, -20,   7,  58,  -5,   5,  -2, -38,  12,
01122      -2,   1,  -1,  26,  -5,  23,  21,   6,  -8, -11,
01123     }, {
01124     -34,   6,  18,  55,  15,  11,  21, -16,  -8,  16,
01125      -6, -16,  -5,   4,  35,  24,  10,  12,  43,   1,
01126     -43, -47, -14,  -8,  43,   5, -10,  34, -39,  18,
01127     -22,  16,  17,  42, -13,  19,  -1,   3, -14, -20,
01128     }, {
01129      -5,  -7,   7,   4,   9,   0,  21, -28,   6,  48,
01130      -2,  14,  15, -20,   5,   0,  27,  14,  32,  28,
01131       5, -32,   2,  -6,  32,  -3,  12,   5,  -8,  25,
01132      14,   4, -12, -11,   4,  47,  45,  22, -22,   2,
01133     }, {
01134     -74,  12,  30,  42,  30, -14,  16, -23, -29,  19,
01135     -20,  21,   7,  -1,  19,  17,  14,  10,  43,  27,
01136      -3, -48,   8, -22,  16,   7,  -4,  42,  -9,  31,
01137      -6,  20,   6,   4,  -3,  43,  22,  20, -28,  -5,
01138     }, {
01139     -10,  -3,   4,  18,  15, -27,  24, -13,  24,  51,
01140      34, -47, -12, -28,  21,  19,  27, -16,  15, -30,
01141     -17, -12, -12,   0,  36, -10,  -7, -27, -37,  16,
01142      15,  22,  -3,   4, -31,  -1,  42,  -7,  18,   9,
01143     }, {
01144     -79,  17,  27,  56,  36, -41,  19,  -8, -10,  22,
01145      15, -39, -20,  -9,  35,  35,  15, -20,  26, -31,
01146     -26, -27,  -6, -15,  20,   0, -23,   8, -38,  22,
01147      -5,  38,  15,  20, -39,  -4,  18,  -9,  13,   1,
01148     }, {
01149     -50,   3,  16,   5,  30, -53,  19, -20,   3,  55,
01150      19,  -8,   0, -34,   5,  11,  32, -18,  15,  -4,
01151      22, -13,  10, -13,   9,  -8,   0, -19,  -7,  29,
01152      31,  26, -13, -33, -21,  22,  65,   9,   4,  23,
01153     }, {
01154    -119,  24,  39,  44,  51, -66,  14, -15, -31,  26,
01155       1,   0,  -7, -16,  19,  28,  19, -22,  26,  -4,
01156      13, -28,  16, -29,  -5,   1, -16,  16,  -8,  35,
01157      10,  42,   4, -17, -29,  19,  42,   7,   0,  15,
01158     }, {
01159      31, -28,   6, -16, -16,  50, -31, -14,   0,   6,
01160      36,  17,   0,   0, -29, -14,  11,  18,  20, -25,
01161      -6, -33, -19,  20,  43,  21,  21, -14, -55,   0,
01162     -32, -40, -42,  39,   1,  -8, -14,   8,  -6,  -3,
01163     }, {
01164     -37,  -8,  29,  22,   4,  37, -36,  -9, -34, -22,
01165      17,  24,  -8,  18, -15,   2,  -1,  14,  31, -25,
01166     -15, -48, -13,   4,  28,  31,   5,  21, -57,   4,
01167     -53, -24, -23,  55,  -6, -12, -37,   6, -11, -11,
01168     }, {
01169      -7, -22,  18, -29,  -1,  25, -36, -21, -20,   9,
01170      22,  56,  11,  -6, -45, -21,  15,  16,  20,   1,
01171      33, -34,   2,   6,  17,  23,  28,  -6, -25,  12,
01172     -16, -37, -53,   1,  11,  15,   8,  25, -20,  11,
01173     }, {
01174     -76,  -1,  41,   9,  19,  12, -41, -17, -55, -18,
01175       3,  63,   3,  12, -30,  -5,   3,  12,  31,   0,
01176      24, -49,   8,  -9,   1,  33,  12,  29, -27,  18,
01177     -37, -21, -34,  17,   3,  11, -14,  23, -25,   2,
01178     }, {
01179     -13, -17,  15, -15,   3,  -1, -33,  -7,  -1,  12,
01180      58,  -5, -15, -13, -29,  -3,  16, -13,   4, -57,
01181      10, -13, -11,  13,  21,  15,   9, -40, -55,   3,
01182     -14, -19, -44,  17, -24, -32,   5,  -4,  21,  18,
01183     }, {
01184     -82,   3,  38,  23,  24, -15, -38,  -2, -37, -15,
01185      39,   2, -23,   4, -15,  12,   3, -17,  15, -58,
01186       1, -29,  -6,  -2,   5,  26,  -7,  -4, -56,   9,
01187     -35,  -3, -25,  33, -32, -36, -17,  -7,  15,   9,
01188     }, {
01189     -52, -10,  27, -27,  18, -26, -38, -14, -23,  16,
01190      44,  33,  -3, -20, -45, -10,  20, -15,   3, -31,
01191      50, -14,  10,   0,  -5,  17,  15, -32, -24,  16,
01192       1, -15, -55, -20, -14,  -8,  29,  12,   7,  32,
01193     }, {
01194    -121,   9,  50,  10,  40, -40, -43,  -9, -58, -12,
01195      25,  41, -11,  -2, -31,   5,   8, -19,  15, -32,
01196      41, -30,  16, -16, -20,  28,   0,   3, -26,  22,
01197     -19,   0, -36,  -4, -22, -12,   6,   9,   1,  24,
01198     }, {
01199      36, -18,  24,   3, -28,   7, -16,  13,  26,  41,
01200      24,  -1,   5, -26,  -3, -12,  27,  46,  27, -10,
01201     -24, -34, -10,  -8,  49,   2,  34,   0, -51, -12,
01202     -17, -38, -25,  56,   0,   0,  22,  -3, -20, -22,
01203     }, {
01204     -32,   2,  47,  42,  -7,  -5, -21,  18,  -9,  12,
01205       5,   5,  -2,  -8,  10,   4,  14,  42,  38, -10,
01206     -33, -49,  -5, -24,  33,  12,  17,  35, -52,  -6,
01207     -38, -22,  -7,  72,  -7,  -3,   0,  -6, -25, -30,
01208     }, {
01209      -2, -11,  36,  -9, -13, -17, -21,   6,   5,  45,
01210      10,  36,  18, -33, -19, -19,  31,  44,  27,  15,
01211      16, -34,  11, -22,  22,   4,  40,   7, -21,   0,
01212      -1, -35, -36,  18,  10,  24,  46,  12, -34,  -8,
01213     }, {
01214     -71,   9,  59,  29,   8, -30, -26,  11, -30,  16,
01215      -8,  44,   9, -14,  -5,  -2,  19,  40,  38,  15,
01216       7, -50,  17, -38,   7,  14,  24,  43, -22,   6,
01217     -22, -19, -17,  34,   2,  20,  23,  10, -39, -16,
01218     }, {
01219      -8,  -6,  33,   4,  -7, -44, -18,  21,  23,  48,
01220      46, -24,  -9, -40,  -3,  -1,  32,  13,  11, -43,
01221      -7, -14,  -3, -15,  26,  -3,  21, -26, -50,  -8,
01222       0, -16, -27,  34, -25, -23,  43, -17,   6,  -1,
01223     }, {
01224     -77,  13,  56,  43,  13, -57, -23,  26, -11,  19,
01225      27, -16, -17, -22,  10,  15,  19,  10,  22, -43,
01226     -16, -30,   2, -31,  11,   6,   5,   9, -52,  -2,
01227     -20,   0,  -8,  50, -33, -27,  19, -19,   1,  -9,
01228     }, {
01229     -47,   0,  45,  -7,   7, -69, -23,  13,   2,  51,
01230      32,  14,   3, -47, -19,  -8,  37,  11,  10, -16,
01231      32, -15,  19, -29,   0,  -1,  28, -18, -20,   4,
01232      16, -13, -38,  -3, -15,   0,  66,   0,  -7,  13,
01233     }, {
01234    -116,  20,  68,  30,  28, -83, -28,  18, -32,  22,
01235      13,  21,  -5, -28,  -5,   7,  24,   8,  22, -17,
01236      23, -30,  25, -45, -15,   9,  11,  18, -22,  10,
01237      -4,   2, -19,  12, -23,  -3,  43,  -2, -12,   4,
01238     }, {
01239      72, -13, -29, -18,   4,  90,  37, -34,   4,  -1,
01240      13,  -9,  -6,  11,   2,  24, -13,   3,  -7, -11,
01241      -4,   4, -42,  25,  31,  -1,  -8, -29,  -6,  17,
01242     -19,   2, -10,  -6,  38,  22, -42, -19,  -6, -11,
01243     }, {
01244       3,   7,  -6,  20,  25,  77,  32, -29, -31, -30,
01245      -4,  -2, -14,  29,  16,  40, -26,   0,   3, -12,
01246     -13, -10, -36,   9,  15,   8, -24,   6,  -7,  22,
01247     -40,  17,   8,   9,  31,  18, -66, -22, -11, -19,
01248     }, {
01249      32,  -6, -17, -31,  19,  65,  33, -41, -16,   1,
01250       0,  29,   6,   4, -13,  17,  -9,   1,  -8,  14,
01251      35,   3, -19,  11,   4,   0,  -1, -21,  23,  30,
01252      -3,   5, -20, -44,  48,  46, -19,  -3, -20,   3,
01253     }, {
01254     -36,  13,   5,   7,  40,  51,  28, -36, -52, -27,
01255     -18,  36,  -2,  22,   0,  33, -21,  -2,   3,  13,
01256      26, -11, -14,  -4, -10,  10, -18,  14,  22,  36,
01257     -24,  21,  -1, -28,  40,  42, -42,  -5, -25,  -5,
01258     }, {
01259      27,  -1, -20, -17,  24,  38,  35, -26,   1,   4,
01260      35, -32, -21,  -3,   2,  35,  -8, -29, -24, -44,
01261      12,  24, -34,  18,   8,  -7, -21, -55,  -5,  21,
01262      -2,  23, -11, -28,  13,  -1, -22, -33,  21,  10,
01263     }, {
01264     -41,  18,   2,  21,  45,  24,  30, -21, -33, -24,
01265      17, -24, -29,  15,  16,  51, -21, -33, -13, -45,
01266       3,   8, -28,   2,  -7,   2, -37, -19,  -7,  27,
01267     -22,  39,   7, -12,   5,  -5, -45, -35,  15,   1,
01268     }, {
01269     -12,   4,  -8, -29,  39,  12,  30, -33, -19,   8,
01270      21,   6,  -8,  -9, -13,  28,  -4, -31, -24, -18,
01271      52,  23, -12,   4, -18,  -5, -14, -47,  24,  34,
01272      14,  27, -22, -66,  22,  22,   1, -16,   6,  24,
01273     }, {
01274     -81,  25,  14,   8,  61,   0,  25, -28, -54, -20,
01275       3,  14, -17,   8,   0,  44, -16, -35, -13, -18,
01276      43,   7,  -6, -11, -33,   4, -30, -11,  22,  40,
01277      -6,  43,  -3, -50,  14,  18, -22, -18,   1,  16,
01278     }, {
01279      77,  -2, -11,   1,  -7,  47,  52,  -5,  29,  33,
01280       1, -28,   0, -15,  28,  26,   2,  30,   0,   2,
01281     -22,   4, -33,  -3,  36, -21,   3, -15,  -2,   5,
01282      -4,   4,   6,   9,  37,  31,  -5, -32, -20, -30,
01283     }, {
01284       8,  17,  10,  40,  13,  34,  47,   0,  -5,   4,
01285     -16, -21,  -8,   2,  42,  43, -10,  26,  10,   2,
01286     -31, -11, -27, -19,  21, -10, -12,  20,  -3,  11,
01287     -25,  20,  25,  25,  29,  28, -28, -34, -25, -38,
01288     }, {
01289      37,   3,   0, -10,   7,  22,  48, -12,   8,  36,
01290     -12,   9,  12, -22,  12,  19,   6,  28,   0,  29,
01291      18,   3, -11, -17,  10, -18,  10,  -7,  27,  18,
01292      11,   7,  -3, -28,  47,  55,  18, -15, -34, -16,
01293     }, {
01294     -31,  24,  23,  27,  29,   9,  43,  -8, -26,   7,
01295     -30,  17,   4,  -3,  26,  35,  -5,  24,  10,  28,
01296       9, -12,  -5, -33,  -5,  -8,  -5,  29,  26,  24,
01297      -9,  23,  14, -12,  39,  52,  -5, -18, -39, -24,
01298     }, {
01299      32,   8,  -3,   2,  13,  -4,  50,   1,  27,  39,
01300      23, -51, -15, -30,  27,  37,   7,  -1, -17, -29,
01301      -5,  23, -25, -10,  14, -26,  -8, -41,  -1,   9,
01302      13,  26,   5, -12,  12,   7,  14, -45,   6,  -9,
01303     }, {
01304     -36,  29,  19,  41,  34, -18,  45,   6,  -8,  10,
01305       5, -43, -23, -11,  42,  53,  -5,  -5,  -6, -30,
01306     -14,   8, -20, -26,  -1, -16, -25,  -4,  -3,  15,
01307      -7,  41,  23,   3,   4,   3,  -8, -48,   1, -17,
01308     }, {
01309      -7,  15,   9,  -9,  28, -29,  45,  -5,   6,  43,
01310       9, -12,  -2, -36,  12,  30,  11,  -3, -17,  -3,
01311      34,  22,  -3, -24, -12, -24,  -2, -32,  28,  22,
01312      29,  29,  -5, -50,  21,  31,  38, -29,  -7,   5,
01313     }, {
01314     -76,  35,  31,  28,  49, -43,  40,   0, -29,  14,
01315      -8,  -5, -10, -18,  26,  46,   0,  -7,  -6,  -3,
01316      25,   7,   2, -40, -28, -14, -18,   3,  27,  28,
01317       8,  45,  13, -34,  13,  27,  15, -31, -12,  -3,
01318     }, {
01319      74, -17,   0, -31, -18,  73,  -5,   0,   3,  -5,
01320      25,  12,  -3,  -1, -22,   3,  -9,  33, -12, -24,
01321       6,   2, -33,   9,  21,   5,  20, -27, -19,  -7,
01322     -34, -37, -34,  22,  44,   0, -41, -29, -17, -21,
01323     }, {
01324       5,   3,  21,   7,   2,  60, -10,   5, -32, -34,
01325       7,  20, -11,  16,  -8,  20, -21,  29,  -1, -24,
01326      -2, -13, -27,  -6,   5,  15,   3,   8, -21,  -1,
01327     -55, -21, -15,  38,  37,  -3, -65, -32, -23, -30,
01328     }, {
01329      35, -10,  11, -44,  -3,  48, -10,  -6, -17,  -2,
01330      11,  51,   8,  -8, -38,  -3,  -4,  31, -12,   2,
01331      46,   1, -10,  -4,  -5,   7,  26, -19,  10,   5,
01332     -18, -34, -45, -15,  54,  24, -18, -13, -31,  -7,
01333     }, {
01334     -33,  10,  34,  -5,  17,  35, -15,  -1, -53, -30,
01335      -6,  59,   0,  10, -24,  13, -17,  27,  -1,   1,
01336      37, -13,  -4, -20, -20,  18,  10,  16,   8,  11,
01337     -39, -18, -26,   0,  46,  20, -41, -15, -37, -15,
01338     }, {
01339      29,  -5,   7, -30,   1,  21,  -7,   7,   0,   0,
01340      47,  -9, -18, -15, -22,  14,  -4,   0, -28, -57,
01341      23,  21, -25,   2,  -1,   0,   7, -53, -19,  -3,
01342     -17, -15, -36,   0,  19, -24, -21, -43,   9,   0,
01343     }, {
01344     -39,  14,  30,   8,  22,   8, -12,  12, -34, -27,
01345      29,  -2, -26,   2,  -8,  31, -16,  -3, -17, -57,
01346      14,   6, -19, -13, -16,  10,  -8, -17, -20,   2,
01347     -38,   0, -17,  16,  11, -27, -44, -45,   4,  -8,
01348     }, {
01349      -9,   1,  20, -43,  17,  -3, -12,   0, -20,   4,
01350      33,  29,  -6, -22, -38,   7,   0,  -1, -29, -30,
01351      63,  21,  -3, -11, -27,   1,  14, -45,  10,   9,
01352      -1, -12, -47, -37,  28,   0,   2, -26,  -4,  13,
01353     }, {
01354     -78,  21,  43,  -4,  38, -17, -17,   5, -55, -24,
01355      15,  36, -14,  -4, -24,  24, -12,  -5, -17, -31,
01356      54,   5,   2, -27, -43,  12,  -2,  -9,   9,  15,
01357     -22,   3, -28, -21,  20,  -3, -20, -28,  -9,   5,
01358     }, {
01359      80,  -6,  16, -11, -30,  30,   9,  28,  28,  29,
01360      13,  -6,   2, -28,   3,   5,   7,  60,  -5,  -9,
01361     -11,   1, -24, -19,  27, -13,  32, -13, -15, -19,
01362     -19, -35, -17,  39,  43,   9,  -4, -42, -32, -41,
01363     }, {
01364      11,  14,  39,  27,  -9,  17,   4,  33,  -6,   0,
01365      -4,   1,  -5, -10,  17,  22,  -5,  57,   5,  -9,
01366     -20, -13, -18, -35,  11,  -3,  16,  22, -17, -13,
01367     -40, -19,   1,  55,  35,   5, -27, -44, -37, -49,
01368     }, {
01369      40,   0,  28, -24, -14,   5,   4,  21,   7,  33,
01370       0,  32,  15, -35, -12,  -1,  11,  58,  -5,  16,
01371      28,   0,  -1, -33,   0, -11,  39,  -5,  14,  -6,
01372      -3, -31, -28,   1,  53,  33,  19, -25, -46, -26,
01373     }, {
01374     -28,  20,  51,  14,   6,  -7,   0,  26, -27,   4,
01375     -18,  40,   6, -16,   1,  15,   0,  55,   5,  16,
01376      19, -14,   3, -49, -14,  -1,  22,  30,  12,   0,
01377     -24, -15,  -9,  17,  45,  29,  -4, -28, -51, -35,
01378     }, {
01379      34,   4,  25, -10,  -9, -21,   7,  36,  26,  36,
01380      35, -28, -12, -42,   3,  16,  12,  28, -21, -42,
01381       5,  21, -16, -26,   4, -19,  19, -39, -15, -15,
01382      -1, -13, -19,  17,  17, -14,  15, -55,  -4, -19,
01383     }, {
01384     -34,  25,  48,  28,  11, -34,   2,  41,  -9,   7,
01385      17, -21, -20, -24,  17,  33,   0,  24, -10, -42,
01386      -3,   5, -10, -42, -11,  -8,   3,  -3, -16,  -9,
01387     -22,   2,   0,  33,  10, -18,  -7, -58, -10, -28,
01388     }, {
01389      -4,  11,  37, -23,   5, -46,   2,  29,   5,  39,
01390      21,   9,   0, -49, -12,   9,  16,  26, -22, -15,
01391      45,  20,   5, -40, -22, -17,  26, -31,  14,  -2,
01392      14, -10, -30, -20,  27,   9,  39, -39, -18,  -5,
01393     }, {
01394     -73,  32,  60,  15,  26, -59,  -2,  33, -30,  10,
01395       3,  17,  -8, -30,   1,  26,   4,  22, -10, -16,
01396      36,   5,  11, -56, -37,  -6,  10,   5,  13,   3,
01397      -6,   5, -11,  -4,  19,   5,  16, -41, -24, -13
01398     }
01399 };
01400 
01401 const uint16_t ff_cb1_base[128]={
01402     19657, 18474, 18365, 17520, 21048, 18231, 18584, 16671,
01403     20363, 19069, 19409, 18430, 21844, 18753, 19613, 17411,
01404     20389, 21772, 20129, 21702, 20978, 20472, 19627, 19387,
01405     21477, 23134, 21841, 23919, 22089, 21519, 21134, 20852,
01406     19675, 17821, 19044, 17477, 19986, 16955, 18446, 16086,
01407     21138, 18899, 20952, 18929, 21452, 17833, 20104, 17159,
01408     19770, 20056, 20336, 20866, 19329, 18217, 18908, 18004,
01409     21556, 21948, 23079, 23889, 20922, 19544, 20984, 19781,
01410     19781, 20984, 19544, 20922, 23889, 23079, 21948, 21556,
01411     18004, 18908, 18217, 19329, 20866, 20336, 20056, 19770,
01412     17159, 20104, 17833, 21452, 18929, 20952, 18899, 21138,
01413     16086, 18446, 16955, 19986, 17477, 19044, 17821, 19675,
01414     20852, 21134, 21519, 22089, 23919, 21841, 23134, 21477,
01415     19387, 19627, 20472, 20978, 21702, 20129, 21772, 20389,
01416     17411, 19613, 18753, 21844, 18430, 19409, 19069, 20363,
01417     16671, 18584, 18231, 21048, 17520, 18365, 18474, 19657,
01418 };
01419 
01420 const uint16_t ff_cb2_base[128]={
01421     12174, 13380, 13879, 13832, 13170, 13227, 13204, 12053,
01422     12410, 13988, 14348, 14631, 13100, 13415, 13224, 12268,
01423     11982, 13825, 13499, 14210, 13877, 14788, 13811, 13109,
01424     11449, 13275, 12833, 13717, 12728, 13696, 12759, 12405,
01425     10230, 12185, 11628, 13161, 11762, 13458, 12312, 12818,
01426     10443, 12773, 12011, 14020, 11818, 13825, 12453, 13226,
01427     10446, 13162, 11881, 14300, 12859, 16288, 13490, 15053,
01428     10155, 12820, 11519, 13973, 12041, 15081, 12635, 14198,
01429     14198, 12635, 15081, 12041, 13973, 11519, 12820, 10155,
01430     15053, 13490, 16288, 12859, 14300, 11881, 13162, 10446,
01431     13226, 12453, 13825, 11818, 14020, 12011, 12773, 10443,
01432     12818, 12312, 13458, 11762, 13161, 11628, 12185, 10230,
01433     12405, 12759, 13696, 12728, 13717, 12833, 13275, 11449,
01434     13109, 13811, 14788, 13877, 14210, 13499, 13825, 11982,
01435     12268, 13224, 13415, 13100, 14631, 14348, 13988, 12410,
01436     12053, 13204, 13227, 13170, 13832, 13879, 13380, 12174,
01437 };
01438 
01439 const int16_t ff_energy_tab[32]={
01440         0,    16,    20,    25,    32,    41,    51,    65,
01441        81,   103,   129,   163,   205,   259,   326,   410,
01442       516,   650,   819,  1031,  1298,  1634,  2057,  2590,
01443      3261,  4105,  5168,  6507,  8192, 10313, 12983, 16345
01444 };
01445 
01446 static const int16_t lpc_refl_cb1[64]={
01447     -4041, -4018, -3998, -3977, -3954, -3930, -3906, -3879,
01448     -3852, -3825, -3795, -3764, -3731, -3699, -3666, -3631,
01449     -3594, -3555, -3513, -3468, -3420, -3372, -3321, -3268,
01450     -3212, -3153, -3090, -3021, -2944, -2863, -2772, -2676,
01451     -2565, -2445, -2328, -2202, -2072, -1941, -1808, -1660,
01452     -1508, -1348, -1185,  -994,  -798,  -600,  -374,  -110,
01453       152,   447,   720,   982,  1229,  1456,  1682,  1916,
01454      2130,  2353,  2595,  2853,  3118,  3363,  3588,  3814
01455 };
01456 
01457 static const int16_t lpc_refl_cb2[32]={
01458     -3091, -2386, -1871, -1425, -1021,  -649,  -316,   -20,
01459       267,   544,   810,  1065,  1305,  1534,  1756,  1970,
01460      2171,  2359,  2536,  2700,  2854,  2996,  3133,  3263,
01461      3386,  3499,  3603,  3701,  3789,  3870,  3947,  4020
01462 };
01463 
01464 static const int16_t lpc_refl_cb3[32]={
01465     -3525, -3295, -3081, -2890, -2696, -2511, -2328, -2149,
01466     -1979, -1817, -1658, -1498, -1341, -1188, -1032,  -876,
01467      -721,  -561,  -394,  -228,   -54,   119,   296,   484,
01468       683,   895,  1123,  1373,  1651,  1965,  2360,  2854
01469 };
01470 
01471 static const int16_t lpc_refl_cb4[16]={
01472     -1845, -1057,  -522,   -77,   301,   647,   975,  1285,
01473      1582,  1873,  2163,  2452,  2735,  3017,  3299,  3569
01474 };
01475 
01476 static const int16_t lpc_refl_cb5[16]={
01477     -2691, -2187, -1788, -1435, -1118,  -837,  -571,  -316,
01478       -59,   201,   470,   759,  1077,  1457,  1908,  2495
01479 };
01480 
01481 static const int16_t lpc_refl_cb6[8]={
01482     -1372,  -474,   133,   632,  1100,  1571,  2075,  2672
01483 };
01484 
01485 static const int16_t lpc_refl_cb7[8]={
01486     -2389, -1787, -1231,  -717,  -239,   234,   770,  1474
01487 };
01488 
01489 static const int16_t lpc_refl_cb8[8]={
01490     -1569,  -864,  -296,   200,   670,  1151,  1709,  2385
01491 };
01492 
01493 static const int16_t lpc_refl_cb9[8]={
01494     -2200, -1608, -1062,  -569,  -120,   338,   863,  1621
01495 };
01496 
01497 static const int16_t lpc_refl_cb10[4]={
01498      -617,   190,   802,  1483
01499 };
01500 
01501 const int16_t * const ff_lpc_refl_cb[10]={
01502     lpc_refl_cb1, lpc_refl_cb2, lpc_refl_cb3, lpc_refl_cb4, lpc_refl_cb5,
01503     lpc_refl_cb6, lpc_refl_cb7, lpc_refl_cb8, lpc_refl_cb9, lpc_refl_cb10
01504 };
01505 
01506 static void ff_add_wav(int16_t *dest, int n, int skip_first, int *m, const int16_t *s1,
01507                        const int8_t *s2, const int8_t *s3)
01508 {
01509     int i;
01510     int v[3];
01511 
01512     v[0] = 0;
01513     for (i=!skip_first; i<3; i++)
01514         v[i] = (ff_gain_val_tab[n][i] * m[i]) >> ff_gain_exp_tab[n];
01515 
01516     if (v[0]) {
01517         for (i=0; i < BLOCKSIZE; i++)
01518             dest[i] = (s1[i]*v[0] + s2[i]*v[1] + s3[i]*v[2]) >> 12;
01519     } else {
01520         for (i=0; i < BLOCKSIZE; i++)
01521             dest[i] = (             s2[i]*v[1] + s3[i]*v[2]) >> 12;
01522     }
01523 }
01524 
01529 void ff_copy_and_dup(int16_t *target, const int16_t *source, int offset)
01530 {
01531     source += BUFFERSIZE - offset;
01532 
01533     memcpy(target, source, FFMIN(BLOCKSIZE, offset)*sizeof(*target));
01534     if (offset < BLOCKSIZE)
01535         memcpy(target + offset, source, (BLOCKSIZE - offset)*sizeof(*target));
01536 }
01537 
01544 int ff_eval_refl(int *refl, const int16_t *coefs, AVCodecContext *avctx)
01545 {
01546     int b, i, j;
01547     int buffer1[LPC_ORDER];
01548     int buffer2[LPC_ORDER];
01549     int *bp1 = buffer1;
01550     int *bp2 = buffer2;
01551 
01552     for (i=0; i < LPC_ORDER; i++)
01553         buffer2[i] = coefs[i];
01554 
01555     refl[LPC_ORDER-1] = bp2[LPC_ORDER-1];
01556 
01557     if ((unsigned) bp2[LPC_ORDER-1] + 0x1000 > 0x1fff) {
01558         av_log(avctx, AV_LOG_ERROR, "Overflow. Broken sample?\n");
01559         return 1;
01560     }
01561 
01562     for (i = LPC_ORDER-2; i >= 0; i--) {
01563         b = 0x1000-((bp2[i+1] * bp2[i+1]) >> 12);
01564 
01565         if (!b)
01566             b = -2;
01567 
01568         for (j=0; j <= i; j++)
01569             bp1[j] = ((bp2[j] - ((refl[i+1] * bp2[i-j]) >> 12)) * (0x1000000 / b)) >> 12;
01570 
01571         if ((unsigned) bp1[i] + 0x1000 > 0x1fff)
01572             return 1;
01573 
01574         refl[i] = bp1[i];
01575 
01576         FFSWAP(int *, bp1, bp2);
01577     }
01578     return 0;
01579 }
01580 
01585 void ff_eval_coefs(int *coefs, const int *refl)
01586 {
01587     int buffer[LPC_ORDER];
01588     int *b1 = buffer;
01589     int *b2 = coefs;
01590     int i, j;
01591 
01592     for (i=0; i < LPC_ORDER; i++) {
01593         b1[i] = refl[i] << 4;
01594 
01595         for (j=0; j < i; j++)
01596             b1[j] = ((refl[i] * b2[i-j-1]) >> 12) + b2[j];
01597 
01598         FFSWAP(int *, b1, b2);
01599     }
01600 
01601     for (i=0; i < LPC_ORDER; i++)
01602         coefs[i] >>= 4;
01603 }
01604 
01605 void ff_int_to_int16(int16_t *out, const int *inp)
01606 {
01607     int i;
01608 
01609     for (i = 0; i < LPC_ORDER; i++)
01610         *out++ = *inp++;
01611 }
01612 
01617 int ff_t_sqrt(unsigned int x)
01618 {
01619     int s = 2;
01620     while (x > 0xfff) {
01621         s++;
01622         x >>= 2;
01623     }
01624 
01625     return ff_sqrt(x << 20) << s;
01626 }
01627 
01628 unsigned int ff_rms(const int *data)
01629 {
01630     int i;
01631     unsigned int res = 0x10000;
01632     int b = LPC_ORDER;
01633 
01634     for (i = 0; i < LPC_ORDER; i++) {
01635         res = (((0x1000000 - data[i]*data[i]) >> 12) * res) >> 12;
01636 
01637         if (res == 0)
01638             return 0;
01639 
01640         while (res <= 0x3fff) {
01641             b++;
01642             res <<= 2;
01643         }
01644     }
01645 
01646     return ff_t_sqrt(res) >> b;
01647 }
01648 
01649 int ff_interp(RA144Context *ractx, int16_t *out, int a, int copyold, int energy)
01650 {
01651     int work[LPC_ORDER];
01652     int b = NBLOCKS - a;
01653     int i;
01654 
01655     // Interpolate block coefficients from the this frame's forth block and
01656     // last frame's forth block.
01657     for (i = 0; i < LPC_ORDER; i++)
01658         out[i] = (a * ractx->lpc_coef[0][i] + b * ractx->lpc_coef[1][i])>> 2;
01659 
01660     if (ff_eval_refl(work, out, ractx->avctx)) {
01661         // The interpolated coefficients are unstable, copy either new or old
01662         // coefficients.
01663         ff_int_to_int16(out, ractx->lpc_coef[copyold]);
01664         return ff_rescale_rms(ractx->lpc_refl_rms[copyold], energy);
01665     } else {
01666         return ff_rescale_rms(ff_rms(work), energy);
01667     }
01668 }
01669 
01670 unsigned int ff_rescale_rms(unsigned int rms, unsigned int energy)
01671 {
01672     return (rms * energy) >> 10;
01673 }
01674 
01676 int ff_irms(const int16_t *data)
01677 {
01678     unsigned int i, sum = 0;
01679 
01680     for (i=0; i < BLOCKSIZE; i++)
01681         sum += data[i] * data[i];
01682 
01683     if (sum == 0)
01684         return 0; /* OOPS - division by zero */
01685 
01686     return 0x20000000 / (ff_t_sqrt(sum) >> 8);
01687 }
01688 
01689 void ff_subblock_synthesis(RA144Context *ractx, const uint16_t *lpc_coefs,
01690                            int cba_idx, int cb1_idx, int cb2_idx,
01691                            int gval, int gain)
01692 {
01693     uint16_t buffer_a[BLOCKSIZE];
01694     uint16_t *block;
01695     int m[3];
01696 
01697     if (cba_idx) {
01698         cba_idx += BLOCKSIZE/2 - 1;
01699         ff_copy_and_dup(buffer_a, ractx->adapt_cb, cba_idx);
01700         m[0] = (ff_irms(buffer_a) * gval) >> 12;
01701     } else {
01702         m[0] = 0;
01703     }
01704     m[1] = (ff_cb1_base[cb1_idx] * gval) >> 8;
01705     m[2] = (ff_cb2_base[cb2_idx] * gval) >> 8;
01706     memmove(ractx->adapt_cb, ractx->adapt_cb + BLOCKSIZE,
01707             (BUFFERSIZE - BLOCKSIZE) * sizeof(*ractx->adapt_cb));
01708 
01709     block = ractx->adapt_cb + BUFFERSIZE - BLOCKSIZE;
01710 
01711     ff_add_wav(block, gain, cba_idx, m, cba_idx? buffer_a: NULL,
01712                ff_cb1_vects[cb1_idx], ff_cb2_vects[cb2_idx]);
01713 
01714     memcpy(ractx->curr_sblock, ractx->curr_sblock + BLOCKSIZE,
01715            LPC_ORDER*sizeof(*ractx->curr_sblock));
01716 
01717     if (ff_celp_lp_synthesis_filter(ractx->curr_sblock + LPC_ORDER, lpc_coefs,
01718                                     block, BLOCKSIZE, LPC_ORDER, 1, 0xfff))
01719         memset(ractx->curr_sblock, 0, (LPC_ORDER+BLOCKSIZE)*sizeof(*ractx->curr_sblock));
01720 }
Generated on Thu Jan 24 2013 17:08:53 for Libav by doxygen 1.7.1