2 * Real Audio 1.0 (14.4K)
3 * Copyright (c) 2003 The FFmpeg project
5 * This file is part of FFmpeg.
7 * FFmpeg is free software; you can redistribute it and/or
8 * modify it under the terms of the GNU Lesser General Public
9 * License as published by the Free Software Foundation; either
10 * version 2.1 of the License, or (at your option) any later version.
12 * FFmpeg is distributed in the hope that it will be useful,
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15 * Lesser General Public License for more details.
17 * You should have received a copy of the GNU Lesser General Public
18 * License along with FFmpeg; if not, write to the Free Software
19 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
24 #include "celp_filters.h"
28 const int16_t ff_gain_val_tab[256][3] = {
29 { 541, 956, 768}, { 877, 581, 568}, { 675,1574, 635}, {1248,1464, 668},
30 {1246, 839, 1394}, {2560,1386, 991}, { 925, 687, 608}, {2208, 797, 1144},
31 { 535, 832, 799}, { 762, 605, 1154}, { 832,1122, 1003}, {1180, 687, 1176},
32 {1292, 901, 732}, {1656, 689, 896}, {1750,1248, 848}, {2284, 942, 1022},
33 { 824,1472, 643}, { 517, 765, 512}, { 562,1816, 1522}, { 694,1826, 2700},
34 { 704, 524, 672}, {1442, 757, 2232}, { 884, 551, 1266}, {2232,1007, 1692},
35 { 932, 746, 777}, {1132, 822, 926}, {1226, 771, 611}, {2948,1342, 1008},
36 {1302, 594, 1158}, {1602, 636, 1128}, {3408, 910, 1438}, {1996, 614, 575},
37 { 665, 935, 628}, { 631,1192, 829}, { 644, 926, 1052}, { 879, 988, 1226},
38 { 941,2768, 2772}, { 565,1344, 2304}, { 547, 628, 740}, { 639, 532, 1074},
39 { 955,1208, 598}, {1124,1160, 900}, {1206, 899, 1242}, { 746, 533, 624},
40 {1458,1028, 735}, {1706,1102, 692}, {1898,1018, 1004}, {2176, 988, 735},
41 {1578, 782, 1642}, { 897, 516, 754}, {2068, 702, 1656}, {2344, 818, 1526},
42 { 907, 652, 592}, {1056, 652, 642}, {2124,1416, 780}, {2664,1250, 727},
43 {1894, 727, 1108}, {2196, 657, 981}, {4840, 920, 1704}, {4992,1238, 983},
44 {2420, 909, 1094}, {2760, 935, 1032}, {2800, 612, 853}, {3068, 832, 574},
45 { 523,1796, 923}, { 722,1916, 1382}, {1226,1542, 928}, { 758, 757, 584},
46 { 512,1134, 577}, { 615,1276, 698}, { 574,2568, 2356}, { 993,2728, 3512},
47 { 539, 890, 913}, { 694, 928, 1088}, { 805, 600, 1360}, {2160, 951, 3128},
48 { 816, 950, 590}, { 955, 847, 811}, {1094, 883, 556}, {1304, 888, 604},
49 { 863,1170, 855}, {1023, 997, 1032}, { 932,1228, 1280}, { 627, 564, 573},
50 { 876, 900, 1448}, {1030, 857, 1792}, {1294, 953, 1758}, {1612, 854, 1714},
51 {1090,1166, 631}, {1314,1202, 751}, {1480, 905, 795}, {1682,1016, 568},
52 {1494,1178, 983}, { 878, 613, 526}, {1728,1446, 779}, {2136,1348, 774},
53 { 950, 649, 939}, {1180, 703, 899}, {1236, 527, 1158}, {1450, 647, 972},
54 {1282, 647, 707}, {1460, 663, 644}, {1614, 572, 578}, {3516,1222, 821},
55 {2668, 729, 1682}, {3128, 585, 1502}, {3208, 733, 976}, {6800, 871, 1416},
56 {3480, 743, 1408}, {3764, 899, 1170}, {3772, 632, 875}, {4092, 732, 638},
57 {3112, 753, 2620}, {3372, 945, 1890}, {3768, 969, 2288}, {2016, 559, 854},
58 {1736, 729, 787}, {1940, 686, 547}, {2140, 635, 674}, {4480,1272, 828},
59 {3976, 592, 1666}, {4384, 621, 1388}, {4400, 801, 955}, {4656, 522, 646},
60 {4848, 625, 1636}, {4984, 591, 874}, {5352, 535, 1001}, {11216,938, 1184},
61 { 925,3280, 1476}, { 735,1580, 1088}, {1150,1576, 674}, { 655, 783, 528},
62 { 527,2052, 1354}, { 782,1704, 1880}, { 578, 910, 1026}, { 692, 882, 1468},
63 { 586, 683, 715}, { 739, 609, 717}, { 778, 773, 697}, { 922, 785, 813},
64 { 766, 651, 984}, { 978, 596, 1030}, {1070, 757, 1080}, {1324, 687, 1178},
65 {1108,2144, 979}, { 723, 982, 690}, { 936, 956, 527}, {1180,1002, 547},
66 { 517,1306, 825}, { 832,1184, 974}, {1024, 957, 903}, {1262,1090, 906},
67 {1028, 720, 649}, {1192, 679, 694}, {2468,1480, 979}, {2844,1370, 877},
68 {1310, 835, 848}, {1508, 839, 698}, {1742,1030, 769}, {1910, 852, 573},
69 {1280, 859, 1174}, {1584, 863, 1108}, {1686, 708, 1364}, {1942, 768, 1104},
70 { 891, 536, 690}, {1016, 560, 663}, {2172, 870, 1348}, {2404, 999, 1170},
71 {1890, 966, 889}, {2116, 912, 777}, {2296,1020, 714}, {4872,1844, 932},
72 {2392, 778, 929}, {2604, 772, 744}, {2764, 957, 722}, {5832,1532, 984},
73 {2188, 519, 1264}, {2332, 532, 922}, {5064, 995, 2412}, {2708, 571, 874},
74 {2408, 545, 666}, {5016,1084, 875}, {5376, 983, 1196}, {5536, 979, 730},
75 {5344, 634, 1744}, {5688, 706, 1348}, {5912, 977, 1190}, {6072, 905, 763},
76 {6048, 582, 1526}, {11968,1013,1816}, {12864,937, 1900}, {12560,1086, 998},
77 {1998, 684, 1884}, {2504, 633, 1992}, {1252, 567, 835}, {1478, 571, 973},
78 {2620, 769, 1414}, {2808, 952, 1142}, {2908, 712, 1028}, {2976, 686, 741},
79 {1462, 552, 714}, {3296, 991, 1452}, {1590, 615, 544}, {3480,1150, 824},
80 {3212, 832, 923}, {3276, 839, 531}, {3548, 786, 852}, {3732, 764, 570},
81 {5728, 906, 2616}, {6272, 804, 2252}, {3096, 535, 876}, {3228, 598, 649},
82 {6536, 759, 1436}, {6648, 993, 846}, {6864, 567, 1210},{14016,1012, 1302},
83 {3408, 548, 1098}, {7160,1008, 1742}, {7136,1000, 1182}, {7480,1032, 836},
84 {7448, 612, 1552}, {7744, 614, 816}, {8384, 777, 1438}, {8784, 694, 786},
85 { 882,1508, 1068}, { 597, 837, 766}, {1270, 954, 1408}, { 803, 550, 798},
86 {1398,1308, 798}, {1848,1534, 738}, { 970, 675, 608}, {1264, 706, 684},
87 {1716, 767, 1126}, {2108, 765, 1404}, {2236, 924, 1003}, {2472,1048, 611},
88 { 999, 942, 963}, {1094, 857, 935}, {2936, 926, 1138}, {1934, 746, 551},
89 {3336, 633, 1762}, {3764, 701, 1454}, {1890, 564, 636}, {4096,1126, 793},
90 {3936, 556, 1140}, {3936, 540, 740}, {4216, 764, 874}, {8480,1328, 1014},
91 {2184, 515, 1042}, {4432, 934, 1344}, {4784, 945, 1112}, {5016,1062, 733},
92 {9216,1020, 2028}, {9968, 924, 1188}, {5424, 909, 1206}, {6512, 744, 1086}
95 const uint8_t ff_gain_exp_tab[256] = {
96 15, 15, 15, 15, 15, 16, 14, 15, 14, 14, 14, 14, 14, 14, 14, 14,
97 14, 13, 14, 14, 13, 14, 13, 14, 13, 13, 13, 14, 13, 13, 14, 13,
98 13, 13, 13, 13, 14, 13, 12, 12, 13, 13, 13, 12, 13, 13, 13, 13,
99 13, 12, 13, 13, 12, 12, 13, 13, 13, 13, 14, 14, 13, 13, 13, 13,
100 13, 13, 13, 12, 12, 12, 13, 13, 12, 12, 12, 13, 12, 12, 12, 12,
101 12, 12, 12, 11, 12, 12, 12, 12, 12, 12, 12, 12, 12, 11, 12, 12,
102 12, 12, 12, 12, 12, 12, 12, 13, 13, 13, 13, 14, 13, 13, 13, 13,
103 13, 13, 13, 12, 12, 12, 12, 13, 13, 13, 13, 13, 13, 13, 13, 14,
104 13, 12, 12, 11, 12, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
105 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 12, 12, 11, 11, 11, 11,
106 12, 12, 12, 12, 11, 11, 12, 12, 12, 12, 12, 13, 12, 12, 12, 13,
107 12, 12, 13, 12, 12, 13, 13, 13, 13, 13, 13, 13, 13, 14, 14, 14,
108 12, 12, 11, 11, 12, 12, 12, 12, 11, 12, 11, 12, 12, 12, 12, 12,
109 13, 13, 12, 12, 13, 13, 13, 14, 12, 13, 13, 13, 13, 13, 13, 13,
110 11, 10, 11, 10, 11, 11, 10, 10, 11, 11, 11, 11, 10, 9, 11, 10,
111 12, 12, 11, 12, 12, 12, 12, 13, 11, 12, 12, 12, 13, 13, 12, 12
114 const int8_t ff_cb1_vects[128][40]={
116 38, -4, 15, -4, 14, -13, 12, -11, -2, -6,
117 -6, -11, -45, -16, -11, -13, -7, 6, -12, 4,
118 -20, 3, -16, 12, -1, 12, 46, 24, 0, 33,
119 -3, 9, -12, -12, -8, -7, 17, -6, 0, -2,
121 60, -16, 3, -22, 10, -32, 0, -28, -17, -18,
122 -3, -25, -37, -23, -10, 3, 2, 3, 0, 3,
123 -14, 0, -14, -1, 0, 2, 32, 9, -1, 25,
124 7, 13, -5, 13, 8, 1, 2, 8, -10, 6,
126 27, -12, 28, -2, 6, -7, 15, 9, -11, 1,
127 -13, -11, -40, 4, -29, -14, -19, -5, -23, -8,
128 -30, -13, -17, 0, -14, 12, 34, 20, -2, 25,
129 2, -16, -4, -12, 15, 16, 29, 7, 24, 10,
131 49, -24, 16, -20, 2, -26, 2, -7, -25, -10,
132 -11, -25, -32, -3, -27, 2, -8, -8, -11, -9,
133 -24, -17, -16, -14, -13, 2, 20, 5, -4, 17,
134 14, -12, 3, 13, 33, 25, 14, 23, 15, 19,
136 46, -6, 21, 8, -2, -16, -5, -8, -11, 4,
137 8, 15, -24, 4, -2, -26, -3, -16, -16, -14,
138 -9, -2, -1, 4, 19, 7, 36, 17, 9, 13,
139 0, 31, -5, -12, 7, -8, 11, -15, -13, -4,
141 68, -18, 9, -9, -6, -35, -18, -25, -26, -7,
142 10, 1, -16, -3, -1, -9, 6, -19, -4, -15,
143 -4, -6, 0, -8, 20, -2, 23, 2, 7, 5,
144 12, 35, 1, 13, 24, 0, -3, 0, -22, 4,
146 35, -14, 34, 10, -10, -10, -1, 12, -20, 12,
147 0, 15, -18, 24, -20, -27, -14, -28, -27, -27,
148 -20, -19, -2, -8, 5, 7, 25, 13, 5, 5,
149 6, 5, 2, -12, 31, 15, 23, -1, 12, 8,
151 57, -26, 22, -7, -14, -28, -14, -3, -35, 0,
152 3, 1, -11, 16, -18, -10, -4, -31, -15, -28,
153 -14, -23, -1, -21, 7, -2, 11, -1, 3, -1,
154 18, 9, 10, 13, 49, 24, 8, 14, 2, 16,
156 25, 15, 22, 11, 18, 4, 15, -22, 8, -2,
157 -17, -9, -48, -20, -30, -17, -16, 11, -1, 16,
158 2, 10, -5, 26, -2, -4, 22, 0, 2, 10,
159 -6, 13, -14, 10, -23, 0, 10, -2, 1, 0,
161 47, 3, 11, -6, 15, -13, 2, -38, -6, -13,
162 -15, -22, -40, -28, -28, 0, -5, 8, 10, 15,
163 7, 7, -4, 13, -1, -14, 9, -14, 0, 2,
164 4, 18, -7, 36, -6, 8, -3, 13, -7, 8,
166 14, 7, 36, 13, 10, 10, 18, 0, 0, 5,
167 -25, -8, -43, 0, -48, -18, -27, 0, -12, 3,
168 -7, -6, -7, 13, -15, -5, 11, -3, 0, 2,
169 0, -12, -6, 10, 0, 23, 22, 11, 26, 12,
171 36, -5, 24, -4, 7, -7, 6, -17, -14, -5,
172 -22, -22, -35, -8, -46, -1, -17, -3, 0, 2,
173 -2, -10, -5, 0, -14, -15, -2, -18, -2, -4,
174 11, -7, 1, 36, 18, 32, 7, 27, 17, 20,
176 33, 13, 29, 24, 1, 1, -2, -18, 0, 9,
177 -3, 17, -27, 0, -21, -30, -12, -11, -5, -2,
178 12, 4, 9, 19, 18, -9, 13, -6, 11, -8,
179 -2, 35, -8, 10, -7, -1, 4, -11, -10, -2,
181 55, 1, 17, 6, -1, -16, -15, -35, -15, -2,
182 0, 4, -19, -8, -20, -13, -1, -14, 7, -3,
183 18, 0, 10, 5, 19, -19, 0, -21, 8, -16,
184 9, 39, 0, 36, 10, 7, -9, 4, -20, 5,
186 22, 5, 42, 26, -6, 8, 1, 2, -9, 17,
187 -10, 18, -21, 19, -39, -31, -23, -23, -16, -15,
188 2, -12, 7, 6, 5, -9, 1, -10, 7, -16,
189 4, 9, 0, 10, 17, 22, 16, 2, 14, 9,
191 44, -6, 30, 8, -9, -10, -11, -14, -23, 5,
192 -8, 4, -14, 12, -37, -14, -12, -26, -4, -16,
193 8, -16, 9, -7, 6, -19, -12, -25, 5, -24,
194 15, 13, 8, 36, 34, 31, 1, 18, 4, 18,
196 -3, -5, -9, -7, 15, -1, 5, 13, 2, 12,
197 5, 2, -21, -23, -2, -16, 0, 5, -6, 13,
198 -23, 3, -32, 10, -15, 8, 44, 28, 9, 37,
199 -2, 13, -9, -15, -12, -27, -7, -12, 0, -11,
201 18, -17, -21, -25, 11, -19, -6, -3, -11, 0,
202 7, -11, -13, -31, -1, 0, 9, 1, 5, 12,
203 -18, 0, -31, -2, -13, -1, 30, 14, 7, 29,
204 9, 18, -1, 10, 4, -18, -22, 3, -10, -2,
206 -13, -13, 3, -5, 7, 4, 9, 34, -5, 20,
207 -2, 3, -16, -3, -20, -17, -11, -7, -17, 0,
208 -34, -13, -33, -2, -28, 8, 32, 24, 5, 29,
209 3, -12, 0, -15, 11, -3, 3, 2, 24, 1,
211 8, -25, -8, -23, 3, -13, -3, 17, -20, 8,
212 0, -10, -8, -11, -18, 0, -1, -10, -5, 0,
213 -28, -17, -32, -15, -26, -1, 19, 9, 3, 21,
214 15, -7, 6, 9, 29, 5, -10, 17, 15, 9,
216 4, -6, -3, 5, -1, -4, -11, 16, -6, 23,
217 19, 29, 0, -3, 6, -30, 3, -17, -10, -5,
218 -13, -2, -17, 3, 5, 3, 35, 21, 17, 17,
219 2, 35, -2, -15, 3, -28, -13, -21, -13, -13,
221 26, -19, -15, -12, -5, -22, -24, 0, -21, 12,
222 21, 15, 8, -11, 7, -12, 14, -20, 2, -6,
223 -7, -6, -16, -9, 6, -5, 21, 7, 15, 10,
224 13, 39, 5, 10, 20, -19, -28, -5, -22, -5,
226 -5, -15, 9, 7, -9, 2, -8, 37, -14, 31,
227 11, 29, 5, 16, -11, -30, -7, -29, -21, -18,
228 -23, -19, -18, -9, -7, 3, 23, 17, 14, 9,
229 8, 9, 6, -15, 27, -4, -2, -6, 12, -1,
231 16, -27, -2, -10, -13, -16, -20, 20, -29, 20,
232 14, 16, 13, 8, -9, -13, 2, -33, -9, -19,
233 -17, -23, -17, -22, -6, -6, 9, 2, 12, 2,
234 20, 13, 13, 10, 45, 4, -16, 8, 2, 7,
236 -16, 14, -2, 8, 20, 17, 9, 2, 14, 16,
237 -6, 5, -24, -28, -21, -20, -8, 9, 4, 25,
238 -1, 11, -22, 24, -15, -8, 21, 5, 11, 14,
239 -5, 18, -11, 7, -27, -20, -14, -7, 1, -9,
241 6, 2, -14, -9, 16, -1, -3, -14, 0, 5,
242 -3, -8, -16, -36, -19, -3, 1, 6, 17, 24,
243 4, 7, -21, 11, -14, -18, 7, -9, 9, 7,
244 6, 22, -3, 33, -10, -11, -28, 7, -7, 0,
246 -26, 6, 11, 10, 12, 23, 12, 23, 5, 24,
247 -13, 5, -19, -8, -38, -21, -20, -2, -6, 12,
248 -11, -5, -23, 11, -29, -9, 9, 0, 7, 6,
249 1, -7, -2, 7, -3, 3, -2, 6, 27, 3,
251 -4, -6, 0, -7, 8, 4, 0, 6, -9, 13,
252 -11, -7, -11, -15, -37, -4, -9, -5, 5, 11,
253 -5, -9, -22, -1, -27, -18, -4, -14, 5, 0,
254 12, -3, 4, 32, 14, 12, -17, 22, 17, 11,
256 -8, 12, 3, 21, 3, 14, -8, 5, 4, 28,
257 7, 32, -2, -8, -12, -34, -4, -12, 1, 6,
258 9, 4, -7, 17, 4, -13, 11, -1, 19, -4,
259 0, 39, -4, 7, -11, -21, -20, -16, -10, -11,
261 13, 0, -8, 3, 0, -4, -21, -11, -9, 16,
262 10, 18, 5, -16, -10, -16, 5, -15, 13, 5,
263 15, 1, -6, 4, 6, -23, -2, -16, 17, -12,
264 10, 44, 3, 33, 6, -12, -34, -1, -20, -3,
266 -18, 4, 17, 23, -4, 20, -4, 26, -3, 36,
267 0, 32, 2, 12, -29, -34, -16, -24, -10, -6,
268 0, -12, -8, 4, -8, -13, 0, -6, 16, -12,
269 5, 13, 3, 7, 13, 3, -8, -2, 14, 0,
271 3, -7, 5, 5, -8, 2, -17, 9, -18, 24,
272 2, 19, 10, 4, -28, -17, -5, -28, 2, -7,
273 4, -15, -7, -8, -6, -23, -13, -21, 14, -20,
274 17, 18, 11, 33, 30, 11, -23, 13, 5, 9,
276 60, 10, 7, -1, 9, -8, 6, -13, 2, -15,
277 -1, -10, -13, -11, 15, 0, 6, 9, -1, 0,
278 -13, 1, -11, -3, -13, 21, 13, 26, -7, 31,
279 -10, -7, -16, -33, -31, -10, 22, -8, 1, -2,
281 82, -1, -4, -19, 6, -27, -6, -29, -12, -26,
282 1, -24, -5, -18, 17, 17, 17, 6, 10, 0,
283 -7, -2, -9, -16, -12, 11, 0, 11, -9, 23,
284 0, -3, -8, -8, -13, -1, 8, 7, -7, 6,
286 49, 2, 21, 0, 1, -2, 9, 8, -6, -6,
287 -8, -10, -8, 9, -2, 0, -4, -2, -13, -12,
288 -23, -15, -12, -16, -26, 21, 2, 21, -11, 23,
289 -4, -33, -7, -33, -6, 13, 34, 5, 27, 10,
291 71, -10, 9, -17, -1, -20, -3, -8, -21, -18,
292 -6, -24, 0, 1, 0, 16, 6, -5, 0, -13,
293 -17, -19, -11, -29, -25, 11, -11, 6, -13, 15,
294 7, -29, 0, -8, 11, 22, 20, 21, 17, 18,
296 67, 8, 14, 11, -7, -11, -11, -9, -7, -3,
297 13, 16, 8, 9, 24, -12, 10, -13, -5, -17,
298 -2, -4, 3, -10, 6, 17, 4, 19, 0, 11,
299 -6, 13, -9, -33, -14, -10, 16, -17, -10, -4,
301 90, -3, 2, -6, -10, -29, -24, -26, -21, -15,
302 15, 2, 16, 1, 25, 4, 21, -16, 6, -18,
303 3, -8, 5, -24, 8, 7, -9, 4, -1, 3,
304 5, 18, -1, -7, 2, -1, 2, -1, -19, 3,
306 57, 0, 27, 13, -14, -5, -7, 11, -15, 4,
307 5, 16, 13, 29, 6, -13, 0, -25, -16, -31,
308 -12, -22, 2, -23, -6, 16, -7, 14, -2, 3,
309 0, -12, 0, -33, 9, 13, 28, -3, 14, 7,
311 79, -11, 15, -4, -18, -23, -20, -5, -30, -7,
312 7, 2, 21, 21, 8, 3, 10, -28, -4, -31,
313 -6, -25, 3, -37, -4, 7, -20, 0, -4, -4,
314 11, -7, 6, -8, 27, 22, 14, 12, 5, 16,
316 47, 30, 15, 14, 14, 9, 9, -23, 13, -10,
317 -12, -7, -16, -15, -3, -3, -1, 14, 9, 12,
318 9, 8, 0, 10, -14, 4, -9, 2, -5, 8,
319 -13, -3, -18, -10, -45, -3, 16, -4, 4, 0,
321 69, 17, 3, -3, 10, -8, -3, -40, -1, -21,
322 -10, -21, -8, -23, -1, 13, 8, 11, 21, 11,
323 15, 4, 0, -2, -13, -5, -23, -12, -7, 0,
324 -1, 0, -10, 14, -28, 5, 1, 11, -5, 7,
326 36, 21, 28, 16, 6, 16, 12, -2, 4, -2,
327 -20, -7, -11, 4, -20, -4, -12, 2, -1, 0,
328 0, -8, -2, -2, -27, 4, -21, -2, -9, 0,
329 -6, -29, -9, -10, -21, 21, 28, 10, 29, 11,
331 58, 9, 16, -1, 2, -2, 0, -19, -10, -13,
332 -17, -21, -3, -3, -19, 12, -2, 0, 10, -1,
333 5, -12, 0, -15, -26, -5, -34, -16, -11, -7,
334 4, -25, -2, 14, -3, 29, 13, 25, 20, 20,
336 55, 28, 21, 27, -2, 7, -8, -20, 4, 1,
337 1, 18, 5, 4, 5, -16, 2, -8, 5, -5,
338 19, 2, 14, 3, 6, 0, -18, -4, 2, -11,
339 -8, 18, -11, -10, -29, -3, 10, -13, -8, -3,
341 77, 16, 9, 9, -6, -11, -21, -37, -10, -10,
342 4, 5, 13, -3, 7, 0, 13, -11, 17, -6,
343 25, -1, 15, -9, 7, -9, -32, -19, 0, -18,
344 2, 22, -3, 15, -12, 5, -4, 2, -17, 5,
346 44, 20, 34, 29, -10, 13, -4, 0, -4, 9,
347 -5, 19, 10, 24, -11, -17, -8, -20, -5, -19,
348 9, -14, 12, -9, -6, 0, -30, -9, 0, -19,
349 -2, -7, -2, -10, -5, 20, 21, 1, 17, 9,
351 66, 8, 23, 11, -14, -5, -17, -16, -19, -2,
352 -3, 5, 18, 17, -10, 0, 1, -23, 6, -20,
353 15, -18, 14, -22, -5, -10, -44, -23, -2, -26,
354 9, -3, 4, 14, 12, 29, 7, 16, 7, 18,
356 18, 9, -17, -4, 11, 3, 0, 11, 7, 4,
357 10, 3, 10, -18, 24, -3, 14, 7, 4, 10,
358 -16, 1, -27, -4, -27, 17, 12, 30, 0, 35,
359 -9, -3, -12, -36, -35, -30, -2, -13, 2, -11,
361 40, -2, -29, -22, 7, -14, -12, -5, -7, -7,
362 12, -9, 18, -26, 26, 14, 24, 4, 16, 9,
363 -10, -2, -26, -18, -26, 7, -1, 15, -1, 27,
364 2, 0, -4, -11, -17, -21, -16, 1, -7, -3,
366 8, 1, -3, -2, 3, 10, 3, 32, -1, 12,
367 2, 4, 15, 1, 7, -3, 2, -4, -6, -3,
368 -26, -15, -29, -17, -40, 17, 0, 26, -2, 27,
369 -2, -29, -4, -36, -10, -6, 9, 0, 27, 0,
371 30, -11, -15, -20, 0, -8, -9, 15, -15, 0,
372 5, -9, 23, -6, 8, 13, 13, -7, 5, -3,
373 -20, -19, -27, -31, -39, 7, -13, 11, -4, 19,
374 8, -25, 3, -11, 7, 2, -4, 16, 18, 9,
376 26, 7, -11, 8, -5, 1, -17, 14, -1, 15,
377 24, 30, 32, 1, 33, -16, 18, -14, 0, -8,
378 -6, -4, -12, -12, -6, 13, 2, 23, 8, 15,
379 -4, 17, -5, -36, -18, -30, -8, -22, -10, -14,
381 48, -4, -23, -9, -9, -17, -30, -2, -16, 3,
382 26, 16, 40, -6, 35, 1, 28, -17, 12, -9,
383 0, -8, -11, -25, -5, 3, -10, 8, 6, 7,
384 6, 22, 1, -11, -1, -21, -22, -7, -19, -5,
386 15, 0, 2, 10, -13, 7, -14, 35, -10, 23,
387 16, 31, 37, 21, 16, -17, 6, -26, -10, -21,
388 -16, -21, -13, -25, -19, 13, -8, 19, 5, 7,
389 1, -8, 2, -36, 5, -6, 3, -8, 15, -1,
391 37, -12, -9, -7, -17, -11, -26, 18, -25, 12,
392 19, 17, 45, 14, 17, 0, 17, -30, 1, -22,
393 -10, -25, -12, -38, -18, 3, -22, 4, 3, 0,
394 13, -3, 10, -11, 23, 2, -10, 7, 5, 7,
396 5, 29, -9, 11, 15, 22, 3, 0, 18, 8,
397 -1, 6, 7, -23, 6, -6, 5, 12, 15, 21,
398 5, 8, -17, 9, -28, 0, -11, 6, 2, 12,
399 -11, 0, -14, -13, -49, -22, -8, -9, 4, -9,
401 27, 16, -21, -6, 12, 3, -9, -16, 3, -2,
402 1, -7, 15, -31, 7, 10, 16, 9, 27, 21,
403 11, 5, -16, -3, -26, -9, -24, -7, 0, 4,
404 0, 4, -6, 11, -32, -14, -23, 6, -5, -1,
406 -4, 20, 3, 13, 8, 28, 6, 21, 10, 16,
407 -8, 7, 12, -3, -11, -7, -5, 0, 4, 8,
408 -4, -8, -18, -3, -41, 0, -22, 2, 0, 4,
409 -5, -25, -6, -14, -25, 1, 2, 4, 29, 2,
411 17, 8, -8, -4, 4, 10, -6, 5, -4, 5,
412 -6, -6, 20, -10, -9, 9, 4, -2, 16, 7,
413 1, -12, -17, -16, -39, -9, -36, -12, -2, -3,
414 6, -21, 1, 11, -7, 10, -11, 20, 20, 11,
416 13, 27, -3, 24, -1, 19, -14, 3, 9, 20,
417 12, 33, 29, -3, 15, -20, 9, -9, 11, 3,
418 16, 2, -2, 2, -7, -3, -20, 0, 10, -7,
419 -7, 22, -7, -13, -33, -23, -14, -18, -7, -12,
421 35, 15, -15, 6, -4, 1, -27, -12, -5, 8,
422 15, 19, 37, -11, 16, -2, 20, -12, 23, 2,
423 22, -1, -1, -11, -5, -13, -34, -14, 8, -14,
424 4, 26, 0, 11, -16, -14, -29, -2, -17, -3,
426 3, 19, 9, 26, -8, 26, -10, 24, 0, 28,
427 5, 33, 34, 17, -2, -20, -1, -22, 0, -10,
428 6, -14, -3, -10, -20, -4, -32, -4, 7, -15,
429 0, -3, 0, -13, -9, 0, -3, -4, 17, 0,
431 25, 7, -2, 8, -12, 7, -23, 8, -13, 16,
432 7, 20, 42, 9, 0, -3, 9, -25, 12, -10,
433 12, -18, -2, -24, -19, -13, -46, -19, 5, -22,
434 10, 0, 8, 11, 8, 9, -17, 11, 7, 8,
436 -25, -7, 2, -8, 12, -7, 23, -8, 13, -16,
437 -7, -20, -42, -9, 0, 3, -9, 25, -12, 10,
438 -12, 18, 2, 24, 19, 13, 46, 19, -5, 22,
439 -10, 0, -8, -11, -8, -9, 17, -11, -7, -8,
441 -3, -19, -9, -26, 8, -26, 10, -24, 0, -28,
442 -5, -33, -34, -17, 2, 20, 1, 22, 0, 10,
443 -6, 14, 3, 10, 20, 4, 32, 4, -7, 15,
444 0, 3, 0, 13, 9, 0, 3, 4, -17, 0,
446 -35, -15, 15, -6, 4, -1, 27, 12, 5, -8,
447 -15, -19, -37, 11, -16, 2, -20, 12, -23, -2,
448 -22, 1, 1, 11, 5, 13, 34, 14, -8, 14,
449 -4, -26, 0, -11, 16, 14, 29, 2, 17, 3,
451 -13, -27, 3, -24, 1, -19, 14, -3, -9, -20,
452 -12, -33, -29, 3, -15, 20, -9, 9, -11, -3,
453 -16, -2, 2, -2, 7, 3, 20, 0, -10, 7,
454 7, -22, 7, 13, 33, 23, 14, 18, 7, 12,
456 -17, -8, 8, 4, -4, -10, 6, -5, 4, -5,
457 6, 6, -20, 10, 9, -9, -4, 2, -16, -7,
458 -1, 12, 17, 16, 39, 9, 36, 12, 2, 3,
459 -6, 21, -1, -11, 7, -10, 11, -20, -20, -11,
461 4, -20, -3, -13, -8, -28, -6, -21, -10, -16,
462 8, -7, -12, 3, 11, 7, 5, 0, -4, -8,
463 4, 8, 18, 3, 41, 0, 22, -2, 0, -4,
464 5, 25, 6, 14, 25, -1, -2, -4, -29, -2,
466 -27, -16, 21, 6, -12, -3, 9, 16, -3, 2,
467 -1, 7, -15, 31, -7, -10, -16, -9, -27, -21,
468 -11, -5, 16, 3, 26, 9, 24, 7, 0, -4,
469 0, -4, 6, -11, 32, 14, 23, -6, 5, 1,
471 -5, -29, 9, -11, -15, -22, -3, 0, -18, -8,
472 1, -6, -7, 23, -6, 6, -5, -12, -15, -21,
473 -5, -8, 17, -9, 28, 0, 11, -6, -2, -12,
474 11, 0, 14, 13, 49, 22, 8, 9, -4, 9,
476 -37, 12, 9, 7, 17, 11, 26, -18, 25, -12,
477 -19, -17, -45, -14, -17, 0, -17, 30, -1, 22,
478 10, 25, 12, 38, 18, -3, 22, -4, -3, 0,
479 -13, 3, -10, 11, -23, -2, 10, -7, -5, -7,
481 -15, 0, -2, -10, 13, -7, 14, -35, 10, -23,
482 -16, -31, -37, -21, -16, 17, -6, 26, 10, 21,
483 16, 21, 13, 25, 19, -13, 8, -19, -5, -7,
484 -1, 8, -2, 36, -5, 6, -3, 8, -15, 1,
486 -48, 4, 23, 9, 9, 17, 30, 2, 16, -3,
487 -26, -16, -40, 6, -35, -1, -28, 17, -12, 9,
488 0, 8, 11, 25, 5, -3, 10, -8, -6, -7,
489 -6, -22, -1, 11, 1, 21, 22, 7, 19, 5,
491 -26, -7, 11, -8, 5, -1, 17, -14, 1, -15,
492 -24, -30, -32, -1, -33, 16, -18, 14, 0, 8,
493 6, 4, 12, 12, 6, -13, -2, -23, -8, -15,
494 4, -17, 5, 36, 18, 30, 8, 22, 10, 14,
496 -30, 11, 15, 20, 0, 8, 9, -15, 15, 0,
497 -5, 9, -23, 6, -8, -13, -13, 7, -5, 3,
498 20, 19, 27, 31, 39, -7, 13, -11, 4, -19,
499 -8, 25, -3, 11, -7, -2, 4, -16, -18, -9,
501 -8, -1, 3, 2, -3, -10, -3, -32, 1, -12,
502 -2, -4, -15, -1, -7, 3, -2, 4, 6, 3,
503 26, 15, 29, 17, 40, -17, 0, -26, 2, -27,
504 2, 29, 4, 36, 10, 6, -9, 0, -27, 0,
506 -40, 2, 29, 22, -7, 14, 12, 5, 7, 7,
507 -12, 9, -18, 26, -26, -14, -24, -4, -16, -9,
508 10, 2, 26, 18, 26, -7, 1, -15, 1, -27,
509 -2, 0, 4, 11, 17, 21, 16, -1, 7, 3,
511 -18, -9, 17, 4, -11, -3, 0, -11, -7, -4,
512 -10, -3, -10, 18, -24, 3, -14, -7, -4, -10,
513 16, -1, 27, 4, 27, -17, -12, -30, 0, -35,
514 9, 3, 12, 36, 35, 30, 2, 13, -2, 11,
516 -66, -8, -23, -11, 14, 5, 17, 16, 19, 2,
517 3, -5, -18, -17, 10, 0, -1, 23, -6, 20,
518 -15, 18, -14, 22, 5, 10, 44, 23, 2, 26,
519 -9, 3, -4, -14, -12, -29, -7, -16, -7, -18,
521 -44, -20, -34, -29, 10, -13, 4, 0, 4, -9,
522 5, -19, -10, -24, 11, 17, 8, 20, 5, 19,
523 -9, 14, -12, 9, 6, 0, 30, 9, 0, 19,
524 2, 7, 2, 10, 5, -20, -21, -1, -17, -9,
526 -77, -16, -9, -9, 6, 11, 21, 37, 10, 10,
527 -4, -5, -13, 3, -7, 0, -13, 11, -17, 6,
528 -25, 1, -15, 9, -7, 9, 32, 19, 0, 18,
529 -2, -22, 3, -15, 12, -5, 4, -2, 17, -5,
531 -55, -28, -21, -27, 2, -7, 8, 20, -4, -1,
532 -1, -18, -5, -4, -5, 16, -2, 8, -5, 5,
533 -19, -2, -14, -3, -6, 0, 18, 4, -2, 11,
534 8, -18, 11, 10, 29, 3, -10, 13, 8, 3,
536 -58, -9, -16, 1, -2, 2, 0, 19, 10, 13,
537 17, 21, 3, 3, 19, -12, 2, 0, -10, 1,
538 -5, 12, 0, 15, 26, 5, 34, 16, 11, 7,
539 -4, 25, 2, -14, 3, -29, -13, -25, -20, -20,
541 -36, -21, -28, -16, -6, -16, -12, 2, -4, 2,
542 20, 7, 11, -4, 20, 4, 12, -2, 1, 0,
543 0, 8, 2, 2, 27, -4, 21, 2, 9, 0,
544 6, 29, 9, 10, 21, -21, -28, -10, -29, -11,
546 -69, -17, -3, 3, -10, 8, 3, 40, 1, 21,
547 10, 21, 8, 23, 1, -13, -8, -11, -21, -11,
548 -15, -4, 0, 2, 13, 5, 23, 12, 7, 0,
549 1, 0, 10, -14, 28, -5, -1, -11, 5, -7,
551 -47, -30, -15, -14, -14, -9, -9, 23, -13, 10,
552 12, 7, 16, 15, 3, 3, 1, -14, -9, -12,
553 -9, -8, 0, -10, 14, -4, 9, -2, 5, -8,
554 13, 3, 18, 10, 45, 3, -16, 4, -4, 0,
556 -79, 11, -15, 4, 18, 23, 20, 5, 30, 7,
557 -7, -2, -21, -21, -8, -3, -10, 28, 4, 31,
558 6, 25, -3, 37, 4, -7, 20, 0, 4, 4,
559 -11, 7, -6, 8, -27, -22, -14, -12, -5, -16,
561 -57, 0, -27, -13, 14, 5, 7, -11, 15, -4,
562 -5, -16, -13, -29, -6, 13, 0, 25, 16, 31,
563 12, 22, -2, 23, 6, -16, 7, -14, 2, -3,
564 0, 12, 0, 33, -9, -13, -28, 3, -14, -7,
566 -90, 3, -2, 6, 10, 29, 24, 26, 21, 15,
567 -15, -2, -16, -1, -25, -4, -21, 16, -6, 18,
568 -3, 8, -5, 24, -8, -7, 9, -4, 1, -3,
569 -5, -18, 1, 7, -2, 1, -2, 1, 19, -3,
571 -67, -8, -14, -11, 7, 11, 11, 9, 7, 3,
572 -13, -16, -8, -9, -24, 12, -10, 13, 5, 17,
573 2, 4, -3, 10, -6, -17, -4, -19, 0, -11,
574 6, -13, 9, 33, 14, 10, -16, 17, 10, 4,
576 -71, 10, -9, 17, 1, 20, 3, 8, 21, 18,
577 6, 24, 0, -1, 0, -16, -6, 5, 0, 13,
578 17, 19, 11, 29, 25, -11, 11, -6, 13, -15,
579 -7, 29, 0, 8, -11, -22, -20, -21, -17, -18,
581 -49, -2, -21, 0, -1, 2, -9, -8, 6, 6,
582 8, 10, 8, -9, 2, 0, 4, 2, 13, 12,
583 23, 15, 12, 16, 26, -21, -2, -21, 11, -23,
584 4, 33, 7, 33, 6, -13, -34, -5, -27, -10,
586 -82, 1, 4, 19, -6, 27, 6, 29, 12, 26,
587 -1, 24, 5, 18, -17, -17, -17, -6, -10, 0,
588 7, 2, 9, 16, 12, -11, 0, -11, 9, -23,
589 0, 3, 8, 8, 13, 1, -8, -7, 7, -6,
591 -60, -10, -7, 1, -9, 8, -6, 13, -2, 15,
592 1, 10, 13, 11, -15, 0, -6, -9, 1, 0,
593 13, -1, 11, 3, 13, -21, -13, -26, 7, -31,
594 10, 7, 16, 33, 31, 10, -22, 8, -1, 2,
596 -3, 7, -5, -5, 8, -2, 17, -9, 18, -24,
597 -2, -19, -10, -4, 28, 17, 5, 28, -2, 7,
598 -4, 15, 7, 8, 6, 23, 13, 21, -14, 20,
599 -17, -18, -11, -33, -30, -11, 23, -13, -5, -9,
601 18, -4, -17, -23, 4, -20, 4, -26, 3, -36,
602 0, -32, -2, -12, 29, 34, 16, 24, 10, 6,
603 0, 12, 8, -4, 8, 13, 0, 6, -16, 12,
604 -5, -13, -3, -7, -13, -3, 8, 2, -14, 0,
606 -13, 0, 8, -3, 0, 4, 21, 11, 9, -16,
607 -10, -18, -5, 16, 10, 16, -5, 15, -13, -5,
608 -15, -1, 6, -4, -6, 23, 2, 16, -17, 12,
609 -10, -44, -3, -33, -6, 12, 34, 1, 20, 3,
611 8, -12, -3, -21, -3, -14, 8, -5, -4, -28,
612 -7, -32, 2, 8, 12, 34, 4, 12, -1, -6,
613 -9, -4, 7, -17, -4, 13, -11, 1, -19, 4,
614 0, -39, 4, -7, 11, 21, 20, 16, 10, 11,
616 4, 6, 0, 7, -8, -4, 0, -6, 9, -13,
617 11, 7, 11, 15, 37, 4, 9, 5, -5, -11,
618 5, 9, 22, 1, 27, 18, 4, 14, -5, 0,
619 -12, 3, -4, -32, -14, -12, 17, -22, -17, -11,
621 26, -6, -11, -10, -12, -23, -12, -23, -5, -24,
622 13, -5, 19, 8, 38, 21, 20, 2, 6, -12,
623 11, 5, 23, -11, 29, 9, -9, 0, -7, -6,
624 -1, 7, 2, -7, 3, -3, 2, -6, -27, -3,
626 -6, -2, 14, 9, -16, 1, 3, 14, 0, -5,
627 3, 8, 16, 36, 19, 3, -1, -6, -17, -24,
628 -4, -7, 21, -11, 14, 18, -7, 9, -9, -7,
629 -6, -22, 3, -33, 10, 11, 28, -7, 7, 0,
631 16, -14, 2, -8, -20, -17, -9, -2, -14, -16,
632 6, -5, 24, 28, 21, 20, 8, -9, -4, -25,
633 1, -11, 22, -24, 15, 8, -21, -5, -11, -14,
634 5, -18, 11, -7, 27, 20, 14, 7, -1, 9,
636 -16, 27, 2, 10, 13, 16, 20, -20, 29, -20,
637 -14, -16, -13, -8, 9, 13, -2, 33, 9, 19,
638 17, 23, 17, 22, 6, 6, -9, -2, -12, -2,
639 -20, -13, -13, -10, -45, -4, 16, -8, -2, -7,
641 5, 15, -9, -7, 9, -2, 8, -37, 14, -31,
642 -11, -29, -5, -16, 11, 30, 7, 29, 21, 18,
643 23, 19, 18, 9, 7, -3, -23, -17, -14, -9,
644 -8, -9, -6, 15, -27, 4, 2, 6, -12, 1,
646 -26, 19, 15, 12, 5, 22, 24, 0, 21, -12,
647 -21, -15, -8, 11, -7, 12, -14, 20, -2, 6,
648 7, 6, 16, 9, -6, 5, -21, -7, -15, -10,
649 -13, -39, -5, -10, -20, 19, 28, 5, 22, 5,
651 -4, 6, 3, -5, 1, 4, 11, -16, 6, -23,
652 -19, -29, 0, 3, -6, 30, -3, 17, 10, 5,
653 13, 2, 17, -3, -5, -3, -35, -21, -17, -17,
654 -2, -35, 2, 15, -3, 28, 13, 21, 13, 13,
656 -8, 25, 8, 23, -3, 13, 3, -17, 20, -8,
657 0, 10, 8, 11, 18, 0, 1, 10, 5, 0,
658 28, 17, 32, 15, 26, 1, -19, -9, -3, -21,
659 -15, 7, -6, -9, -29, -5, 10, -17, -15, -9,
661 13, 13, -3, 5, -7, -4, -9, -34, 5, -20,
662 2, -3, 16, 3, 20, 17, 11, 7, 17, 0,
663 34, 13, 33, 2, 28, -8, -32, -24, -5, -29,
664 -3, 12, 0, 15, -11, 3, -3, -2, -24, -1,
666 -18, 17, 21, 25, -11, 19, 6, 3, 11, 0,
667 -7, 11, 13, 31, 1, 0, -9, -1, -5, -12,
668 18, 0, 31, 2, 13, 1, -30, -14, -7, -29,
669 -9, -18, 1, -10, -4, 18, 22, -3, 10, 2,
671 3, 5, 9, 7, -15, 1, -5, -13, -2, -12,
672 -5, -2, 21, 23, 2, 16, 0, -5, 6, -13,
673 23, -3, 32, -10, 15, -8, -44, -28, -9, -37,
674 2, -13, 9, 15, 12, 27, 7, 12, 0, 11,
676 -44, 6, -30, -8, 9, 10, 11, 14, 23, -5,
677 8, -4, 14, -12, 37, 14, 12, 26, 4, 16,
678 -8, 16, -9, 7, -6, 19, 12, 25, -5, 24,
679 -15, -13, -8, -36, -34, -31, -1, -18, -4, -18,
681 -22, -5, -42, -26, 6, -8, -1, -2, 9, -17,
682 10, -18, 21, -19, 39, 31, 23, 23, 16, 15,
683 -2, 12, -7, -6, -5, 9, -1, 10, -7, 16,
684 -4, -9, 0, -10, -17, -22, -16, -2, -14, -9,
686 -55, -1, -17, -6, 1, 16, 15, 35, 15, 2,
687 0, -4, 19, 8, 20, 13, 1, 14, -7, 3,
688 -18, 0, -10, -5, -19, 19, 0, 21, -8, 16,
689 -9, -39, 0, -36, -10, -7, 9, -4, 20, -5,
691 -33, -13, -29, -24, -1, -1, 2, 18, 0, -9,
692 3, -17, 27, 0, 21, 30, 12, 11, 5, 2,
693 -12, -4, -9, -19, -18, 9, -13, 6, -11, 8,
694 2, -35, 8, -10, 7, 1, -4, 11, 10, 2,
696 -36, 5, -24, 4, -7, 7, -6, 17, 14, 5,
697 22, 22, 35, 8, 46, 1, 17, 3, 0, -2,
698 2, 10, 5, 0, 14, 15, 2, 18, 2, 4,
699 -11, 7, -1, -36, -18, -32, -7, -27, -17, -20,
701 -14, -7, -36, -13, -10, -10, -18, 0, 0, -5,
702 25, 8, 43, 0, 48, 18, 27, 0, 12, -3,
703 7, 6, 7, -13, 15, 5, -11, 3, 0, -2,
704 0, 12, 6, -10, 0, -23, -22, -11, -26, -12,
706 -47, -3, -11, 6, -15, 13, -2, 38, 6, 13,
707 15, 22, 40, 28, 28, 0, 5, -8, -10, -15,
708 -7, -7, 4, -13, 1, 14, -9, 14, 0, -2,
709 -4, -18, 7, -36, 6, -8, 3, -13, 7, -8,
711 -25, -15, -22, -11, -18, -4, -15, 22, -8, 2,
712 17, 9, 48, 20, 30, 17, 16, -11, 1, -16,
713 -2, -10, 5, -26, 2, 4, -22, 0, -2, -10,
714 6, -13, 14, -10, 23, 0, -10, 2, -1, 0,
716 -57, 26, -22, 7, 14, 28, 14, 3, 35, 0,
717 -3, -1, 11, -16, 18, 10, 4, 31, 15, 28,
718 14, 23, 1, 21, -7, 2, -11, 1, -3, 1,
719 -18, -9, -10, -13, -49, -24, -8, -14, -2, -16,
721 -35, 14, -34, -10, 10, 10, 1, -12, 20, -12,
722 0, -15, 18, -24, 20, 27, 14, 28, 27, 27,
723 20, 19, 2, 8, -5, -7, -25, -13, -5, -5,
724 -6, -5, -2, 12, -31, -15, -23, 1, -12, -8,
726 -68, 18, -9, 9, 6, 35, 18, 25, 26, 7,
727 -10, -1, 16, 3, 1, 9, -6, 19, 4, 15,
728 4, 6, 0, 8, -20, 2, -23, -2, -7, -5,
729 -12, -35, -1, -13, -24, 0, 3, 0, 22, -4,
731 -46, 6, -21, -8, 2, 16, 5, 8, 11, -4,
732 -8, -15, 24, -4, 2, 26, 3, 16, 16, 14,
733 9, 2, 1, -4, -19, -7, -36, -17, -9, -13,
734 0, -31, 5, 12, -7, 8, -11, 15, 13, 4,
736 -49, 24, -16, 20, -2, 26, -2, 7, 25, 10,
737 11, 25, 32, 3, 27, -2, 8, 8, 11, 9,
738 24, 17, 16, 14, 13, -2, -20, -5, 4, -17,
739 -14, 12, -3, -13, -33, -25, -14, -23, -15, -19,
741 -27, 12, -28, 2, -6, 7, -15, -9, 11, -1,
742 13, 11, 40, -4, 29, 14, 19, 5, 23, 8,
743 30, 13, 17, 0, 14, -12, -34, -20, 2, -25,
744 -2, 16, 4, 12, -15, -16, -29, -7, -24, -10,
746 -60, 16, -3, 22, -10, 32, 0, 28, 17, 18,
747 3, 25, 37, 23, 10, -3, -2, -3, 0, -3,
748 14, 0, 14, 1, 0, -2, -32, -9, 1, -25,
749 -7, -13, 5, -13, -8, -1, -2, -8, 10, -6,
751 -38, 4, -15, 4, -14, 13, -12, 11, 2, 6,
752 6, 11, 45, 16, 11, 13, 7, -6, 12, -4,
753 20, -3, 16, -12, 1, -12, -46, -24, 0, -33,
754 3, -9, 12, 12, 8, 7, -17, 6, 0, 2
758 const int8_t ff_cb2_vects[128][40]={
760 73, -32, -60, -15, -26, 59, 2, -33, 30, -10,
761 -3, -17, 8, 30, -1, -26, -4, -22, 10, 16,
762 -36, -5, -11, 56, 37, 6, -10, -5, -13, -3,
763 6, -5, 11, 4, -19, -5, -16, 41, 24, 13,
765 4, -11, -37, 23, -5, 46, -2, -29, -5, -39,
766 -21, -9, 0, 49, 12, -9, -16, -26, 22, 15,
767 -45, -20, -5, 40, 22, 17, -26, 31, -14, 2,
768 -14, 10, 30, 20, -27, -9, -39, 39, 18, 5,
770 34, -25, -48, -28, -11, 34, -2, -41, 9, -7,
771 -17, 21, 20, 24, -17, -33, 0, -24, 10, 42,
772 3, -5, 10, 42, 11, 8, -3, 3, 16, 9,
773 22, -2, 0, -33, -10, 18, 7, 58, 10, 28,
775 -34, -4, -25, 10, 9, 21, -7, -36, -26, -36,
776 -35, 28, 12, 42, -3, -16, -12, -28, 21, 42,
777 -5, -21, 16, 26, -4, 19, -19, 39, 15, 15,
778 1, 13, 19, -17, -17, 14, -15, 55, 4, 19,
780 28, -20, -51, -14, -6, 7, 0, -26, 27, -4,
781 18, -40, -6, 16, -1, -15, 0, -55, -5, -16,
782 -19, 14, -3, 49, 14, 1, -22, -30, -12, 0,
783 24, 15, 9, -17, -45, -29, 4, 28, 51, 35,
785 -40, 0, -28, 24, 14, -5, -4, -21, -7, -33,
786 0, -32, -15, 35, 12, 1, -11, -58, 5, -16,
787 -28, 0, 1, 33, 0, 11, -39, 5, -14, 6,
788 3, 31, 28, -1, -53, -33, -19, 25, 46, 26,
790 -11, -14, -39, -27, 9, -17, -4, -33, 6, 0,
791 4, -1, 5, 10, -17, -22, 5, -57, -5, 9,
792 20, 13, 18, 35, -11, 3, -16, -22, 17, 13,
793 40, 19, -1, -55, -35, -5, 27, 44, 37, 49,
795 -80, 6, -16, 11, 30, -30, -9, -28, -28, -29,
796 -13, 6, -2, 28, -3, -5, -7, -60, 5, 9,
797 11, -1, 24, 19, -27, 13, -32, 13, 15, 19,
798 19, 35, 17, -39, -43, -9, 4, 42, 32, 41,
800 78, -21, -43, 4, -38, 17, 17, -5, 55, 24,
801 -15, -36, 14, 4, 24, -24, 12, 5, 17, 31,
802 -54, -5, -2, 27, 43, -12, 2, 9, -9, -15,
803 22, -3, 28, 21, -20, 3, 20, 28, 9, -5,
805 9, -1, -20, 43, -17, 3, 12, 0, 20, -4,
806 -33, -29, 6, 22, 38, -7, 0, 1, 29, 30,
807 -63, -21, 3, 11, 27, -1, -14, 45, -10, -9,
808 1, 12, 47, 37, -28, 0, -2, 26, 4, -13,
810 39, -14, -30, -8, -22, -8, 12, -12, 34, 27,
811 -29, 2, 26, -2, 8, -31, 16, 3, 17, 57,
812 -14, -6, 19, 13, 16, -10, 8, 17, 20, -2,
813 38, 0, 17, -16, -11, 27, 44, 45, -4, 8,
815 -29, 5, -7, 30, -1, -21, 7, -7, 0, 0,
816 -47, 9, 18, 15, 22, -14, 4, 0, 28, 57,
817 -23, -21, 25, -2, 1, 0, -7, 53, 19, 3,
818 17, 15, 36, 0, -19, 24, 21, 43, -9, 0,
820 33, -10, -34, 5, -17, -35, 15, 1, 53, 30,
821 6, -59, 0, -10, 24, -13, 17, -27, 1, -1,
822 -37, 13, 4, 20, 20, -18, -10, -16, -8, -11,
823 39, 18, 26, 0, -46, -20, 41, 15, 37, 15,
825 -35, 10, -11, 44, 3, -48, 10, 6, 17, 2,
826 -11, -51, -8, 8, 38, 3, 4, -31, 12, -2,
827 -46, -1, 10, 4, 5, -7, -26, 19, -10, -5,
828 18, 34, 45, 15, -54, -24, 18, 13, 31, 7,
830 -5, -3, -21, -7, -2, -60, 10, -5, 32, 34,
831 -7, -20, 11, -16, 8, -20, 21, -29, 1, 24,
832 2, 13, 27, 6, -5, -15, -3, -8, 21, 1,
833 55, 21, 15, -38, -37, 3, 65, 32, 23, 30,
835 -74, 17, 0, 31, 18, -73, 5, 0, -3, 5,
836 -25, -12, 3, 1, 22, -3, 9, -33, 12, 24,
837 -6, -2, 33, -9, -21, -5, -20, 27, 19, 7,
838 34, 37, 34, -22, -44, 0, 41, 29, 17, 21,
840 76, -35, -31, -28, -49, 43, -40, 0, 29, -14,
841 8, 5, 10, 18, -26, -46, 0, 7, 6, 3,
842 -25, -7, -2, 40, 28, 14, 18, -3, -27, -28,
843 -8, -45, -13, 34, -13, -27, -15, 31, 12, 3,
845 7, -15, -9, 9, -28, 29, -45, 5, -6, -43,
846 -9, 12, 2, 36, -12, -30, -11, 3, 17, 3,
847 -34, -22, 3, 24, 12, 24, 2, 32, -28, -22,
848 -29, -29, 5, 50, -21, -31, -38, 29, 7, -5,
850 36, -29, -19, -41, -34, 18, -45, -6, 8, -10,
851 -5, 43, 23, 11, -42, -53, 5, 5, 6, 30,
852 14, -8, 20, 26, 1, 16, 25, 4, 3, -15,
853 7, -41, -23, -3, -4, -3, 8, 48, -1, 17,
855 -32, -8, 3, -2, -13, 4, -50, -1, -27, -39,
856 -23, 51, 15, 30, -27, -37, -7, 1, 17, 29,
857 5, -23, 25, 10, -14, 26, 8, 41, 1, -9,
858 -13, -26, -5, 12, -12, -7, -14, 45, -6, 9,
860 31, -24, -23, -27, -29, -9, -43, 8, 26, -7,
861 30, -17, -4, 3, -26, -35, 5, -24, -10, -28,
862 -9, 12, 5, 33, 5, 8, 5, -29, -26, -24,
863 9, -23, -14, 12, -39, -52, 5, 18, 39, 24,
865 -37, -3, 0, 10, -7, -22, -48, 12, -8, -36,
866 12, -9, -12, 22, -12, -19, -6, -28, 0, -29,
867 -18, -3, 11, 17, -10, 18, -10, 7, -27, -18,
868 -11, -7, 3, 28, -47, -55, -18, 15, 34, 16,
870 -8, -17, -10, -40, -13, -34, -47, 0, 5, -4,
871 16, 21, 8, -2, -42, -43, 10, -26, -10, -2,
872 31, 11, 27, 19, -21, 10, 12, -20, 3, -11,
873 25, -20, -25, -25, -29, -28, 28, 34, 25, 38,
875 -77, 2, 11, -1, 7, -47, -52, 5, -29, -33,
876 -1, 28, 0, 15, -28, -26, -2, -30, 0, -2,
877 22, -4, 33, 3, -36, 21, -3, 15, 2, -5,
878 4, -4, -6, -9, -37, -31, 5, 32, 20, 30,
880 81, -25, -14, -8, -61, 0, -25, 28, 54, 20,
881 -3, -14, 17, -8, 0, -44, 16, 35, 13, 18,
882 -43, -7, 6, 11, 33, -4, 30, 11, -22, -40,
883 6, -43, 3, 50, -14, -18, 22, 18, -1, -16,
885 12, -4, 8, 29, -39, -12, -30, 33, 19, -8,
886 -21, -6, 8, 9, 13, -28, 4, 31, 24, 18,
887 -52, -23, 12, -4, 18, 5, 14, 47, -24, -34,
888 -14, -27, 22, 66, -22, -22, -1, 16, -6, -24,
890 41, -18, -2, -21, -45, -24, -30, 21, 33, 24,
891 -17, 24, 29, -15, -16, -51, 21, 33, 13, 45,
892 -3, -8, 28, -2, 7, -2, 37, 19, 7, -27,
893 22, -39, -7, 12, -5, 5, 45, 35, -15, -1,
895 -27, 1, 20, 17, -24, -38, -35, 26, -1, -4,
896 -35, 32, 21, 3, -2, -35, 8, 29, 24, 44,
897 -12, -24, 34, -18, -8, 7, 21, 55, 5, -21,
898 2, -23, 11, 28, -13, 1, 22, 33, -21, -10,
900 36, -13, -5, -7, -40, -51, -28, 36, 52, 27,
901 18, -36, 2, -22, 0, -33, 21, 2, -3, -13,
902 -26, 11, 14, 4, 10, -10, 18, -14, -22, -36,
903 24, -21, 1, 28, -40, -42, 42, 5, 25, 5,
905 -32, 6, 17, 31, -19, -65, -33, 41, 16, -1,
906 0, -29, -6, -4, 13, -17, 9, -1, 8, -14,
907 -35, -3, 19, -11, -4, 0, 1, 21, -23, -30,
908 3, -5, 20, 44, -48, -46, 19, 3, 20, -3,
910 -3, -7, 6, -20, -25, -77, -32, 29, 31, 30,
911 4, 2, 14, -29, -16, -40, 26, 0, -3, 12,
912 13, 10, 36, -9, -15, -8, 24, -6, 7, -22,
913 40, -17, -8, -9, -31, -18, 66, 22, 11, 19,
915 -72, 13, 29, 18, -4, -90, -37, 34, -4, 1,
916 -13, 9, 6, -11, -2, -24, 13, -3, 7, 11,
917 4, -4, 42, -25, -31, 1, 8, 29, 6, -17,
918 19, -2, 10, 6, -38, -22, 42, 19, 6, 11,
920 116, -20, -68, -30, -28, 83, 28, -18, 32, -22,
921 -13, -21, 5, 28, 5, -7, -24, -8, -22, 17,
922 -23, 30, -25, 45, 15, -9, -11, -18, 22, -10,
923 4, -2, 19, -12, 23, 3, -43, 2, 12, -4,
925 47, 0, -45, 7, -7, 69, 23, -13, -2, -51,
926 -32, -14, -3, 47, 19, 8, -37, -11, -10, 16,
927 -32, 15, -19, 29, 0, 1, -28, 18, 20, -4,
928 -16, 13, 38, 3, 15, 0, -66, 0, 7, -13,
930 77, -13, -56, -43, -13, 57, 23, -26, 11, -19,
931 -27, 16, 17, 22, -10, -15, -19, -10, -22, 43,
932 16, 30, -2, 31, -11, -6, -5, -9, 52, 2,
933 20, 0, 8, -50, 33, 27, -19, 19, -1, 9,
935 8, 6, -33, -4, 7, 44, 18, -21, -23, -48,
936 -46, 24, 9, 40, 3, 1, -32, -13, -11, 43,
937 7, 14, 3, 15, -26, 3, -21, 26, 50, 8,
938 0, 16, 27, -34, 25, 23, -43, 17, -6, 1,
940 71, -9, -59, -29, -8, 30, 26, -11, 30, -16,
941 8, -44, -9, 14, 5, 2, -19, -40, -38, -15,
942 -7, 50, -17, 38, -7, -14, -24, -43, 22, -6,
943 22, 19, 17, -34, -2, -20, -23, -10, 39, 16,
945 2, 11, -36, 9, 13, 17, 21, -6, -5, -45,
946 -10, -36, -18, 33, 19, 19, -31, -44, -27, -15,
947 -16, 34, -11, 22, -22, -4, -40, -7, 21, 0,
948 1, 35, 36, -18, -10, -24, -46, -12, 34, 8,
950 32, -2, -47, -42, 7, 5, 21, -18, 9, -12,
951 -5, -5, 2, 8, -10, -4, -14, -42, -38, 10,
952 33, 49, 5, 24, -33, -12, -17, -35, 52, 6,
953 38, 22, 7, -72, 7, 3, 0, 6, 25, 30,
955 -36, 18, -24, -3, 28, -7, 16, -13, -26, -41,
956 -24, 1, -5, 26, 3, 12, -27, -46, -27, 10,
957 24, 34, 10, 8, -49, -2, -34, 0, 51, 12,
958 17, 38, 25, -56, 0, 0, -22, 3, 20, 22,
960 121, -9, -50, -10, -40, 40, 43, 9, 58, 12,
961 -25, -41, 11, 2, 31, -5, -8, 19, -15, 32,
962 -41, 30, -16, 16, 20, -28, 0, -3, 26, -22,
963 19, 0, 36, 4, 22, 12, -6, -9, -1, -24,
965 52, 10, -27, 27, -18, 26, 38, 14, 23, -16,
966 -44, -33, 3, 20, 45, 10, -20, 15, -3, 31,
967 -50, 14, -10, 0, 5, -17, -15, 32, 24, -16,
968 -1, 15, 55, 20, 14, 8, -29, -12, -7, -32,
970 82, -3, -38, -23, -24, 15, 38, 2, 37, 15,
971 -39, -2, 23, -4, 15, -12, -3, 17, -15, 58,
972 -1, 29, 6, 2, -5, -26, 7, 4, 56, -9,
973 35, 3, 25, -33, 32, 36, 17, 7, -15, -9,
975 13, 17, -15, 15, -3, 1, 33, 7, 1, -12,
976 -58, 5, 15, 13, 29, 3, -16, 13, -4, 57,
977 -10, 13, 11, -13, -21, -15, -9, 40, 55, -3,
978 14, 19, 44, -17, 24, 32, -5, 4, -21, -18,
980 76, 1, -41, -9, -19, -12, 41, 17, 55, 18,
981 -3, -63, -3, -12, 30, 5, -3, -12, -31, 0,
982 -24, 49, -8, 9, -1, -33, -12, -29, 27, -18,
983 37, 21, 34, -17, -3, -11, 14, -23, 25, -2,
985 7, 22, -18, 29, 1, -25, 36, 21, 20, -9,
986 -22, -56, -11, 6, 45, 21, -15, -16, -20, -1,
987 -33, 34, -2, -6, -17, -23, -28, 6, 25, -12,
988 16, 37, 53, -1, -11, -15, -8, -25, 20, -11,
990 37, 8, -29, -22, -4, -37, 36, 9, 34, 22,
991 -17, -24, 8, -18, 15, -2, 1, -14, -31, 25,
992 15, 48, 13, -4, -28, -31, -5, -21, 57, -4,
993 53, 24, 23, -55, 6, 12, 37, -6, 11, 11,
995 -31, 28, -6, 16, 16, -50, 31, 14, 0, -6,
996 -36, -17, 0, 0, 29, 14, -11, -18, -20, 25,
997 6, 33, 19, -20, -43, -21, -21, 14, 55, 0,
998 32, 40, 42, -39, -1, 8, 14, -8, 6, 3,
1000 119, -24, -39, -44, -51, 66, -14, 15, 31, -26,
1001 -1, 0, 7, 16, -19, -28, -19, 22, -26, 4,
1002 -13, 28, -16, 29, 5, -1, 16, -16, 8, -35,
1003 -10, -42, -4, 17, 29, -19, -42, -7, 0, -15,
1005 50, -3, -16, -5, -30, 53, -19, 20, -3, -55,
1006 -19, 8, 0, 34, -5, -11, -32, 18, -15, 4,
1007 -22, 13, -10, 13, -9, 8, 0, 19, 7, -29,
1008 -31, -26, 13, 33, 21, -22, -65, -9, -4, -23,
1010 79, -17, -27, -56, -36, 41, -19, 8, 10, -22,
1011 -15, 39, 20, 9, -35, -35, -15, 20, -26, 31,
1012 26, 27, 6, 15, -20, 0, 23, -8, 38, -22,
1013 5, -38, -15, -20, 39, 4, -18, 9, -13, -1,
1015 10, 3, -4, -18, -15, 27, -24, 13, -24, -51,
1016 -34, 47, 12, 28, -21, -19, -27, 16, -15, 30,
1017 17, 12, 12, 0, -36, 10, 7, 27, 37, -16,
1018 -15, -22, 3, -4, 31, 1, -42, 7, -18, -9,
1020 74, -12, -30, -42, -30, 14, -16, 23, 29, -19,
1021 20, -21, -7, 1, -19, -17, -14, -10, -43, -27,
1022 3, 48, -8, 22, -16, -7, 4, -42, 9, -31,
1023 6, -20, -6, -4, 3, -43, -22, -20, 28, 5,
1025 5, 7, -7, -4, -9, 0, -21, 28, -6, -48,
1026 2, -14, -15, 20, -5, 0, -27, -14, -32, -28,
1027 -5, 32, -2, 6, -32, 3, -12, -5, 8, -25,
1028 -14, -4, 12, 11, -4, -47, -45, -22, 22, -2,
1030 34, -6, -18, -55, -15, -11, -21, 16, 8, -16,
1031 6, 16, 5, -4, -35, -24, -10, -12, -43, -1,
1032 43, 47, 14, 8, -43, -5, 10, -34, 39, -18,
1033 22, -16, -17, -42, 13, -19, 1, -3, 14, 20,
1035 -34, 14, 4, -17, 5, -24, -26, 20, -27, -45,
1036 -12, 24, -2, 13, -21, -8, -22, -16, -32, -2,
1037 34, 31, 20, -7, -58, 5, -5, 2, 38, -12,
1038 2, -1, 1, -26, 5, -23, -21, -6, 8, 11,
1040 124, -13, -21, -23, -62, 23, 0, 43, 57, 8,
1041 -13, -18, 14, -10, 6, -26, -3, 49, -19, 19,
1042 -31, 27, -7, 0, 11, -20, 29, -1, 12, -47,
1043 4, -39, 11, 34, 28, -9, -5, -19, -13, -34,
1045 55, 6, 1, 14, -41, 10, -4, 48, 22, -20,
1046 -31, -10, 5, 7, 20, -9, -16, 45, -8, 19,
1047 -40, 12, -1, -15, -4, -10, 12, 34, 11, -41,
1048 -16, -24, 30, 49, 20, -13, -28, -22, -18, -43,
1050 84, -6, -9, -36, -47, -1, -4, 36, 36, 12,
1051 -27, 20, 26, -17, -9, -33, 1, 47, -19, 46,
1052 9, 27, 15, -13, -15, -18, 35, 6, 42, -33,
1053 20, -36, 1, -4, 38, 14, 18, -2, -27, -20,
1055 15, 13, 13, 1, -26, -14, -9, 41, 1, -16,
1056 -46, 27, 18, 1, 4, -16, -11, 43, -8, 45,
1057 0, 11, 21, -29, -30, -8, 19, 42, 41, -28,
1058 0, -20, 20, 11, 30, 10, -4, -5, -32, -28,
1060 79, -2, -12, -22, -42, -28, -1, 51, 54, 15,
1061 8, -41, 0, -24, 6, -15, 1, 17, -36, -12,
1062 -14, 47, 0, -6, -11, -26, 16, -27, 13, -43,
1063 22, -18, 10, 12, 2, -34, 15, -33, 13, -13,
1065 10, 18, 10, 15, -21, -41, -6, 56, 19, -13,
1066 -9, -33, -9, -6, 20, 1, -11, 13, -24, -13,
1067 -23, 32, 6, -22, -26, -15, 0, 8, 12, -37,
1068 1, -2, 28, 27, -5, -37, -7, -35, 8, -21,
1070 39, 4, 0, -35, -27, -53, -6, 44, 33, 18,
1071 -5, -2, 11, -31, -9, -22, 6, 15, -36, 13,
1072 25, 46, 23, -20, -37, -24, 23, -19, 43, -29,
1073 38, -14, 0, -26, 12, -10, 38, -16, 0, 0,
1075 -29, 25, 22, 2, -6, -67, -11, 49, -1, -10,
1076 -24, 5, 3, -13, 4, -5, -6, 11, -25, 12,
1077 16, 31, 28, -36, -53, -13, 6, 16, 42, -24,
1078 17, 1, 18, -10, 4, -13, 15, -18, -5, -7,
1080 29, -25, -22, -2, 6, 67, 11, -49, 1, 10,
1081 24, -5, -3, 13, -4, 5, 6, -11, 25, -12,
1082 -16, -31, -28, 36, 53, 13, -6, -16, -42, 24,
1083 -17, -1, -18, 10, -4, 13, -15, 18, 5, 7,
1085 -39, -4, 0, 35, 27, 53, 6, -44, -33, -18,
1086 5, 2, -11, 31, 9, 22, -6, -15, 36, -13,
1087 -25, -46, -23, 20, 37, 24, -23, 19, -43, 29,
1088 -38, 14, 0, 26, -12, 10, -38, 16, 0, 0,
1090 -10, -18, -10, -15, 21, 41, 6, -56, -19, 13,
1091 9, 33, 9, 6, -20, -1, 11, -13, 24, 13,
1092 23, -32, -6, 22, 26, 15, 0, -8, -12, 37,
1093 -1, 2, -28, -27, 5, 37, 7, 35, -8, 21,
1095 -79, 2, 12, 22, 42, 28, 1, -51, -54, -15,
1096 -8, 41, 0, 24, -6, 15, -1, -17, 36, 12,
1097 14, -47, 0, 6, 11, 26, -16, 27, -13, 43,
1098 -22, 18, -10, -12, -2, 34, -15, 33, -13, 13,
1100 -15, -13, -13, -1, 26, 14, 9, -41, -1, 16,
1101 46, -27, -18, -1, -4, 16, 11, -43, 8, -45,
1102 0, -11, -21, 29, 30, 8, -19, -42, -41, 28,
1103 0, 20, -20, -11, -30, -10, 4, 5, 32, 28,
1105 -84, 6, 9, 36, 47, 1, 4, -36, -36, -12,
1106 27, -20, -26, 17, 9, 33, -1, -47, 19, -46,
1107 -9, -27, -15, 13, 15, 18, -35, -6, -42, 33,
1108 -20, 36, -1, 4, -38, -14, -18, 2, 27, 20,
1110 -55, -6, -1, -14, 41, -10, 4, -48, -22, 20,
1111 31, 10, -5, -7, -20, 9, 16, -45, 8, -19,
1112 40, -12, 1, 15, 4, 10, -12, -34, -11, 41,
1113 16, 24, -30, -49, -20, 13, 28, 22, 18, 43,
1115 -124, 13, 21, 23, 62, -23, 0, -43, -57, -8,
1116 13, 18, -14, 10, -6, 26, 3, -49, 19, -19,
1117 31, -27, 7, 0, -11, 20, -29, 1, -12, 47,
1118 -4, 39, -11, -34, -28, 9, 5, 19, 13, 34,
1120 34, -14, -4, 17, -5, 24, 26, -20, 27, 45,
1121 12, -24, 2, -13, 21, 8, 22, 16, 32, 2,
1122 -34, -31, -20, 7, 58, -5, 5, -2, -38, 12,
1123 -2, 1, -1, 26, -5, 23, 21, 6, -8, -11,
1125 -34, 6, 18, 55, 15, 11, 21, -16, -8, 16,
1126 -6, -16, -5, 4, 35, 24, 10, 12, 43, 1,
1127 -43, -47, -14, -8, 43, 5, -10, 34, -39, 18,
1128 -22, 16, 17, 42, -13, 19, -1, 3, -14, -20,
1130 -5, -7, 7, 4, 9, 0, 21, -28, 6, 48,
1131 -2, 14, 15, -20, 5, 0, 27, 14, 32, 28,
1132 5, -32, 2, -6, 32, -3, 12, 5, -8, 25,
1133 14, 4, -12, -11, 4, 47, 45, 22, -22, 2,
1135 -74, 12, 30, 42, 30, -14, 16, -23, -29, 19,
1136 -20, 21, 7, -1, 19, 17, 14, 10, 43, 27,
1137 -3, -48, 8, -22, 16, 7, -4, 42, -9, 31,
1138 -6, 20, 6, 4, -3, 43, 22, 20, -28, -5,
1140 -10, -3, 4, 18, 15, -27, 24, -13, 24, 51,
1141 34, -47, -12, -28, 21, 19, 27, -16, 15, -30,
1142 -17, -12, -12, 0, 36, -10, -7, -27, -37, 16,
1143 15, 22, -3, 4, -31, -1, 42, -7, 18, 9,
1145 -79, 17, 27, 56, 36, -41, 19, -8, -10, 22,
1146 15, -39, -20, -9, 35, 35, 15, -20, 26, -31,
1147 -26, -27, -6, -15, 20, 0, -23, 8, -38, 22,
1148 -5, 38, 15, 20, -39, -4, 18, -9, 13, 1,
1150 -50, 3, 16, 5, 30, -53, 19, -20, 3, 55,
1151 19, -8, 0, -34, 5, 11, 32, -18, 15, -4,
1152 22, -13, 10, -13, 9, -8, 0, -19, -7, 29,
1153 31, 26, -13, -33, -21, 22, 65, 9, 4, 23,
1155 -119, 24, 39, 44, 51, -66, 14, -15, -31, 26,
1156 1, 0, -7, -16, 19, 28, 19, -22, 26, -4,
1157 13, -28, 16, -29, -5, 1, -16, 16, -8, 35,
1158 10, 42, 4, -17, -29, 19, 42, 7, 0, 15,
1160 31, -28, 6, -16, -16, 50, -31, -14, 0, 6,
1161 36, 17, 0, 0, -29, -14, 11, 18, 20, -25,
1162 -6, -33, -19, 20, 43, 21, 21, -14, -55, 0,
1163 -32, -40, -42, 39, 1, -8, -14, 8, -6, -3,
1165 -37, -8, 29, 22, 4, 37, -36, -9, -34, -22,
1166 17, 24, -8, 18, -15, 2, -1, 14, 31, -25,
1167 -15, -48, -13, 4, 28, 31, 5, 21, -57, 4,
1168 -53, -24, -23, 55, -6, -12, -37, 6, -11, -11,
1170 -7, -22, 18, -29, -1, 25, -36, -21, -20, 9,
1171 22, 56, 11, -6, -45, -21, 15, 16, 20, 1,
1172 33, -34, 2, 6, 17, 23, 28, -6, -25, 12,
1173 -16, -37, -53, 1, 11, 15, 8, 25, -20, 11,
1175 -76, -1, 41, 9, 19, 12, -41, -17, -55, -18,
1176 3, 63, 3, 12, -30, -5, 3, 12, 31, 0,
1177 24, -49, 8, -9, 1, 33, 12, 29, -27, 18,
1178 -37, -21, -34, 17, 3, 11, -14, 23, -25, 2,
1180 -13, -17, 15, -15, 3, -1, -33, -7, -1, 12,
1181 58, -5, -15, -13, -29, -3, 16, -13, 4, -57,
1182 10, -13, -11, 13, 21, 15, 9, -40, -55, 3,
1183 -14, -19, -44, 17, -24, -32, 5, -4, 21, 18,
1185 -82, 3, 38, 23, 24, -15, -38, -2, -37, -15,
1186 39, 2, -23, 4, -15, 12, 3, -17, 15, -58,
1187 1, -29, -6, -2, 5, 26, -7, -4, -56, 9,
1188 -35, -3, -25, 33, -32, -36, -17, -7, 15, 9,
1190 -52, -10, 27, -27, 18, -26, -38, -14, -23, 16,
1191 44, 33, -3, -20, -45, -10, 20, -15, 3, -31,
1192 50, -14, 10, 0, -5, 17, 15, -32, -24, 16,
1193 1, -15, -55, -20, -14, -8, 29, 12, 7, 32,
1195 -121, 9, 50, 10, 40, -40, -43, -9, -58, -12,
1196 25, 41, -11, -2, -31, 5, 8, -19, 15, -32,
1197 41, -30, 16, -16, -20, 28, 0, 3, -26, 22,
1198 -19, 0, -36, -4, -22, -12, 6, 9, 1, 24,
1200 36, -18, 24, 3, -28, 7, -16, 13, 26, 41,
1201 24, -1, 5, -26, -3, -12, 27, 46, 27, -10,
1202 -24, -34, -10, -8, 49, 2, 34, 0, -51, -12,
1203 -17, -38, -25, 56, 0, 0, 22, -3, -20, -22,
1205 -32, 2, 47, 42, -7, -5, -21, 18, -9, 12,
1206 5, 5, -2, -8, 10, 4, 14, 42, 38, -10,
1207 -33, -49, -5, -24, 33, 12, 17, 35, -52, -6,
1208 -38, -22, -7, 72, -7, -3, 0, -6, -25, -30,
1210 -2, -11, 36, -9, -13, -17, -21, 6, 5, 45,
1211 10, 36, 18, -33, -19, -19, 31, 44, 27, 15,
1212 16, -34, 11, -22, 22, 4, 40, 7, -21, 0,
1213 -1, -35, -36, 18, 10, 24, 46, 12, -34, -8,
1215 -71, 9, 59, 29, 8, -30, -26, 11, -30, 16,
1216 -8, 44, 9, -14, -5, -2, 19, 40, 38, 15,
1217 7, -50, 17, -38, 7, 14, 24, 43, -22, 6,
1218 -22, -19, -17, 34, 2, 20, 23, 10, -39, -16,
1220 -8, -6, 33, 4, -7, -44, -18, 21, 23, 48,
1221 46, -24, -9, -40, -3, -1, 32, 13, 11, -43,
1222 -7, -14, -3, -15, 26, -3, 21, -26, -50, -8,
1223 0, -16, -27, 34, -25, -23, 43, -17, 6, -1,
1225 -77, 13, 56, 43, 13, -57, -23, 26, -11, 19,
1226 27, -16, -17, -22, 10, 15, 19, 10, 22, -43,
1227 -16, -30, 2, -31, 11, 6, 5, 9, -52, -2,
1228 -20, 0, -8, 50, -33, -27, 19, -19, 1, -9,
1230 -47, 0, 45, -7, 7, -69, -23, 13, 2, 51,
1231 32, 14, 3, -47, -19, -8, 37, 11, 10, -16,
1232 32, -15, 19, -29, 0, -1, 28, -18, -20, 4,
1233 16, -13, -38, -3, -15, 0, 66, 0, -7, 13,
1235 -116, 20, 68, 30, 28, -83, -28, 18, -32, 22,
1236 13, 21, -5, -28, -5, 7, 24, 8, 22, -17,
1237 23, -30, 25, -45, -15, 9, 11, 18, -22, 10,
1238 -4, 2, -19, 12, -23, -3, 43, -2, -12, 4,
1240 72, -13, -29, -18, 4, 90, 37, -34, 4, -1,
1241 13, -9, -6, 11, 2, 24, -13, 3, -7, -11,
1242 -4, 4, -42, 25, 31, -1, -8, -29, -6, 17,
1243 -19, 2, -10, -6, 38, 22, -42, -19, -6, -11,
1245 3, 7, -6, 20, 25, 77, 32, -29, -31, -30,
1246 -4, -2, -14, 29, 16, 40, -26, 0, 3, -12,
1247 -13, -10, -36, 9, 15, 8, -24, 6, -7, 22,
1248 -40, 17, 8, 9, 31, 18, -66, -22, -11, -19,
1250 32, -6, -17, -31, 19, 65, 33, -41, -16, 1,
1251 0, 29, 6, 4, -13, 17, -9, 1, -8, 14,
1252 35, 3, -19, 11, 4, 0, -1, -21, 23, 30,
1253 -3, 5, -20, -44, 48, 46, -19, -3, -20, 3,
1255 -36, 13, 5, 7, 40, 51, 28, -36, -52, -27,
1256 -18, 36, -2, 22, 0, 33, -21, -2, 3, 13,
1257 26, -11, -14, -4, -10, 10, -18, 14, 22, 36,
1258 -24, 21, -1, -28, 40, 42, -42, -5, -25, -5,
1260 27, -1, -20, -17, 24, 38, 35, -26, 1, 4,
1261 35, -32, -21, -3, 2, 35, -8, -29, -24, -44,
1262 12, 24, -34, 18, 8, -7, -21, -55, -5, 21,
1263 -2, 23, -11, -28, 13, -1, -22, -33, 21, 10,
1265 -41, 18, 2, 21, 45, 24, 30, -21, -33, -24,
1266 17, -24, -29, 15, 16, 51, -21, -33, -13, -45,
1267 3, 8, -28, 2, -7, 2, -37, -19, -7, 27,
1268 -22, 39, 7, -12, 5, -5, -45, -35, 15, 1,
1270 -12, 4, -8, -29, 39, 12, 30, -33, -19, 8,
1271 21, 6, -8, -9, -13, 28, -4, -31, -24, -18,
1272 52, 23, -12, 4, -18, -5, -14, -47, 24, 34,
1273 14, 27, -22, -66, 22, 22, 1, -16, 6, 24,
1275 -81, 25, 14, 8, 61, 0, 25, -28, -54, -20,
1276 3, 14, -17, 8, 0, 44, -16, -35, -13, -18,
1277 43, 7, -6, -11, -33, 4, -30, -11, 22, 40,
1278 -6, 43, -3, -50, 14, 18, -22, -18, 1, 16,
1280 77, -2, -11, 1, -7, 47, 52, -5, 29, 33,
1281 1, -28, 0, -15, 28, 26, 2, 30, 0, 2,
1282 -22, 4, -33, -3, 36, -21, 3, -15, -2, 5,
1283 -4, 4, 6, 9, 37, 31, -5, -32, -20, -30,
1285 8, 17, 10, 40, 13, 34, 47, 0, -5, 4,
1286 -16, -21, -8, 2, 42, 43, -10, 26, 10, 2,
1287 -31, -11, -27, -19, 21, -10, -12, 20, -3, 11,
1288 -25, 20, 25, 25, 29, 28, -28, -34, -25, -38,
1290 37, 3, 0, -10, 7, 22, 48, -12, 8, 36,
1291 -12, 9, 12, -22, 12, 19, 6, 28, 0, 29,
1292 18, 3, -11, -17, 10, -18, 10, -7, 27, 18,
1293 11, 7, -3, -28, 47, 55, 18, -15, -34, -16,
1295 -31, 24, 23, 27, 29, 9, 43, -8, -26, 7,
1296 -30, 17, 4, -3, 26, 35, -5, 24, 10, 28,
1297 9, -12, -5, -33, -5, -8, -5, 29, 26, 24,
1298 -9, 23, 14, -12, 39, 52, -5, -18, -39, -24,
1300 32, 8, -3, 2, 13, -4, 50, 1, 27, 39,
1301 23, -51, -15, -30, 27, 37, 7, -1, -17, -29,
1302 -5, 23, -25, -10, 14, -26, -8, -41, -1, 9,
1303 13, 26, 5, -12, 12, 7, 14, -45, 6, -9,
1305 -36, 29, 19, 41, 34, -18, 45, 6, -8, 10,
1306 5, -43, -23, -11, 42, 53, -5, -5, -6, -30,
1307 -14, 8, -20, -26, -1, -16, -25, -4, -3, 15,
1308 -7, 41, 23, 3, 4, 3, -8, -48, 1, -17,
1310 -7, 15, 9, -9, 28, -29, 45, -5, 6, 43,
1311 9, -12, -2, -36, 12, 30, 11, -3, -17, -3,
1312 34, 22, -3, -24, -12, -24, -2, -32, 28, 22,
1313 29, 29, -5, -50, 21, 31, 38, -29, -7, 5,
1315 -76, 35, 31, 28, 49, -43, 40, 0, -29, 14,
1316 -8, -5, -10, -18, 26, 46, 0, -7, -6, -3,
1317 25, 7, 2, -40, -28, -14, -18, 3, 27, 28,
1318 8, 45, 13, -34, 13, 27, 15, -31, -12, -3,
1320 74, -17, 0, -31, -18, 73, -5, 0, 3, -5,
1321 25, 12, -3, -1, -22, 3, -9, 33, -12, -24,
1322 6, 2, -33, 9, 21, 5, 20, -27, -19, -7,
1323 -34, -37, -34, 22, 44, 0, -41, -29, -17, -21,
1325 5, 3, 21, 7, 2, 60, -10, 5, -32, -34,
1326 7, 20, -11, 16, -8, 20, -21, 29, -1, -24,
1327 -2, -13, -27, -6, 5, 15, 3, 8, -21, -1,
1328 -55, -21, -15, 38, 37, -3, -65, -32, -23, -30,
1330 35, -10, 11, -44, -3, 48, -10, -6, -17, -2,
1331 11, 51, 8, -8, -38, -3, -4, 31, -12, 2,
1332 46, 1, -10, -4, -5, 7, 26, -19, 10, 5,
1333 -18, -34, -45, -15, 54, 24, -18, -13, -31, -7,
1335 -33, 10, 34, -5, 17, 35, -15, -1, -53, -30,
1336 -6, 59, 0, 10, -24, 13, -17, 27, -1, 1,
1337 37, -13, -4, -20, -20, 18, 10, 16, 8, 11,
1338 -39, -18, -26, 0, 46, 20, -41, -15, -37, -15,
1340 29, -5, 7, -30, 1, 21, -7, 7, 0, 0,
1341 47, -9, -18, -15, -22, 14, -4, 0, -28, -57,
1342 23, 21, -25, 2, -1, 0, 7, -53, -19, -3,
1343 -17, -15, -36, 0, 19, -24, -21, -43, 9, 0,
1345 -39, 14, 30, 8, 22, 8, -12, 12, -34, -27,
1346 29, -2, -26, 2, -8, 31, -16, -3, -17, -57,
1347 14, 6, -19, -13, -16, 10, -8, -17, -20, 2,
1348 -38, 0, -17, 16, 11, -27, -44, -45, 4, -8,
1350 -9, 1, 20, -43, 17, -3, -12, 0, -20, 4,
1351 33, 29, -6, -22, -38, 7, 0, -1, -29, -30,
1352 63, 21, -3, -11, -27, 1, 14, -45, 10, 9,
1353 -1, -12, -47, -37, 28, 0, 2, -26, -4, 13,
1355 -78, 21, 43, -4, 38, -17, -17, 5, -55, -24,
1356 15, 36, -14, -4, -24, 24, -12, -5, -17, -31,
1357 54, 5, 2, -27, -43, 12, -2, -9, 9, 15,
1358 -22, 3, -28, -21, 20, -3, -20, -28, -9, 5,
1360 80, -6, 16, -11, -30, 30, 9, 28, 28, 29,
1361 13, -6, 2, -28, 3, 5, 7, 60, -5, -9,
1362 -11, 1, -24, -19, 27, -13, 32, -13, -15, -19,
1363 -19, -35, -17, 39, 43, 9, -4, -42, -32, -41,
1365 11, 14, 39, 27, -9, 17, 4, 33, -6, 0,
1366 -4, 1, -5, -10, 17, 22, -5, 57, 5, -9,
1367 -20, -13, -18, -35, 11, -3, 16, 22, -17, -13,
1368 -40, -19, 1, 55, 35, 5, -27, -44, -37, -49,
1370 40, 0, 28, -24, -14, 5, 4, 21, 7, 33,
1371 0, 32, 15, -35, -12, -1, 11, 58, -5, 16,
1372 28, 0, -1, -33, 0, -11, 39, -5, 14, -6,
1373 -3, -31, -28, 1, 53, 33, 19, -25, -46, -26,
1375 -28, 20, 51, 14, 6, -7, 0, 26, -27, 4,
1376 -18, 40, 6, -16, 1, 15, 0, 55, 5, 16,
1377 19, -14, 3, -49, -14, -1, 22, 30, 12, 0,
1378 -24, -15, -9, 17, 45, 29, -4, -28, -51, -35,
1380 34, 4, 25, -10, -9, -21, 7, 36, 26, 36,
1381 35, -28, -12, -42, 3, 16, 12, 28, -21, -42,
1382 5, 21, -16, -26, 4, -19, 19, -39, -15, -15,
1383 -1, -13, -19, 17, 17, -14, 15, -55, -4, -19,
1385 -34, 25, 48, 28, 11, -34, 2, 41, -9, 7,
1386 17, -21, -20, -24, 17, 33, 0, 24, -10, -42,
1387 -3, 5, -10, -42, -11, -8, 3, -3, -16, -9,
1388 -22, 2, 0, 33, 10, -18, -7, -58, -10, -28,
1390 -4, 11, 37, -23, 5, -46, 2, 29, 5, 39,
1391 21, 9, 0, -49, -12, 9, 16, 26, -22, -15,
1392 45, 20, 5, -40, -22, -17, 26, -31, 14, -2,
1393 14, -10, -30, -20, 27, 9, 39, -39, -18, -5,
1395 -73, 32, 60, 15, 26, -59, -2, 33, -30, 10,
1396 3, 17, -8, -30, 1, 26, 4, 22, -10, -16,
1397 36, 5, 11, -56, -37, -6, 10, 5, 13, 3,
1398 -6, 5, -11, -4, 19, 5, 16, -41, -24, -13
1402 const uint16_t ff_cb1_base[128]={
1403 19657, 18474, 18365, 17520, 21048, 18231, 18584, 16671,
1404 20363, 19069, 19409, 18430, 21844, 18753, 19613, 17411,
1405 20389, 21772, 20129, 21702, 20978, 20472, 19627, 19387,
1406 21477, 23134, 21841, 23919, 22089, 21519, 21134, 20852,
1407 19675, 17821, 19044, 17477, 19986, 16955, 18446, 16086,
1408 21138, 18899, 20952, 18929, 21452, 17833, 20104, 17159,
1409 19770, 20056, 20336, 20866, 19329, 18217, 18908, 18004,
1410 21556, 21948, 23079, 23889, 20922, 19544, 20984, 19781,
1411 19781, 20984, 19544, 20922, 23889, 23079, 21948, 21556,
1412 18004, 18908, 18217, 19329, 20866, 20336, 20056, 19770,
1413 17159, 20104, 17833, 21452, 18929, 20952, 18899, 21138,
1414 16086, 18446, 16955, 19986, 17477, 19044, 17821, 19675,
1415 20852, 21134, 21519, 22089, 23919, 21841, 23134, 21477,
1416 19387, 19627, 20472, 20978, 21702, 20129, 21772, 20389,
1417 17411, 19613, 18753, 21844, 18430, 19409, 19069, 20363,
1418 16671, 18584, 18231, 21048, 17520, 18365, 18474, 19657,
1421 const uint16_t ff_cb2_base[128]={
1422 12174, 13380, 13879, 13832, 13170, 13227, 13204, 12053,
1423 12410, 13988, 14348, 14631, 13100, 13415, 13224, 12268,
1424 11982, 13825, 13499, 14210, 13877, 14788, 13811, 13109,
1425 11449, 13275, 12833, 13717, 12728, 13696, 12759, 12405,
1426 10230, 12185, 11628, 13161, 11762, 13458, 12312, 12818,
1427 10443, 12773, 12011, 14020, 11818, 13825, 12453, 13226,
1428 10446, 13162, 11881, 14300, 12859, 16288, 13490, 15053,
1429 10155, 12820, 11519, 13973, 12041, 15081, 12635, 14198,
1430 14198, 12635, 15081, 12041, 13973, 11519, 12820, 10155,
1431 15053, 13490, 16288, 12859, 14300, 11881, 13162, 10446,
1432 13226, 12453, 13825, 11818, 14020, 12011, 12773, 10443,
1433 12818, 12312, 13458, 11762, 13161, 11628, 12185, 10230,
1434 12405, 12759, 13696, 12728, 13717, 12833, 13275, 11449,
1435 13109, 13811, 14788, 13877, 14210, 13499, 13825, 11982,
1436 12268, 13224, 13415, 13100, 14631, 14348, 13988, 12410,
1437 12053, 13204, 13227, 13170, 13832, 13879, 13380, 12174,
1440 const int16_t ff_energy_tab[32]={
1441 0, 16, 20, 25, 32, 41, 51, 65,
1442 81, 103, 129, 163, 205, 259, 326, 410,
1443 516, 650, 819, 1031, 1298, 1634, 2057, 2590,
1444 3261, 4105, 5168, 6507, 8192, 10313, 12983, 16345
1447 static const int16_t lpc_refl_cb1[64]={
1448 -4041, -4018, -3998, -3977, -3954, -3930, -3906, -3879,
1449 -3852, -3825, -3795, -3764, -3731, -3699, -3666, -3631,
1450 -3594, -3555, -3513, -3468, -3420, -3372, -3321, -3268,
1451 -3212, -3153, -3090, -3021, -2944, -2863, -2772, -2676,
1452 -2565, -2445, -2328, -2202, -2072, -1941, -1808, -1660,
1453 -1508, -1348, -1185, -994, -798, -600, -374, -110,
1454 152, 447, 720, 982, 1229, 1456, 1682, 1916,
1455 2130, 2353, 2595, 2853, 3118, 3363, 3588, 3814
1458 static const int16_t lpc_refl_cb2[32]={
1459 -3091, -2386, -1871, -1425, -1021, -649, -316, -20,
1460 267, 544, 810, 1065, 1305, 1534, 1756, 1970,
1461 2171, 2359, 2536, 2700, 2854, 2996, 3133, 3263,
1462 3386, 3499, 3603, 3701, 3789, 3870, 3947, 4020
1465 static const int16_t lpc_refl_cb3[32]={
1466 -3525, -3295, -3081, -2890, -2696, -2511, -2328, -2149,
1467 -1979, -1817, -1658, -1498, -1341, -1188, -1032, -876,
1468 -721, -561, -394, -228, -54, 119, 296, 484,
1469 683, 895, 1123, 1373, 1651, 1965, 2360, 2854
1472 static const int16_t lpc_refl_cb4[16]={
1473 -1845, -1057, -522, -77, 301, 647, 975, 1285,
1474 1582, 1873, 2163, 2452, 2735, 3017, 3299, 3569
1477 static const int16_t lpc_refl_cb5[16]={
1478 -2691, -2187, -1788, -1435, -1118, -837, -571, -316,
1479 -59, 201, 470, 759, 1077, 1457, 1908, 2495
1482 static const int16_t lpc_refl_cb6[8]={
1483 -1372, -474, 133, 632, 1100, 1571, 2075, 2672
1486 static const int16_t lpc_refl_cb7[8]={
1487 -2389, -1787, -1231, -717, -239, 234, 770, 1474
1490 static const int16_t lpc_refl_cb8[8]={
1491 -1569, -864, -296, 200, 670, 1151, 1709, 2385
1494 static const int16_t lpc_refl_cb9[8]={
1495 -2200, -1608, -1062, -569, -120, 338, 863, 1621
1498 static const int16_t lpc_refl_cb10[4]={
1499 -617, 190, 802, 1483
1502 const int16_t * const ff_lpc_refl_cb[10]={
1503 lpc_refl_cb1, lpc_refl_cb2, lpc_refl_cb3, lpc_refl_cb4, lpc_refl_cb5,
1504 lpc_refl_cb6, lpc_refl_cb7, lpc_refl_cb8, lpc_refl_cb9, lpc_refl_cb10
1507 static void add_wav(int16_t *dest, int n, int skip_first, int *m,
1508 const int16_t *s1, const int8_t *s2, const int8_t *s3)
1514 for (i=!skip_first; i<3; i++)
1515 v[i] = (ff_gain_val_tab[n][i] * m[i]) >> ff_gain_exp_tab[n];
1518 for (i=0; i < BLOCKSIZE; i++)
1519 dest[i] = (s1[i]*v[0] + s2[i]*v[1] + s3[i]*v[2]) >> 12;
1521 for (i=0; i < BLOCKSIZE; i++)
1522 dest[i] = ( s2[i]*v[1] + s3[i]*v[2]) >> 12;
1527 * Copy the last offset values of *source to *target. If those values are not
1528 * enough to fill the target buffer, fill it with another copy of those values.
1530 void ff_copy_and_dup(int16_t *target, const int16_t *source, int offset)
1532 source += BUFFERSIZE - offset;
1534 memcpy(target, source, FFMIN(BLOCKSIZE, offset)*sizeof(*target));
1535 if (offset < BLOCKSIZE)
1536 memcpy(target + offset, source, (BLOCKSIZE - offset)*sizeof(*target));
1540 * Evaluate the reflection coefficients from the filter coefficients.
1542 * @return 1 if one of the reflection coefficients is greater than
1545 int ff_eval_refl(int *refl, const int16_t *coefs, AVCodecContext *avctx)
1548 int buffer1[LPC_ORDER];
1549 int buffer2[LPC_ORDER];
1553 for (i=0; i < LPC_ORDER; i++)
1554 buffer2[i] = coefs[i];
1556 refl[LPC_ORDER-1] = bp2[LPC_ORDER-1];
1558 if ((unsigned) bp2[LPC_ORDER-1] + 0x1000 > 0x1fff) {
1559 av_log(avctx, AV_LOG_ERROR, "Overflow. Broken sample?\n");
1563 for (i = LPC_ORDER-2; i >= 0; i--) {
1564 b = 0x1000-((bp2[i+1] * bp2[i+1]) >> 12);
1570 for (j=0; j <= i; j++) {
1572 int a = bp2[j] - ((refl[i+1] * bp2[i-j]) >> 12);
1573 if((int)(a*(unsigned)b) != a*(int64_t)b)
1576 bp1[j] = ((bp2[j] - ((refl[i+1] * bp2[i-j]) >> 12)) * b) >> 12;
1579 if ((unsigned) bp1[i] + 0x1000 > 0x1fff)
1584 FFSWAP(int *, bp1, bp2);
1590 * Evaluate the LPC filter coefficients from the reflection coefficients.
1591 * Does the inverse of the ff_eval_refl() function.
1593 void ff_eval_coefs(int *coefs, const int *refl)
1595 int buffer[LPC_ORDER];
1600 for (i=0; i < LPC_ORDER; i++) {
1601 b1[i] = refl[i] << 4;
1603 for (j=0; j < i; j++)
1604 b1[j] = ((refl[i] * b2[i-j-1]) >> 12) + b2[j];
1606 FFSWAP(int *, b1, b2);
1609 for (i=0; i < LPC_ORDER; i++)
1613 void ff_int_to_int16(int16_t *out, const int *inp)
1617 for (i = 0; i < LPC_ORDER; i++)
1622 * Evaluate sqrt(x << 24). x must fit in 20 bits. This value is evaluated in an
1623 * odd way to make the output identical to the binary decoder.
1625 int ff_t_sqrt(unsigned int x)
1633 return ff_sqrt(x << 20) << s;
1636 unsigned int ff_rms(const int *data)
1639 unsigned int res = 0x10000;
1642 for (i = 0; i < LPC_ORDER; i++) {
1643 res = (((0x1000000 - data[i]*data[i]) >> 12) * res) >> 12;
1648 while (res <= 0x3fff) {
1654 return ff_t_sqrt(res) >> b;
1657 int ff_interp(RA144Context *ractx, int16_t *out, int a, int copyold, int energy)
1659 int work[LPC_ORDER];
1660 int b = NBLOCKS - a;
1663 // Interpolate block coefficients from the this frame's forth block and
1664 // last frame's forth block.
1665 for (i = 0; i < LPC_ORDER; i++)
1666 out[i] = (a * ractx->lpc_coef[0][i] + b * ractx->lpc_coef[1][i])>> 2;
1668 if (ff_eval_refl(work, out, ractx->avctx)) {
1669 // The interpolated coefficients are unstable, copy either new or old
1671 ff_int_to_int16(out, ractx->lpc_coef[copyold]);
1672 return ff_rescale_rms(ractx->lpc_refl_rms[copyold], energy);
1674 return ff_rescale_rms(ff_rms(work), energy);
1678 unsigned int ff_rescale_rms(unsigned int rms, unsigned int energy)
1680 return (rms * energy) >> 10;
1683 /** inverse root mean square */
1684 int ff_irms(AudioDSPContext *adsp, const int16_t *data)
1686 unsigned int sum = adsp->scalarproduct_int16(data, data, BLOCKSIZE);
1689 return 0; /* OOPS - division by zero */
1691 return 0x20000000 / (ff_t_sqrt(sum) >> 8);
1694 void ff_subblock_synthesis(RA144Context *ractx, const int16_t *lpc_coefs,
1695 int cba_idx, int cb1_idx, int cb2_idx,
1702 cba_idx += BLOCKSIZE/2 - 1;
1703 ff_copy_and_dup(ractx->buffer_a, ractx->adapt_cb, cba_idx);
1704 m[0] = (ff_irms(&ractx->adsp, ractx->buffer_a) * gval) >> 12;
1708 m[1] = (ff_cb1_base[cb1_idx] * gval) >> 8;
1709 m[2] = (ff_cb2_base[cb2_idx] * gval) >> 8;
1710 memmove(ractx->adapt_cb, ractx->adapt_cb + BLOCKSIZE,
1711 (BUFFERSIZE - BLOCKSIZE) * sizeof(*ractx->adapt_cb));
1713 block = ractx->adapt_cb + BUFFERSIZE - BLOCKSIZE;
1715 add_wav(block, gain, cba_idx, m, cba_idx? ractx->buffer_a: NULL,
1716 ff_cb1_vects[cb1_idx], ff_cb2_vects[cb2_idx]);
1718 memcpy(ractx->curr_sblock, ractx->curr_sblock + BLOCKSIZE,
1719 LPC_ORDER*sizeof(*ractx->curr_sblock));
1721 if (ff_celp_lp_synthesis_filter(ractx->curr_sblock + LPC_ORDER, lpc_coefs,
1722 block, BLOCKSIZE, LPC_ORDER, 1, 0, 0xfff))
1723 memset(ractx->curr_sblock, 0, (LPC_ORDER+BLOCKSIZE)*sizeof(*ractx->curr_sblock));