summaryrefslogtreecommitdiff
path: root/apps
diff options
context:
space:
mode:
Diffstat (limited to 'apps')
-rw-r--r--apps/codecs/mp3_enc.c4244
1 files changed, 1827 insertions, 2417 deletions
diff --git a/apps/codecs/mp3_enc.c b/apps/codecs/mp3_enc.c
index 12db9a5243..3caca94f35 100644
--- a/apps/codecs/mp3_enc.c
+++ b/apps/codecs/mp3_enc.c
@@ -30,306 +30,480 @@
30// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 30// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
31// Library General Public License for more details. 31// Library General Public License for more details.
32 32
33#include "codeclib.h"
34
35#ifndef SIMULATOR 33#ifndef SIMULATOR
36 34
35#include "codeclib.h"
36
37CODEC_HEADER 37CODEC_HEADER
38 38
39#define SAMP_PER_FRAME 1152 39#ifdef USE_IRAM
40#define SAMP_PER_FRAME2 576 40extern char iramcopy[];
41#define HAN_SIZE 512 41extern char iramstart[];
42#define SBLIMIT 32 42extern char iramend[];
43#define WAVE_RIFF_PCM 0 43extern char iedata[];
44#define MAX_CHANNELS 2 44extern char iend[];
45#define MAX_GRANULES 2 45#endif
46#define HTN 34 46
47
48#define SAMP_PER_FRAME 1152
49#define SAMPL2 576
50#define SBLIMIT 32
51#define HTN 16
52#define memcpy ci->memcpy
53#define memset ci->memset
54#define putlong(c, s) if(s+sz <= 32) { cc = (cc << s) | c; sz+= s; } \
55 else { putbits(cc, sz); cc = c; sz = s; }
56
57enum e_byte_order { order_unknown, order_bigEndian, order_littleEndian };
47 58
48typedef unsigned long uint32; 59typedef unsigned long uint32;
49typedef unsigned short uint16; 60typedef unsigned short uint16;
50typedef unsigned char uint8; 61typedef unsigned char uint8;
51 62
52enum e_byte_order { order_unknown, order_bigEndian, order_littleEndian };
53
54#define memcpy ci->memcpy
55#define memset ci->memset
56 63
57typedef struct { 64typedef struct {
58 int type; /* 0=(22.05,24,16kHz) 1=(44.1,48,32kHz) */ 65 int type; /* 0=(22.05,24,16kHz) 1=(44.1,48,32kHz) */
59 int mode; /* 0=stereo, 1=jstereo, 2=dual, 3=mono */ 66 int mode; /* 0=stereo, 1=jstereo, 2=dual, 3=mono */
60 int bitrate; 67 int bitrate;
61 int padding; 68 int padding;
62 long bits_per_frame; 69 int num_bands;
63 long bitrate_index; 70 long bitr_id;
64 int smprate_index; 71 int smpl_id;
65} mpeg_t; 72} mpeg_t;
66 73
67/* Side information */ 74/* Side information */
68typedef struct { 75typedef struct {
69 unsigned part2_3_length; 76 uint32 part2_3_length;
70 unsigned big_values; 77 int count1; /* number of 0-1-quadruples */
71 int count1; 78 uint32 global_gain;
72 unsigned global_gain; 79 uint32 table_select[4];
73 unsigned table_select[4]; 80 uint32 region_0_1;
74 unsigned region0_count; 81 uint32 address1;
75 unsigned region1_count; 82 uint32 address2;
76 unsigned address1; 83 uint32 address3;
77 unsigned address2; 84 long quantStep;
78 unsigned address3; 85 long additStep;
79 long quantizerStepSize; 86 long max_val;
80} side_info_t; 87} side_info_t;
81 88
82typedef struct { 89typedef struct {
83 enum e_byte_order byte_order; 90 enum e_byte_order byte_order;
84 side_info_t cod_info[2][2]; 91 side_info_t cod_info[2][2];
92 mpeg_t mpg;
85 long frac_per_frame; 93 long frac_per_frame;
86 long byte_per_frame; 94 long byte_per_frame;
87 long slot_lag; 95 long slot_lag;
88 int sideinfo_len; 96 int sideinfo_len;
89 int mean_bits; 97 int mean_bits;
98 int ResvSize;
90 int channels; 99 int channels;
100 int granules;
101 int resample;
91 long samplerate; 102 long samplerate;
92 mpeg_t mpg;
93} config_t; 103} config_t;
94 104
95typedef struct { 105typedef struct {
96 int bitpos; /* current bitpos for writing */ 106 int bitpos; /* current bitpos for writing */
97 uint32 bbuf[263]; 107 uint32 bbuf[263];
98} BF_Data; 108} BF_Data;
99 109
100struct huffcodetab { 110struct huffcodetab {
101 int xlen; /*max. x-index+ */ 111 int len; /* max. index */
102 int ylen; /*max. y-index+ */ 112 const uint8 *table; /* pointer to array[len][len] */
103 int linbits; /*number of linbits */ 113 const uint8 *hlen; /* pointer to array[len][len] */
104 int linmax; /*max number stored in linbits */
105 const uint16 *table; /*pointer to array[xlen][ylen] */
106 const uint8 *hlen; /*pointer to array[xlen][ylen] */
107}; 114};
108 115
109/* !!!!!!!! start of IRAM area: do not insert before x_int1 array !!!!!!!!! */ 116struct huffcodebig {
110short x_int0 [HAN_SIZE] IBSS_ATTR; // 1024 Bytes 117 int len; /* max. index */
111int mdct_freq [2][2][SAMP_PER_FRAME2] IBSS_ATTR; // 9216 Bytes 118 int linbits; /* number of linbits */
112short x_int1 [HAN_SIZE] IBSS_ATTR; // 1024 Bytes 119 int linmax; /* max number stored in linbits */
113/* !!!!!!!!!!!!!!!!!! here you may insert other data !!!!!!!!!!!!!!!!!!!!!! */ 120};
114uint8 int2idx [5000] IBSS_ATTR; // 5000 Bytes
115uint16 enc_data [2][2][SAMP_PER_FRAME2] IBSS_ATTR; // 4608 Bytes
116short y_int [64] IBSS_ATTR; // 256 Bytes
117int scalefac [23] IBSS_ATTR; // 92 Bytes
118int mdct_in [36] IBSS_ATTR; // 144 Bytes
119int sb_sample [2][3][18][SBLIMIT] IBSS_ATTR; // 13824 Bytes
120BF_Data CodedData IBSS_ATTR; // 1040 Bytes
121int ca_int [8] IBSS_ATTR; // 32 Bytes
122int cs_int [8] IBSS_ATTR; // 32 Bytes
123int win_int [18][36] IBSS_ATTR; // 2592 Bytes
124short filter_int [SBLIMIT][64] IBSS_ATTR; // 8192 Bytes
125short enwindow_int[512] IBSS_ATTR; // 1024 Bytes
126uint8 ht_count1 [2][2][16] IBSS_ATTR; // 64 Bytes
127uint16 t1HB [ 4] IBSS_ATTR; // Bytes
128uint16 t2HB [ 9] IBSS_ATTR; // Bytes
129uint16 t3HB [ 9] IBSS_ATTR; // Bytes
130uint16 t5HB [ 16] IBSS_ATTR; // Bytes
131uint16 t6HB [ 16] IBSS_ATTR; // Bytes
132uint16 t7HB [ 36] IBSS_ATTR; // Bytes
133uint16 t8HB [ 36] IBSS_ATTR; // Bytes
134uint16 t9HB [ 36] IBSS_ATTR; // Bytes
135uint16 t10HB [ 64] IBSS_ATTR; // Bytes
136uint16 t11HB [ 64] IBSS_ATTR; // Bytes
137uint16 t12HB [ 64] IBSS_ATTR; // Bytes
138uint16 t13HB [256] IBSS_ATTR; // Bytes
139uint16 t15HB [256] IBSS_ATTR; // Bytes
140uint16 t16HB [256] IBSS_ATTR; // Bytes
141uint16 t24HB [256] IBSS_ATTR; // Bytes
142uint8 t1l [ 4] IBSS_ATTR; // Bytes
143uint8 t2l [ 9] IBSS_ATTR; // Bytes
144uint8 t3l [ 9] IBSS_ATTR; // Bytes
145uint8 t5l [ 16] IBSS_ATTR; // Bytes
146uint8 t6l [ 16] IBSS_ATTR; // Bytes
147uint8 t7l [ 36] IBSS_ATTR; // Bytes
148uint8 t8l [ 36] IBSS_ATTR; // Bytes
149uint8 t9l [ 36] IBSS_ATTR; // Bytes
150uint8 t10l [ 64] IBSS_ATTR; // Bytes
151uint8 t11l [ 64] IBSS_ATTR; // Bytes
152uint8 t12l [ 64] IBSS_ATTR; // Bytes
153uint8 t13l [256] IBSS_ATTR; // Bytes
154uint8 t15l [256] IBSS_ATTR; // Bytes
155uint8 t16l [256] IBSS_ATTR; // Bytes
156uint8 t24l [256] IBSS_ATTR; // Bytes
157struct huffcodetab ht [HTN] IBSS_ATTR; // Bytes
158 121
122#define shft4(x) ((x + 8) >> 4)
123#define shft9(x) ((x + 256) >> 9)
124#define shft13(x) ((x + 4096) >> 13)
125#define shft15(x) ((x + 16384) >> 15)
126#define shft16(x) ((x + 32768) >> 16)
127#define shft_n(x,n) ((x) >> n)
128#define SQRT 724 /* sqrt(2) * 512 */
129
130short mfbuf [2*(1152+512)] IBSS_ATTR; /* 3328 Bytes */
131int sb_data [2][2][18][SBLIMIT] IBSS_ATTR; /* 13824 Bytes */
132int mdct_freq [SAMPL2] IBSS_ATTR; /* 9216 Bytes */
133short enc_data [SAMPL2] IBSS_ATTR; /* 4608 Bytes */
134uint32 scalefac [23] IBSS_ATTR; /* 92 Bytes */
135BF_Data CodedData IBSS_ATTR; /* 1056 Bytes */
136int ca [8] IBSS_ATTR; /* 32 Bytes */
137int cs [8] IBSS_ATTR; /* 32 Bytes */
138int cx [9] IBSS_ATTR; /* 36 Bytes */
139int win [18][4] IBSS_ATTR; /* 288 Bytes */
140short enwindow [15*27+24] IBSS_ATTR; /* 862 Bytes */
141short int2idx [4096] IBSS_ATTR; /* 8192 Bytes */
142uint8 ht_count [2][2][16] IBSS_ATTR; /* 64 Bytes */
143uint32 tab01 [ 16] IBSS_ATTR; /* 64 Bytes */
144uint32 tab23 [ 9] IBSS_ATTR; /* 36 Bytes */
145uint32 tab56 [ 16] IBSS_ATTR; /* 64 Bytes */
146uint32 tab1315 [256] IBSS_ATTR; /* 1024 Bytes */
147uint32 tab1624 [256] IBSS_ATTR; /* 1024 Bytes */
148uint32 tab789 [ 36] IBSS_ATTR; /* 144 Bytes */
149uint32 tabABC [ 64] IBSS_ATTR; /* 256 Bytes */
150uint8 t1HB [ 4] IBSS_ATTR;
151uint8 t2HB [ 9] IBSS_ATTR;
152uint8 t3HB [ 9] IBSS_ATTR;
153uint8 t5HB [ 16] IBSS_ATTR;
154uint8 t6HB [ 16] IBSS_ATTR;
155uint8 t7HB [ 36] IBSS_ATTR;
156uint8 t8HB [ 36] IBSS_ATTR;
157uint8 t9HB [ 36] IBSS_ATTR;
158uint8 t10HB [ 64] IBSS_ATTR;
159uint8 t11HB [ 64] IBSS_ATTR;
160uint8 t12HB [ 64] IBSS_ATTR;
161uint8 t13HB [256] IBSS_ATTR;
162uint8 t15HB [256] IBSS_ATTR;
163uint16 t16HB [256] IBSS_ATTR;
164uint16 t24HB [256] IBSS_ATTR;
165uint8 t1l [ 8] IBSS_ATTR;
166uint8 t2l [ 9] IBSS_ATTR;
167uint8 t3l [ 9] IBSS_ATTR;
168uint8 t5l [ 16] IBSS_ATTR;
169uint8 t6l [ 16] IBSS_ATTR;
170uint8 t7l [ 36] IBSS_ATTR;
171uint8 t8l [ 36] IBSS_ATTR;
172uint8 t9l [ 36] IBSS_ATTR;
173uint8 t10l [ 64] IBSS_ATTR;
174uint8 t11l [ 64] IBSS_ATTR;
175uint8 t12l [ 64] IBSS_ATTR;
176uint8 t13l [256] IBSS_ATTR;
177uint8 t15l [256] IBSS_ATTR;
178uint8 t16l [256] IBSS_ATTR;
179uint8 t24l [256] IBSS_ATTR;
180struct huffcodetab ht [HTN] IBSS_ATTR;
181
182static config_t cfg;
159static struct codec_api *ci; 183static struct codec_api *ci;
160static int enc_channels; 184static int enc_channels;
161static short *x_int[2];
162static config_t cfg;
163 185
164static const uint8 ht_count1_const[2][2][16] = 186static const uint8 ht_count_const[2][2][16] =
165{ { { 1, 5, 4, 5, 6, 5,4,4,7,3,6,0,7,2,3, 1 }, /* table0 */ 187{ { { 1, 5, 4, 5, 6, 5, 4, 4, 7, 3, 6, 0, 7, 2, 3, 1 }, /* table0 */
166 { 1, 5, 5, 7, 5, 8,7,9,5,7,7,9,7,9,9,10 } }, /* hleng0 */ 188 { 1, 5, 5, 7, 5, 8, 7, 9, 5, 7, 7, 9, 7, 9, 9,10 } }, /* hleng0 */
167 { {15,14,13,12,11,10,9,8,7,6,5,4,3,2,1, 0 }, /* table1 */ 189 { {15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0 }, /* table1 */
168 { 4, 5, 5, 6, 5, 6,6,7,5,6,6,7,6,7,7, 8 } } }; /* hleng1 */ 190 { 4, 5, 5, 6, 5, 6, 6, 7, 5, 6, 6, 7, 6, 7, 7, 8 } } }; /* hleng1 */
169 191
170static const uint16 t1HB_const[4] = {1,1,1,0}; 192static const uint8 t1HB_const[4] = {1,1,1,0};
171static const uint16 t2HB_const[9] = {1,2,1,3,1,1,3,2,0}; 193static const uint8 t2HB_const[9] = {1,2,1,3,1,1,3,2,0};
172static const uint16 t3HB_const[9] = {3,2,1,1,1,1,3,2,0}; 194static const uint8 t3HB_const[9] = {3,2,1,1,1,1,3,2,0};
173static const uint16 t5HB_const[16] = {1,2,6,5,3,1,4,4,7,5,7,1,6,1,1,0}; 195static const uint8 t5HB_const[16] = {1,2,6,5,3,1,4,4,7,5,7,1,6,1,1,0};
174static const uint16 t6HB_const[16] = {7,3,5,1,6,2,3,2,5,4,4,1,3,3,2,0}; 196static const uint8 t6HB_const[16] = {7,3,5,1,6,2,3,2,5,4,4,1,3,3,2,0};
175static const uint16 t7HB_const[36] = {1,2,10,19,16,10,3,3,7,10,5,3,11,4,13,17,8,4,12,11,18,15,11,2,7,6,9,14,3,1,6,4,5,3,2,0}; 197
176static const uint16 t8HB_const[36] = {3,4,6,18,12,5,5,1,2,16,9,3,7,3,5,14,7,3,19,17,15,13,10,4,13,5,8,11,5,1,12,4,4,1,1,0}; 198static const uint8 t7HB_const[36] =
177static const uint16 t9HB_const[36] = {7,5,9,14,15,7,6,4,5,5,6,7,7,6,8,8,8,5,15,6,9,10,5,1,11,7,9,6,4,1,14,4,6,2,6,0}; 199{ 1, 2,10,19,16,10, 3, 3, 7,10, 5, 3,11, 4,13,17, 8, 4,
178static const uint16 t10HB_const[64] = {1,2,10,23,35,30,12,17,3,3,8,12,18,21,12,7,11,9,15,21,32,40,19,6,14,13,22,34,46,23,18, 200 12,11,18,15,11, 2, 7, 6, 9,14, 3, 1, 6, 4, 5, 3, 2, 0 };
179 7,20,19,33,47,27,22,9,3,31,22,41,26,21,20,5,3,14,13,10,11,16,6,5,1,9,8,7,8,4 ,4,2,0}; 201
180static const uint16 t11HB_const[64] = {3,4,10,24,34,33,21,15,5,3,4,10,32,17,11,10,11,7,13,18,30,31,20,5,25,11,19,59,27,18,12, 202static const uint8 t8HB_const[36] =
181 5,35,33,31,58,30,16,7,5,28,26,32,19,17,15,8,14,14,12,9,13,14,9,4,1,11,4,6,6,6,3,2,0}; 203{ 3, 4, 6,18,12, 5, 5, 1, 2,16, 9, 3, 7, 3, 5,14, 7, 3,
182static const uint16 t12HB_const[64] = {9,6,16,33,41,39,38,26,7,5,6,9,23,16,26,11,17,7,11,14,21,30,10,7,17,10,15,12,18,28,14, 204 19,17,15,13,10, 4,13, 5, 8,11, 5, 1,12, 4, 4, 1, 1, 0 };
183 5,32,13,22,19,18,16,9,5,40,17,31,29,17,13,4,2,27,12,11,15,10,7,4,1,27,12,8,12,6,3,1,0}; 205
184static const uint16 t13HB_const[256] = {1,5,14,21,34,51,46,71,42,52,68,52,67,44,43,19,3,4,12,19,31,26,44,33,31,24,32, 206static const uint8 t9HB_const[36] =
185 24,31,35,22,14,15,13,23,36,59,49,77,65,29,40,30,40,27,33,42,16,22,20,37,61,56, 207{ 7, 5, 9,14,15, 7, 6, 4, 5, 5, 6, 7, 7, 6, 8, 8, 8, 5,
186 79,73,64,43,76,56,37,26,31,25,14,35,16,60,57,97,75,114,91,54,73,55,41,48,53, 208 15, 6, 9,10, 5, 1,11, 7, 9, 6, 4, 1,14, 4, 6, 2, 6, 0 };
187 23,24,58,27,50,96,76,70,93,84,77,58,79,29,74,49,41,17,47,45,78,74,115,94,90, 209
188 79,69,83,71,50,59,38,36,15,72,34,56,95,92,85,91,90,86,73,77,65,51,44,43,42,43, 210static const uint8 t10HB_const[64] =
189 20,30,44,55,78,72,87,78,61,46,54,37,30,20,16,53,25,41,37,44,59,54,81,66,76,57, 211{1,2,10,23,35,30,12,17,3,3,8,12,18,21,12,7,11,9,15,21,32,
190 54,37,18,39,11,35,33,31,57,42,82,72,80,47,58,55,21,22,26,38,22,53,25,23,38,70, 212 40,19,6,14,13,22,34,46,23,18,7,20,19,33,47,27,22,9,3,31,22,
191 60,51,36,55,26,34,23,27,14,9,7,34,32,28,39,49,75,30,52,48,40,52,28,18,17,9,5, 213 41,26,21,20,5,3,14,13,10,11,16,6,5,1,9,8,7,8,4,4,2,0 };
192 45,21,34,64,56,50,49,45,31,19,12,15,10,7,6,3,48,23,20,39,36,35,53,21,16,23,13, 214
193 10,6,1,4,2,16,15,17,27,25,20,29,11,17,12,16,8,1,1,0,1}; 215static const uint8 t11HB_const[64] =
194static const uint16 t15HB_const[256] = {7,12,18,53,47,76,124,108,89,123,108,119,107,81,122,63,13,5,16,27,46,36,61,51, 216{3,4,10,24,34,33,21,15,5,3,4,10,32,17,11,10,11,7,13,18,30,
195 42,70,52,83,65,41,59,36,19,17,15,24,41,34,59,48,40,64,50,78,62,80,56,33,29,28, 217 31,20,5,25,11,19,59,27,18,12,5,35,33,31,58,30,16,7,5,28,26,
196 25,43,39,63,55,93,76,59,93,72,54,75,50,29,52,22,42,40,67,57,95,79,72,57,89,69, 218 32,19,17,15,8,14,14,12,9,13,14,9,4,1,11,4,6,6,6,3,2,0 };
197 49,66,46,27,77,37,35,66,58,52,91,74,62,48,79,63,90,62,40,38,125,32,60,56,50, 219
198 92,78,65,55,87,71,51,73,51,70,30,109,53,49,94,88,75,66,122,91,73,56,42,64,44, 220static const uint8 t12HB_const[64] =
199 21,25,90,43,41,77,73,63,56,92,77,66,47,67,48,53,36,20,71,34,67,60,58,49,88,76, 221{9,6,16,33,41,39,38,26,7,5,6,9,23,16,26,11,17,7,11,14,21,
200 67,106,71,54,38,39,23,15,109,53,51,47,90,82,58,57,48,72,57,41,23,27,62,9,86, 22230,10,7,17,10,15,12,18,28,14,5,32,13,22,19,18,16,9,5,40,17,
201 42,40,37,70,64,52,43,70,55,42,25,29,18,11,11,118,68,30,55,50,46,74,65,49,39, 22331,29,17,13,4,2,27,12,11,15,10,7,4,1,27,12,8,12,6,3,1,0 };
202 24,16,22,13,14,7,91,44,39,38,34,63,52,45,31,52,28,19,14,8,9,3,123,60,58,53,47, 224
203 43,32,22,37,24,17,12,15,10,2,1,71,37,34,30,28,20,17,26,21,16,10,6,8,6,2,0}; 225static const uint8 t13HB_const[256] =
204static const uint16 t16HB_const[256] = {1,5,14,44,74,63,110,93,172,149,138,242,225,195,376,17,3,4,12,20,35,62,53,47, 226{1,5,14,21,34,51,46,71,42,52,68,52,67,44,43,19,3,4,12,19,31,26,44,33,31,24,32,
205 83,75,68,119,201,107,207,9,15,13,23,38,67,58,103,90,161,72,127,117,110,209, 227 24,31,35,22,14,15,13,23,36,59,49,77,65,29,40,30,40,27,33,42,16,22,20,37,61,56,
206 206,16,45,21,39,69,64,114,99,87,158,140,252,212,199,387,365,26,75,36,68,65, 228 79,73,64,43,76,56,37,26,31,25,14,35,16,60,57,97,75,114,91,54,73,55,41,48,53,
207 115,101,179,164,155,264,246,226,395,382,362,9,66,30,59,56,102,185,173,265,142, 229 23,24,58,27,50,96,76,70,93,84,77,58,79,29,74,49,41,17,47,45,78,74,115,94,90,
208 253,232,400,388,378,445,16,111,54,52,100,184,178,160,133,257,244,228,217,385, 230 79,69,83,71,50,59,38,36,15,72,34,56,95,92,85,91,90,86,73,77,65,51,44,43,42,43,
209 366,715,10,98,48,91,88,165,157,148,261,248,407,397,372,380,889,884,8,85,84,81, 231 20,30,44,55,78,72,87,78,61,46,54,37,30,20,16,53,25,41,37,44,59,54,81,66,76,57,
210 159,156,143,260,249,427,401,392,383,727,713,708,7,154,76,73,141,131,256,245, 232 54,37,18,39,11,35,33,31,57,42,82,72,80,47,58,55,21,22,26,38,22,53,25,23,38,70,
211 426,406,394,384,735,359,710,352,11,139,129,67,125,247,233,229,219,393,743,737, 233 60,51,36,55,26,34,23,27,14,9,7,34,32,28,39,49,75,30,52,48,40,52,28,18,17,9,5,
212 720,885,882,439,4,243,120,118,115,227,223,396,746,742,736,721,712,706,223,436, 234 45,21,34,64,56,50,49,45,31,19,12,15,10,7,6,3,48,23,20,39,36,35,53,21,16,23,13,
213 6,202,224,222,218,216,389,386,381,364,888,443,707,440,437,1728,4,747,211,210, 235 10,6,1,4,2,16,15,17,27,25,20,29,11,17,12,16,8,1,1,0,1 };
214 208,370,379,734,723,714,1735,883,877,876,3459,865,2,377,369,102,187,726,722, 236
215 358,711,709,866,1734,871,3458,870,434,0,12,10,7,11,10,17,11,9,13,12,10,7,5,3,1,3}; 237static const uint8 t15HB_const[256] =
216static const uint16 t24HB_const[256] = {15,13,46,80,146,262,248,434,426,669,653,649,621,517,1032,88,14,12,21,38,71, 238{7,12,18,53,47,76,124,108,89,123,108,119,107,81,122,63,13,5,16,27,46,36,61,51,
217 130,122,216,209,198,327,345,319,297,279,42,47,22,41,74,68,128,120,221,207,194, 239 42,70,52,83,65,41,59,36,19,17,15,24,41,34,59,48,40,64,50,78,62,80,56,33,29,28,
218 182,340,315,295,541,18,81,39,75,70,134,125,116,220,204,190,178,325,311,293, 240 25,43,39,63,55,93,76,59,93,72,54,75,50,29,52,22,42,40,67,57,95,79,72,57,89,69,
219 271,16,147,72,69,135,127,118,112,210,200,188,352,323,306,285,540,14,263,66, 241 49,66,46,27,77,37,35,66,58,52,91,74,62,48,79,63,90,62,40,38,125,32,60,56,50,
220 129,126,119,114,214,202,192,180,341,317,301,281,262,12,249,123,121,117,113, 242 92,78,65,55,87,71,51,73,51,70,30,109,53,49,94,88,75,66,122,91,73,56,42,64,44,
221 215,206,195,185,347,330,308,291,272,520,10,435,115,111,109,211,203,196,187, 243 21,25,90,43,41,77,73,63,56,92,77,66,47,67,48,53,36,20,71,34,67,60,58,49,88,76,
222 353,332,313,298,283,531,381,17,427,212,208,205,201,193,186,177,169,320,303, 244 67,106,71,54,38,39,23,15,109,53,51,47,90,82,58,57,48,72,57,41,23,27,62,9,86,
223 286,268,514,377,16,335,199,197,191,189,181,174,333,321,305,289,275,521,379, 245 42,40,37,70,64,52,43,70,55,42,25,29,18,11,11,118,68,30,55,50,46,74,65,49,39,
224 371,11,668,184,183,179,175,344,331,314,304,290,277,530,383,373,366,10,652,346, 246 24,16,22,13,14,7,91,44,39,38,34,63,52,45,31,52,28,19,14,8,9,3,123,60,58,53,47,
225 171,168,164,318,309,299,287,276,263,513,375,368,362,6,648,322,316,312,307,302, 247 43,32,22,37,24,17,12,15,10,2,1,71,37,34,30,28,20,17,26,21,16,10,6,8,6,2,0};
226 292,284,269,261,512,376,370,364,359,4,620,300,296,294,288,282,273,266,515,380, 248
227 374,369,365,361,357,2,1033,280,278,274,267,264,259,382,378,372,367,363,360, 249static const uint16 t16HB_const[256] =
228 358,356,0,43,20,19,17,15,13,11,9,7,6,4,7,5,3,1,3}; 250{1,5,14,44,74,63,110,93,172,149,138,242,225,195,376,17,3,4,12,20,35,62,53,47,
229 251 83,75,68,119,201,107,207,9,15,13,23,38,67,58,103,90,161,72,127,117,110,209,
230static const uint8 t1l_const[4] = {1,3,2,3}; 252 206,16,45,21,39,69,64,114,99,87,158,140,252,212,199,387,365,26,75,36,68,65,
231static const uint8 t2l_const[9] = {1,3,6,3,3,5,5,5,6}; 253 115,101,179,164,155,264,246,226,395,382,362,9,66,30,59,56,102,185,173,265,142,
232static const uint8 t3l_const[9] = {2,2,6,3,2,5,5,5,6}; 254 253,232,400,388,378,445,16,111,54,52,100,184,178,160,133,257,244,228,217,385,
233static const uint8 t5l_const[16] = {1,3,6,7,3,3,6,7,6,6,7,8,7,6,7,8}; 255 366,715,10,98,48,91,88,165,157,148,261,248,407,397,372,380,889,884,8,85,84,81,
234static const uint8 t6l_const[16] = {3,3,5,7,3,2,4,5,4,4,5,6,6,5,6,7}; 256 159,156,143,260,249,427,401,392,383,727,713,708,7,154,76,73,141,131,256,245,
235static const uint8 t7l_const[36] = {1,3,6,8,8,9,3,4,6,7,7,8,6,5,7,8,8,9,7,7,8,9,9,9,7,7,8,9,9,10,8,8,9,10,10,10}; 257 426,406,394,384,735,359,710,352,11,139,129,67,125,247,233,229,219,393,743,737,
236static const uint8 t8l_const[36] = {2,3,6,8,8,9,3,2,4,8,8,8,6,4,6,8,8,9,8,8,8,9,9,10,8,7,8,9,10,10,9,8,9,9,11,11}; 258 720,885,882,439,4,243,120,118,115,227,223,396,746,742,736,721,712,706,223,436,
237static const uint8 t9l_const[36] = {3,3,5,6,8,9,3,3,4,5,6,8,4,4,5,6,7,8,6,5,6,7,7,8,7,6,7,7,8,9,8,7,8,8,9,9}; 259 6,202,224,222,218,216,389,386,381,364,888,443,707,440,437,1728,4,747,211,210,
238static const uint8 t10l_const[64] = {1,3,6,8,9,9,9,10,3,4,6,7,8,9,8,8,6,6,7,8,9,10,9,9,7,7,8,9,10,10,9,10,8,8,9,10, 260 208,370,379,734,723,714,1735,883,877,876,3459,865,2,377,369,102,187,726,722,
239 10,10,10,10,9,9,10,10,11,11,10,11,8,8,9,10,10,10,11,11,9,8,9,10,10,11,11,11}; 261 358,711,709,866,1734,871,3458,870,434,0,12,10,7,11,10,17,11,9,13,12,10,7,5,3,
240static const uint8 t11l_const[64] = {2,3,5,7,8,9,8,9,3,3,4,6,8,8,7,8,5,5,6,7,8,9,8,8,7,6,7,9,8,10,8,9,8,8,8,9,9,10, 262 1,3};
241 9,10,8,8,9,10,10,11,10,11,8,7,7,8,9,10,10,10,8,7,8,9,10,10,10,10}; 263
242static const uint8 t12l_const[64] = {4,3,5,7,8,9,9,9,3,3,4,5,7,7,8,8,5,4,5,6,7,8,7,8,6,5,6,6,7,8,8,8,7,6,7,7,8, 264static const uint16 t24HB_const[256] =
243 8,8,9,8,7,8,8,8,9,8,9,8,7,7,8,8,9,9,10,9,8,8,9,9,9,9,10}; 265{15,13,46,80,146,262,248,434,426,669,653,649,621,517,1032,88,14,12,21,38,71,
244static const uint8 t13l_const[256] = {1,4,6,7,8,9,9,10,9,10,11,11,12,12,13,13,3,4,6,7,8,8,9,9,9,9,10,10,11,12,12,12, 266 130,122,216,209,198,327,345,319,297,279,42,47,22,41,74,68,128,120,221,207,194,
245 6,6,7,8,9,9,10,10,9,10,10,11,11,12,13,13,7,7,8,9,9,10,10,10,10,11,11,11,11,12, 267 182,340,315,295,541,18,81,39,75,70,134,125,116,220,204,190,178,325,311,293,
246 13,13,8,7,9,9,10,10,11,11,10,11,11,12,12,13,13,14,9,8,9,10,10,10,11,11,11,11, 268 271,16,147,72,69,135,127,118,112,210,200,188,352,323,306,285,540,14,263,66,
247 12,11,13,13,14,14,9,9,10,10,11,11,11,11,11,12,12,12,13,13,14,14,10,9,10,11,11, 269 129,126,119,114,214,202,192,180,341,317,301,281,262,12,249,123,121,117,113,
248 11,12,12,12,12,13,13,13,14,16,16,9,8,9,10,10,11,11,12,12,12,12,13,13,14,15,15, 270 215,206,195,185,347,330,308,291,272,520,10,435,115,111,109,211,203,196,187,
249 10,9,10,10,11,11,11,13,12,13,13,14,14,14,16,15,10,10,10,11,11,12,12,13,12,13, 271 353,332,313,298,283,531,381,17,427,212,208,205,201,193,186,177,169,320,303,
250 14,13,14,15,16,17,11,10,10,11,12,12,12,12,13,13,13,14,15,15,15,16,11,11,11,12, 272 286,268,514,377,16,335,199,197,191,189,181,174,333,321,305,289,275,521,379,
251 12,13,12,13,14,14,15,15,15,16,16,16,12,11,12,13,13,13,14,14,14,14,14,15,16,15, 273 371,11,668,184,183,179,175,344,331,314,304,290,277,530,383,373,366,10,652,346,
252 16,16,13,12,12,13,13,13,15,14,14,17,15,15,15,17,16,16,12,12,13,14,14,14,15,14, 274 171,168,164,318,309,299,287,276,263,513,375,368,362,6,648,322,316,312,307,302,
253 15,15,16,16,19,18,19,16}; 275 292,284,269,261,512,376,370,364,359,4,620,300,296,294,288,282,273,266,515,380,
254static const uint8 t15l_const[256] = {3,4,5,7,7,8,9,9,9,10,10,11,11,11,12,13,4,3,5,6,7,7,8,8,8,9,9,10,10,10,11,11,5, 276 374,369,365,361,357,2,1033,280,278,274,267,264,259,382,378,372,367,363,360,
255 5,5,6,7,7,8,8,8,9,9,10,10,11,11,11,6,6,6,7,7,8,8,9,9,9,10,10,10,11,11,11,7,6,7, 277 358,356,0,43,20,19,17,15,13,11,9,7,6,4,7,5,3,1,3};
256 7,8,8,9,9,9,9,10,10,10,11,11,11,8,7,7,8,8,8,9,9,9,9,10,10,11,11,11,12,9,7,8,8, 278
257 8,9,9,9,9,10,10,10,11,11,12,12,9,8,8,9,9,9,9,10,10,10,10,10,11,11,11,12,9,8,8, 279static const uint32 tab1315_const[256] =
258 9,9,9,9,10,10,10,10,11,11,12,12,12,9,8,9,9,9,9,10,10,10,11,11,11,11,12,12,12,10, 280{ 0x010003,0x050005,0x070006,0x080008,0x090008,0x0a0009,0x0a000a,0x0b000a,
259 9,9,9,10,10,10,10,10,11,11,11,11,12,13,12,10,9,9,9,10,10,10,10,11,11,11,11,12, 281 0x0a000a,0x0b000b,0x0c000b,0x0c000c,0x0d000c,0x0d000c,0x0e000d,0x0e000e,
260 12,12,13,11,10,9,10,10,10,11,11,11,11,11,11,12,12,13,13,11,10,10,10,10,11,11,11, 282 0x040005,0x060005,0x080007,0x090008,0x0a0009,0x0a0009,0x0b000a,0x0b000a,
261 11,12,12,12,12,12,13,13,12,11,11,11,11,11,11,11,12,12,12,12,13,13,12,13,12,11, 283 0x0b000a,0x0b000b,0x0c000b,0x0c000c,0x0d000c,0x0e000c,0x0e000d,0x0e000d,
262 11,11,11,11,11,12,12,12,12,12,13,13,13,13}; 284 0x070006,0x080007,0x090007,0x0a0008,0x0b0009,0x0b0009,0x0c000a,0x0c000a,
263static const uint8 t16l_const[256] = {1,4,6,8,9,9,10,10,11,11,11,12,12,12,13,9,3,4,6,7,8,9,9,9,10,10,10,11,12,11,12, 285 0x0b000a,0x0c000b,0x0c000b,0x0d000c,0x0d000c,0x0e000d,0x0f000d,0x0f000d,
264 8,6,6,7,8,9,9,10,10,11,10,11,11,11,12,12,9,8,7,8,9,9,10,10,10,11,11,12,12,12, 286 0x080007,0x090008,0x0a0008,0x0b0009,0x0b0009,0x0c000a,0x0c000a,0x0c000b,
265 13,13,10,9,8,9,9,10,10,11,11,11,12,12,12,13,13,13,9,9,8,9,9,10,11,11,12,11,12, 287 0x0c000b,0x0d000b,0x0d000c,0x0d000c,0x0d000c,0x0e000d,0x0f000d,0x0f000d,
266 12,13,13,13,14,10,10,9,9,10,11,11,11,11,12,12,12,12,13,13,14,10,10,9,10,10,11, 288 0x090008,0x090008,0x0b0009,0x0b0009,0x0c000a,0x0c000a,0x0d000b,0x0d000b,
267 11,11,12,12,13,13,13,13,15,15,10,10,10,10,11,11,11,12,12,13,13,13,13,14,14,14, 289 0x0c000b,0x0d000b,0x0d000c,0x0e000c,0x0e000c,0x0f000d,0x0f000d,0x10000d,
268 10,11,10,10,11,11,12,12,13,13,13,13,14,13,14,13,11,11,11,10,11,12,12,12,12,13, 290 0x0a0009,0x0a0009,0x0b0009,0x0c000a,0x0c000a,0x0c000a,0x0d000b,0x0d000b,
269 14,14,14,15,15,14,10,12,11,11,11,12,12,13,14,14,14,14,14,14,13,14,11,12,12,12, 291 0x0d000b,0x0d000b,0x0e000c,0x0d000c,0x0f000d,0x0f000d,0x10000d,0x10000e,
270 12,12,13,13,13,13,15,14,14,14,14,16,11,14,12,12,12,13,13,14,14,14,16,15,15,15, 292 0x0a000a,0x0b0009,0x0c000a,0x0c000a,0x0d000a,0x0d000b,0x0d000b,0x0d000b,
271 17,15,11,13,13,11,12,14,14,13,14,14,15,16,15,17,15,14,11,9,8,8,9,9,10,10,10,11, 293 0x0d000b,0x0e000c,0x0e000c,0x0e000c,0x0f000d,0x0f000d,0x10000e,0x10000e,
272 11,11,11,11,11,11,8}; 294 0x0b000a,0x0b000a,0x0c000a,0x0d000b,0x0d000b,0x0d000b,0x0e000b,0x0e000c,
273static const uint8 t24l_const[256] = {4,4,6,7,8,9,9,10,10,11,11,11,11,11,12,9,4,4,5,6,7,8,8,9,9,9,10,10,10,10,10,8,6, 295 0x0e000c,0x0e000c,0x0f000c,0x0f000c,0x0f000d,0x10000d,0x12000d,0x12000e,
274 5,6,7,7,8,8,9,9,9,9,10,10,10,11,7,7,6,7,7,8,8,8,9,9,9,9,10,10,10,10,7,8,7,7,8, 296 0x0a000a,0x0a000a,0x0b000a,0x0c000b,0x0c000b,0x0d000b,0x0d000b,0x0e000c,
275 8,8,8,9,9,9,10,10,10,10,11,7,9,7,8,8,8,8,9,9,9,9,10,10,10,10,10,7,9,8,8,8,8,9, 297 0x0e000c,0x0e000c,0x0e000c,0x0f000d,0x0f000d,0x10000e,0x11000e,0x11000e,
276 9,9,9,10,10,10,10,10,11,7,10,8,8,8,9,9,9,9,10,10,10,10,10,11,11,8,10,9,9,9,9,9, 298 0x0b000a,0x0b000a,0x0c000b,0x0c000b,0x0d000b,0x0d000b,0x0d000c,0x0f000c,
277 9,9,9,10,10,10,10,11,11,8,10,9,9,9,9,9,9,10,10,10,10,10,11,11,11,8,11,9,9,9,9, 299 0x0e000c,0x0f000d,0x0f000d,0x10000d,0x10000d,0x10000e,0x12000e,0x11000e,
278 10,10,10,10,10,10,11,11,11,11,8,11,10,9,9,9,10,10,10,10,10,10,11,11,11,11,8,11, 300 0x0b000b,0x0c000b,0x0c000b,0x0d000b,0x0d000c,0x0e000c,0x0e000c,0x0f000c,
279 10,10,10,10,10,10,10,10,10,11,11,11,11,11,8,11,10,10,10,10,10,10,10,11,11,11,11, 301 0x0e000c,0x0f000d,0x10000d,0x0f000d,0x10000d,0x11000e,0x12000f,0x13000e,
280 11,11,11,8,12,10,10,10,10,10,10,11,11,11,11,11,11,11,11,8,8,7,7,7,7,7,7,7,7,7, 302 0x0c000b,0x0c000b,0x0c000b,0x0d000b,0x0e000c,0x0e000c,0x0e000c,0x0e000c,
281 7,8,8,8,8,4}; 303 0x0f000d,0x0f000d,0x0f000d,0x10000d,0x11000e,0x11000e,0x11000e,0x12000f,
304 0x0c000c,0x0d000c,0x0d000b,0x0e000c,0x0e000c,0x0f000c,0x0e000d,0x0f000d,
305 0x10000d,0x10000d,0x11000d,0x11000d,0x11000e,0x12000e,0x12000f,0x12000f,
306 0x0d000c,0x0d000c,0x0e000c,0x0f000c,0x0f000c,0x0f000d,0x10000d,0x10000d,
307 0x10000d,0x10000e,0x10000e,0x11000e,0x12000e,0x11000e,0x12000f,0x12000f,
308 0x0e000d,0x0e000d,0x0e000d,0x0f000d,0x0f000d,0x0f000d,0x11000d,0x10000d,
309 0x10000e,0x13000e,0x11000e,0x11000e,0x11000f,0x13000f,0x12000e,0x12000f,
310 0x0d000d,0x0e000d,0x0f000d,0x10000d,0x10000d,0x10000d,0x11000d,0x10000e,
311 0x11000e,0x11000e,0x12000e,0x12000e,0x15000f,0x14000f,0x15000f,0x12000f };
312
313static const uint32 tab01_const[16] =
314{ 0x10004,0x50005,0x50005,0x70006,0x50005,0x80006,0x70006,0x90007,
315 0x50005,0x70006,0x70006,0x90007,0x70006,0x90007,0x90007,0xa0008 };
316
317static const uint32 tab23_const[ 9] =
318{ 0x10002,0x40003,0x70007,0x40004,0x50004,0x70007,0x60006,0x70007,0x80008 };
319
320static const uint32 tab56_const[16] =
321{ 0x10003,0x40004,0x70006,0x80008,0x40004,0x50004,0x80006,0x90007,
322 0x70005,0x80006,0x90007,0xa0008,0x80007,0x80007,0x90008,0xa0009 };
323
324static const uint32 tab789_const[36] =
325{0x00100803,0x00401004,0x00701c06,0x00902407,0x00902409,0x00a0280a,0x00401004,
326 0x00601005,0x00801806,0x00902807,0x00902808,0x00a0280a,0x00701c05,0x00701806,
327 0x00902007,0x00a02808,0x00a02809,0x00b02c0a,0x00802407,0x00902807,0x00a02808,
328 0x00b02c09,0x00b02c09,0x00b0300a,0x00802408,0x00902408,0x00a02809,0x00b02c09,
329 0x00b0300a,0x00c0300b,0x00902809,0x00a02809,0x00b02c0a,0x00c02c0a,0x00c0340b,
330 0x00c0340b};
331
332static const uint32 tabABC_const[64] =
333{0x00100804,0x00401004,0x00701806,0x00902008,0x00a02409,0x00a0280a,0x00a0240a,
334 0x00b0280a,0x00401004,0x00601405,0x00801806,0x00902007,0x00a02809,0x00b02809,
335 0x00a0240a,0x00a0280a,0x00701806,0x00801c06,0x00902007,0x00a02408,0x00b02809,
336 0x00c02c0a,0x00b02809,0x00b0280a,0x00802007,0x00902007,0x00a02408,0x00b02c08,
337 0x00c02809,0x00c0300a,0x00b0280a,0x00c02c0a,0x00902408,0x00a02808,0x00b02809,
338 0x00c02c09,0x00c02c0a,0x00c0300a,0x00c02c0a,0x00c0300b,0x00a02409,0x00b02809,
339 0x00c02c0a,0x00c0300a,0x00d0300a,0x00d0340b,0x00c0300a,0x00d0340b,0x00902409,
340 0x00a02409,0x00b02409,0x00c0280a,0x00c02c0a,0x00c0300b,0x00d0300b,0x00d0300c,
341 0x00a0240a,0x00a0240a,0x00b0280a,0x00c02c0b,0x00c0300b,0x00d0300b,0x00d0300b,
342 0x00d0300c};
343
344static const uint32 tab1624_const[256] =
345{0x00010004,0x00050005,0x00070007,0x00090008,0x000a0009,0x000a000a,0x000b000a,
346 0x000b000b,0x000c000b,0x000c000c,0x000c000c,0x000d000c,0x000d000c,0x000d000c,
347 0x000e000d,0x000a000a,0x00040005,0x00060006,0x00080007,0x00090008,0x000a0009,
348 0x000b000a,0x000b000a,0x000b000b,0x000c000b,0x000c000b,0x000c000c,0x000d000c,
349 0x000e000c,0x000d000c,0x000e000c,0x000a000a,0x00070007,0x00080007,0x00090008,
350 0x000a0009,0x000b0009,0x000b000a,0x000c000a,0x000c000b,0x000d000b,0x000c000b,
351 0x000d000b,0x000d000c,0x000d000c,0x000e000c,0x000e000d,0x000b0009,0x00090008,
352 0x00090008,0x000a0009,0x000b0009,0x000b000a,0x000c000a,0x000c000a,0x000c000b,
353 0x000d000b,0x000d000b,0x000e000b,0x000e000c,0x000e000c,0x000f000c,0x000f000c,
354 0x000c0009,0x000a0009,0x000a0009,0x000b0009,0x000b000a,0x000c000a,0x000c000a,
355 0x000d000a,0x000d000b,0x000d000b,0x000e000b,0x000e000c,0x000e000c,0x000f000c,
356 0x000f000c,0x000f000d,0x000b0009,0x000a000a,0x000a0009,0x000b000a,0x000b000a,
357 0x000c000a,0x000d000a,0x000d000b,0x000e000b,0x000d000b,0x000e000b,0x000e000c,
358 0x000f000c,0x000f000c,0x000f000c,0x0010000c,0x000c0009,0x000b000a,0x000b000a,
359 0x000b000a,0x000c000a,0x000d000a,0x000d000b,0x000d000b,0x000d000b,0x000e000b,
360 0x000e000c,0x000e000c,0x000e000c,0x000f000c,0x000f000c,0x0010000d,0x000c0009,
361 0x000b000b,0x000b000a,0x000c000a,0x000c000a,0x000d000b,0x000d000b,0x000d000b,
362 0x000e000b,0x000e000c,0x000f000c,0x000f000c,0x000f000c,0x000f000c,0x0011000d,
363 0x0011000d,0x000c000a,0x000b000b,0x000c000b,0x000c000b,0x000d000b,0x000d000b,
364 0x000d000b,0x000e000b,0x000e000b,0x000f000b,0x000f000c,0x000f000c,0x000f000c,
365 0x0010000c,0x0010000d,0x0010000d,0x000c000a,0x000c000b,0x000c000b,0x000c000b,
366 0x000d000b,0x000d000b,0x000e000b,0x000e000b,0x000f000c,0x000f000c,0x000f000c,
367 0x000f000c,0x0010000c,0x000f000d,0x0010000d,0x000f000d,0x000d000a,0x000c000c,
368 0x000d000b,0x000c000b,0x000d000b,0x000e000b,0x000e000c,0x000e000c,0x000e000c,
369 0x000f000c,0x0010000c,0x0010000c,0x0010000d,0x0011000d,0x0011000d,0x0010000d,
370 0x000c000a,0x000d000c,0x000d000c,0x000d000b,0x000d000b,0x000e000b,0x000e000c,
371 0x000f000c,0x0010000c,0x0010000c,0x0010000c,0x0010000c,0x0010000d,0x0010000d,
372 0x000f000d,0x0010000d,0x000d000a,0x000d000c,0x000e000c,0x000e000c,0x000e000c,
373 0x000e000c,0x000f000c,0x000f000c,0x000f000c,0x000f000c,0x0011000c,0x0010000d,
374 0x0010000d,0x0010000d,0x0010000d,0x0012000d,0x000d000a,0x000f000c,0x000e000c,
375 0x000e000c,0x000e000c,0x000f000c,0x000f000c,0x0010000c,0x0010000c,0x0010000d,
376 0x0012000d,0x0011000d,0x0011000d,0x0011000d,0x0013000d,0x0011000d,0x000d000a,
377 0x000e000d,0x000f000c,0x000d000c,0x000e000c,0x0010000c,0x0010000c,0x000f000c,
378 0x0010000d,0x0010000d,0x0011000d,0x0012000d,0x0011000d,0x0013000d,0x0011000d,
379 0x0010000d,0x000d000a,0x000a0009,0x000a0009,0x000a0009,0x000b0009,0x000b0009,
380 0x000c0009,0x000c0009,0x000c0009,0x000d0009,0x000d0009,0x000d0009,0x000d000a,
381 0x000d000a,0x000d000a,0x000d000a,0x000a0006};
382
383static const uint8 t1l_const[8] = {1,3,2,3,1,4,3,5};
384static const uint8 t2l_const[9] = {1,3,6,3,3,5,5,5,6};
385static const uint8 t3l_const[9] = {2,2,6,3,2,5,5,5,6};
386static const uint8 t5l_const[16] = {1,3,6,7,3,3,6,7,6,6,7,8,7,6,7,8};
387static const uint8 t6l_const[16] = {3,3,5,7,3,2,4,5,4,4,5,6,6,5,6,7};
388
389static const uint8 t7l_const[36] =
390{1,3,6,8,8,9,3,4,6,7,7,8,6,5,7,8,8,9,7,7,8,9,9,9,7,7,8,9,9,10,8,8,9,10,10,10};
391
392static const uint8 t8l_const[36] =
393{2,3,6,8,8,9,3,2,4,8,8,8,6,4,6,8,8,9,8,8,8,9,9,10,8,7,8,9,10,10,9,8,9,9,11,11};
394
395static const uint8 t9l_const[36] =
396{3,3,5,6,8,9,3,3,4,5,6,8,4,4,5,6,7,8,6,5,6,7,7,8,7,6,7,7,8,9,8,7,8,8,9,9};
397
398static const uint8 t10l_const[64] =
399{1,3,6,8,9,9,9,10,3,4,6,7,8,9,8,8,6,6,7,8,9,10,9,9,7,7,8,9,10,10,9,10,8,8,9,10,
400 10,10,10,10,9,9,10,10,11,11,10,11,8,8,9,10,10,10,11,11,9,8,9,10,10,11,11,11};
401
402static const uint8 t11l_const[64] =
403{2,3,5,7,8,9,8,9,3,3,4,6,8,8,7,8,5,5,6,7,8,9,8,8,7,6,7,9,8,10,8,9,8,8,8,9,9,10,
404 9,10,8,8,9,10,10,11,10,11,8,7,7,8,9,10,10,10,8,7,8,9,10,10,10,10};
405
406static const uint8 t12l_const[64] =
407{4,3,5,7,8,9,9,9,3,3,4,5,7,7,8,8,5,4,5,6,7,8,7,8,6,5,6,6,7,8,8,8,7,6,7,7,8,
408 8,8,9,8,7,8,8,8,9,8,9,8,7,7,8,8,9,9,10,9,8,8,9,9,9,9,10};
409
410static const uint8 t13l_const[256] =
411{1,4,6,7,8,9,9,10,9,10,11,11,12,12,13,13,3,4,6,7,8,8,9,9,9,9,10,10,11,12,12,12,
412 6,6,7,8,9,9,10,10,9,10,10,11,11,12,13,13,7,7,8,9,9,10,10,10,10,11,11,11,11,12,
413 13,13,8,7,9,9,10,10,11,11,10,11,11,12,12,13,13,14,9,8,9,10,10,10,11,11,11,11,
414 12,11,13,13,14,14,9,9,10,10,11,11,11,11,11,12,12,12,13,13,14,14,10,9,10,11,11,
415 11,12,12,12,12,13,13,13,14,16,16,9,8,9,10,10,11,11,12,12,12,12,13,13,14,15,15,
416 10,9,10,10,11,11,11,13,12,13,13,14,14,14,16,15,10,10,10,11,11,12,12,13,12,13,
417 14,13,14,15,16,17,11,10,10,11,12,12,12,12,13,13,13,14,15,15,15,16,11,11,11,12,
418 12,13,12,13,14,14,15,15,15,16,16,16,12,11,12,13,13,13,14,14,14,14,14,15,16,15,
419 16,16,13,12,12,13,13,13,15,14,14,17,15,15,15,17,16,16,12,12,13,14,14,14,15,14,
420 15,15,16,16,19,18,19,16};
421
422static const uint8 t15l_const[256] =
423{3,4,5,7,7,8,9,9,9,10,10,11,11,11,12,13,4,3,5,6,7,7,8,8,8,9,9,10,10,10,11,11,5,
424 5,5,6,7,7,8,8,8,9,9,10,10,11,11,11,6,6,6,7,7,8,8,9,9,9,10,10,10,11,11,11,7,6,
425 7,7,8,8,9,9,9,9,10,10,10,11,11,11,8,7,7,8,8,8,9,9,9,9,10,10,11,11,11,12,9,7,8,
426 8,8,9,9,9,9,10,10,10,11,11,12,12,9,8,8,9,9,9,9,10,10,10,10,10,11,11,11,12,9,8,
427 8,9,9,9,9,10,10,10,10,11,11,12,12,12,9,8,9,9,9,9,10,10,10,11,11,11,11,12,12,
428 12,10,9,9,9,10,10,10,10,10,11,11,11,11,12,13,12,10,9,9,9,10,10,10,10,11,11,11,
429 11,12,12,12,13,11,10,9,10,10,10,11,11,11,11,11,11,12,12,13,13,11,10,10,10,10,
430 11,11,11,11,12,12,12,12,12,13,13,12,11,11,11,11,11,11,11,12,12,12,12,13,13,12,
431 13,12,11,11,11,11,11,11,12,12,12,12,12,13,13,13,13};
432
433static const uint8 t16l_const[256] =
434{1,4,6,8,9,9,10,10,11,11,11,12,12,12,13,9,3,4,6,7,8,9,9,9,10,10,10,11,12,11,12,
435 8,6,6,7,8,9,9,10,10,11,10,11,11,11,12,12,9,8,7,8,9,9,10,10,10,11,11,12,12,12,
436 13,13,10,9,8,9,9,10,10,11,11,11,12,12,12,13,13,13,9,9,8,9,9,10,11,11,12,11,12,
437 12,13,13,13,14,10,10,9,9,10,11,11,11,11,12,12,12,12,13,13,14,10,10,9,10,10,11,
438 11,11,12,12,13,13,13,13,15,15,10,10,10,10,11,11,11,12,12,13,13,13,13,14,14,14,
439 10,11,10,10,11,11,12,12,13,13,13,13,14,13,14,13,11,11,11,10,11,12,12,12,12,13,
440 14,14,14,15,15,14,10,12,11,11,11,12,12,13,14,14,14,14,14,14,13,14,11,12,12,12,
441 12,12,13,13,13,13,15,14,14,14,14,16,11,14,12,12,12,13,13,14,14,14,16,15,15,15,
442 17,15,11,13,13,11,12,14,14,13,14,14,15,16,15,17,15,14,11,9,8,8,9,9,10,10,10,
443 11,11,11,11,11,11,11,8};
444
445static const uint8 t24l_const[256] =
446{4,4,6,7,8,9,9,10,10,11,11,11,11,11,12,9,4,4,5,6,7,8,8,9,9,9,10,10,10,10,10,8,
447 6,5,6,7,7,8,8,9,9,9,9,10,10,10,11,7,7,6,7,7,8,8,8,9,9,9,9,10,10,10,10,7,8,7,7,
448 8,8,8,8,9,9,9,10,10,10,10,11,7,9,7,8,8,8,8,9,9,9,9,10,10,10,10,10,7,9,8,8,8,8,
449 9,9,9,9,10,10,10,10,10,11,7,10,8,8,8,9,9,9,9,10,10,10,10,10,11,11,8,10,9,9,9,
450 9,9,9,9,9,10,10,10,10,11,11,8,10,9,9,9,9,9,9,10,10,10,10,10,11,11,11,8,11,9,9,
451 9,9,10,10,10,10,10,10,11,11,11,11,8,11,10,9,9,9,10,10,10,10,10,10,11,11,11,11,
452 8,11,10,10,10,10,10,10,10,10,10,11,11,11,11,11,8,11,10,10,10,10,10,10,10,11,
453 11,11,11,11,11,11,8,12,10,10,10,10,10,10,11,11,11,11,11,11,11,11,8,8,7,7,7,7,
454 7,7,7,7,7,7,8,8,8,8,4};
282 455
283static const struct huffcodetab ht_const[HTN] = 456static const struct huffcodetab ht_const[HTN] =
284{ 457{ { 0, NULL, NULL}, /* Apparently not used */
285{ 0, 0, 0, 0, NULL, NULL}, 458 { 2, t1HB, t1l},
286{ 2, 2, 0, 0, t1HB, t1l}, 459 { 3, t2HB, t2l},
287{ 3, 3, 0, 0, t2HB, t2l}, 460 { 3, t3HB, t3l},
288{ 3, 3, 0, 0, t3HB, t3l}, 461 { 0, NULL, NULL}, /* Apparently not used */
289{ 0, 0, 0, 0, NULL, NULL},// Apparently not used 462 { 4, t5HB, t5l},
290{ 4, 4, 0, 0, t5HB, t5l}, 463 { 4, t6HB, t6l},
291{ 4, 4, 0, 0, t6HB, t6l}, 464 { 6, t7HB, t7l},
292{ 6, 6, 0, 0, t7HB, t7l}, 465 { 6, t8HB, t8l},
293{ 6, 6, 0, 0, t8HB, t8l}, 466 { 6, t9HB, t9l},
294{ 6, 6, 0, 0, t9HB, t9l}, 467 { 8, t10HB, t10l},
295{ 8, 8, 0, 0,t10HB, t10l}, 468 { 8, t11HB, t11l},
296{ 8, 8, 0, 0,t11HB, t11l}, 469 { 8, t12HB, t12l},
297{ 8, 8, 0, 0,t12HB, t12l}, 470 {16, t13HB, t13l},
298{16,16, 0, 0,t13HB, t13l}, 471 { 0, NULL, NULL}, /* Apparently not used */
299{ 0, 0, 0, 0, NULL, NULL},// Apparently not used 472 {16, t15HB, t15l} };
300{16,16, 0, 0,t15HB, t15l}, 473
301{16,16, 1, 1,t16HB, t16l}, 474static const struct huffcodebig ht_big[HTN] =
302{16,16, 2, 3,t16HB, t16l}, 475{ { 16, 1, 1 },
303{16,16, 3, 7,t16HB, t16l}, 476 { 16, 2, 3 },
304{16,16, 4, 15,t16HB, t16l}, 477 { 16, 3, 7 },
305{16,16, 6, 63,t16HB, t16l}, 478 { 16, 4, 15 },
306{16,16, 8, 255,t16HB, t16l}, 479 { 16, 6, 63 },
307{16,16,10,1023,t16HB, t16l}, 480 { 16, 8, 255 },
308{16,16,13,8191,t16HB, t16l}, 481 { 16, 10, 1023 },
309{16,16, 4, 15,t24HB, t24l}, 482 { 16, 13, 8191 },
310{16,16, 5, 31,t24HB, t24l}, 483 { 16, 4, 15 },
311{16,16, 6, 63,t24HB, t24l}, 484 { 16, 5, 31 },
312{16,16, 7, 127,t24HB, t24l}, 485 { 16, 6, 63 },
313{16,16, 8, 255,t24HB, t24l}, 486 { 16, 7, 127 },
314{16,16, 9, 511,t24HB, t24l}, 487 { 16, 8, 255 },
315{16,16,11,2047,t24HB, t24l}, 488 { 16, 9, 511 },
316{16,16,13,8191,t24HB, t24l} }; 489 { 16, 11, 2047 },
490 { 16, 13, 8191 } };
317 491
318static const struct 492static const struct
319{ 493{
320 unsigned region0_count; 494 uint32 region0_cnt;
321 unsigned region1_count; 495 uint32 region1_cnt;
322} subdv_table[23] = 496} subdv_table[23] =
323{ {0, 0}, /* 0 bands */ 497{ {0, 0}, /* 0 bands */
324 {0, 0}, /* 1 bands */ 498 {0, 0}, /* 1 bands */
325 {0, 0}, /* 2 bands */ 499 {0, 0}, /* 2 bands */
326 {0, 0}, /* 3 bands */ 500 {0, 0}, /* 3 bands */
327 {0, 0}, /* 4 bands */ 501 {0, 0}, /* 4 bands */
328 {0, 1}, /* 5 bands */ 502 {0, 1}, /* 5 bands */
329 {1, 1}, /* 6 bands */ 503 {1, 1}, /* 6 bands */
330 {1, 1}, /* 7 bands */ 504 {1, 1}, /* 7 bands */
331 {1, 2}, /* 8 bands */ 505 {1, 2}, /* 8 bands */
332 {2, 2}, /* 9 bands */ 506 {2, 2}, /* 9 bands */
333 {2, 3}, /* 10 bands */ 507 {2, 3}, /* 10 bands */
334 {2, 3}, /* 11 bands */ 508 {2, 3}, /* 11 bands */
335 {3, 4}, /* 12 bands */ 509 {3, 4}, /* 12 bands */
@@ -345,64 +519,7 @@ static const struct
345 {6, 7}, /* 22 bands */ 519 {6, 7}, /* 22 bands */
346}; 520};
347 521
348/* This is table B.9: coefficients for aliasing reduction */ 522static const uint32 sfBand[6][23] =
349static const int ca_int_const[8] = {0xffffbe25,0xffffc39e,0xffffd7e3,0xffffe8b7,0xfffff3e5,0xfffffac2,0xfffffe2f,0xffffff87};
350static const int cs_int_const[8] = {0x00006dc2,0x000070dd,0x0000798d,0x00007ddd,0x00007f6d,0x00007fe4,0x00007ffd,0x00008000};
351static const int win_int_const[18][36] = {
352{ 0x0000006b,0x00000121,0x000001a7,0x000001f9,0x00000215,0x000001f9,0x000001a7,0x00000121,0x0000006b,0xffffff8b,0xfffffe87,0xfffffd68,0xfffffc35,0xfffffaf9,0xfffff9bd,0xfffff88b,0xfffff76b,0xfffff667,0xfffff587,0xfffff4d1,0xfffff44b,0xfffff3f8,0xfffff3dd,0xfffff3f8,0xfffff44b,0xfffff4d1,0xfffff587,0xfffff667,0xfffff76b,0xfffff88b,0xfffff9bd,0xfffffaf9,0xfffffc35,0xfffffd68,0xfffffe87,0xffffff8b,},
353{ 0xffffff83,0xfffffe49,0xfffffcf3,0xfffffbc3,0xfffffaf9,0xfffffacb,0xfffffb5a,0xfffffcb0,0xfffffebf,0x0000015e,0x00000451,0x0000074d,0x00000a02,0x00000c23,0x00000d72,0x00000dc4,0x00000d06,0x00000b45,0x000008a6,0x00000565,0x000001cf,0xfffffe3b,0xfffffaf9,0xfffff853,0xfffff67c,0xfffff594,0xfffff59b,0xfffff67a,0xfffff801,0xfffff9f1,0xfffffc01,0xfffffdeb,0xffffff72,0x00000066,0x000000b5,0x00000060,},
354{ 0xffffffab,0xffffffc2,0x000000ec,0x000002e3,0x00000507,0x0000068f,0x000006c7,0x00000545,0x00000214,0xfffffdbc,0xfffff922,0xfffff55d,0xfffff366,0xfffff3dd,0xfffff6d7,0xfffffbd4,0x000001d7,0x000007a2,0x00000bfb,0x00000dfa,0x00000d3e,0x00000a00,0x00000507,0xffffff74,0xfffffa77,0xfffff70d,0xfffff5c4,0xfffff69f,0xfffff922,0xfffffc79,0xffffffb7,0x00000215,0x00000327,0x000002ef,0x000001d7,0x00000085,},
355{ 0x0000008c,0x000001d7,0x00000244,0x000000ec,0xfffffdeb,0xfffffa77,0xfffff85e,0xfffff922,0xfffffd1d,0x00000327,0x000008f3,0x00000bfb,0x00000aa3,0x00000507,0xfffffd11,0xfffff5c4,0xfffff206,0xfffff366,0xfffff971,0x000001d7,0x00000961,0x00000d3e,0x00000c23,0x000006c7,0xffffff7b,0xfffff922,0xfffff600,0xfffff6d7,0xfffffabb,0xffffffab,0x00000387,0x00000507,0x0000042c,0x00000214,0x0000003e,0xffffffb7,},
356{ 0x0000003c,0xffffff4b,0xfffffd28,0xfffffc0d,0xfffffdeb,0x00000283,0x0000070f,0x000007ff,0x000003ad,0xfffffbfd,0xfffff594,0xfffff4ec,0xfffffb2d,0x00000507,0x00000c88,0x00000cd4,0x00000565,0xfffffa91,0xfffff2e0,0xfffff2fa,0xfffffab0,0x00000530,0x00000c23,0x00000ba7,0x00000497,0xfffffbaf,0xfffff650,0xfffff720,0xfffffcb0,0x000002ec,0x00000611,0x00000507,0x000001a2,0xfffffed3,0xfffffe49,0xffffff6e,},
357{ 0xffffff69,0xfffffe87,0x00000022,0x0000039b,0x00000507,0x0000016b,0xfffffad7,0xfffff76b,0xfffffb91,0x000004d7,0x00000b2f,0x0000081a,0xfffffd46,0xfffff3dd,0xfffff490,0xffffff65,0x00000b2f,0x00000d8d,0x00000445,0xfffff76b,0xfffff221,0xfffff8b7,0x00000507,0x00000c50,0x000008d7,0xfffffe87,0xfffff6b3,0xfffff77b,0xfffffedf,0x000005a2,0x00000669,0x00000215,0xfffffdb4,0xfffffced,0xfffffedf,0x0000002f,},
358{ 0xffffffde,0x00000179,0x000002ba,0xffffffd1,0xfffffaf9,0xfffffb29,0x0000024c,0x00000895,0x00000529,0xfffffa5e,0xfffff4d1,0xfffffc65,0x0000094d,0x00000c23,0x00000097,0xfffff3b0,0xfffff4d1,0x00000313,0x00000ddf,0x00000895,0xfffff997,0xfffff273,0xfffffaf9,0x00000885,0x00000b70,0x00000179,0xfffff729,0xfffff7e6,0x00000121,0x00000749,0x0000046f,0xfffffdeb,0xfffffbbb,0xfffffe95,0x00000121,0x0000009b,},
359{ 0x0000009d,0x000000b5,0xfffffd8f,0xfffffc9c,0x00000215,0x00000682,0x000000ff,0xfffff801,0xfffffa27,0x00000662,0x00000a6c,0xfffffe70,0xfffff37f,0xfffffaf9,0x00000ac2,0x00000b04,0xfffffa9b,0xfffff1ea,0xfffffe26,0x00000d06,0x00000873,0xfffff7bf,0xfffff3dd,0x000001a5,0x00000be4,0x00000451,0xfffff7af,0xfffff861,0x00000350,0x00000793,0x000000db,0xfffffaf9,0xfffffd66,0x000001df,0x000001b7,0xffffffec,},
360{ 0x00000006,0xfffffe29,0xffffff56,0x00000414,0x00000215,0xfffffa2d,0xfffffbe5,0x000006de,0x0000067d,0xfffff8eb,0xfffff70d,0x00000671,0x00000b30,0xfffffaf9,0xfffff311,0x00000301,0x00000dfa,0xffffff62,0xfffff1cf,0xfffffe29,0x00000d8e,0x00000414,0xfffff3dd,0xfffffa2d,0x00000a1d,0x000006de,0xfffff845,0xfffff8eb,0x00000545,0x00000671,0xfffffcf8,0xfffffaf9,0x00000149,0x00000301,0xffffffc2,0xffffff62,},
361{ 0xffffff62,0x0000003e,0x00000301,0xfffffeb7,0xfffffaf9,0x00000308,0x00000671,0xfffffabb,0xfffff8eb,0x000007bb,0x000006de,0xfffff5e3,0xfffffa2d,0x00000c23,0x00000414,0xfffff272,0xfffffe29,0x00000e31,0xffffff62,0xfffff206,0x00000301,0x00000cef,0xfffffaf9,0xfffff4d0,0x00000671,0x000008f3,0xfffff8eb,0xfffff983,0x000006de,0x0000041b,0xfffffa2d,0xfffffdeb,0x00000414,0x000000aa,0xfffffe29,0xfffffffa,},
362{ 0x00000014,0x000001b7,0xfffffe21,0xfffffd66,0x00000507,0x000000db,0xfffff86d,0x00000350,0x0000079f,0xfffff7af,0xfffffbaf,0x00000be4,0xfffffe5b,0xfffff3dd,0x00000841,0x00000873,0xfffff2fa,0xfffffe26,0x00000e16,0xfffffa9b,0xfffff4fc,0x00000ac2,0x00000507,0xfffff37f,0x00000190,0x00000a6c,0xfffff99e,0xfffffa27,0x000007ff,0x000000ff,0xfffff97e,0x00000215,0x00000364,0xfffffd8f,0xffffff4b,0x0000009d,},
363{ 0x0000009b,0xfffffedf,0xfffffe95,0x00000445,0xfffffdeb,0xfffffb91,0x00000749,0xfffffedf,0xfffff7e6,0x000008d7,0x00000179,0xfffff490,0x00000885,0x00000507,0xfffff273,0x00000669,0x00000895,0xfffff221,0x00000313,0x00000b2f,0xfffff3b0,0xffffff69,0x00000c23,0xfffff6b3,0xfffffc65,0x00000b2f,0xfffffa5e,0xfffffad7,0x00000895,0xfffffdb4,0xfffffb29,0x00000507,0xffffffd1,0xfffffd46,0x00000179,0x00000022,},
364{ 0xffffffd1,0xfffffedf,0x00000313,0xfffffdb4,0xfffffdeb,0x00000669,0xfffffa5e,0xfffffedf,0x00000885,0xfffff6b3,0x00000179,0x000008d7,0xfffff3b0,0x00000507,0x00000749,0xfffff221,0x00000895,0x00000445,0xfffff273,0x00000b2f,0x0000009b,0xfffff490,0x00000c23,0xfffffd46,0xfffff7e6,0x00000b2f,0xfffffb29,0xfffffb91,0x00000895,0xfffffad7,0xfffffe95,0x00000507,0xfffffc65,0x00000022,0x00000179,0xffffff69,},
365{ 0xffffff6e,0x000001b7,0xfffffed3,0xfffffe5e,0x00000507,0xfffff9ef,0x000002ec,0x00000350,0xfffff720,0x000009b0,0xfffffbaf,0xfffffb69,0x00000ba7,0xfffff3dd,0x00000530,0x00000550,0xfffff2fa,0x00000d20,0xfffffa91,0xfffffa9b,0x00000cd4,0xfffff378,0x00000507,0x000004d3,0xfffff4ec,0x00000a6c,0xfffffbfd,0xfffffc53,0x000007ff,0xfffff8f1,0x00000283,0x00000215,0xfffffc0d,0x000002d8,0xffffff4b,0xffffffc4,},
366{ 0x00000049,0x0000003e,0xfffffdec,0x0000042c,0xfffffaf9,0x00000387,0x00000055,0xfffffabb,0x00000929,0xfffff600,0x000006de,0xffffff7b,0xfffff939,0x00000c23,0xfffff2c2,0x00000961,0xfffffe29,0xfffff971,0x00000c9a,0xfffff206,0x00000a3c,0xfffffd11,0xfffffaf9,0x00000aa3,0xfffff405,0x000008f3,0xfffffcd9,0xfffffd1d,0x000006de,0xfffff85e,0x00000589,0xfffffdeb,0xffffff14,0x00000244,0xfffffe29,0x0000008c,},
367{ 0x00000085,0xfffffe29,0x000002ef,0xfffffcd9,0x00000215,0x00000049,0xfffffc79,0x000006de,0xfffff69f,0x00000a3c,0xfffff70d,0x00000589,0xffffff74,0xfffffaf9,0x00000a00,0xfffff2c2,0x00000dfa,0xfffff405,0x000007a2,0xfffffe29,0xfffffbd4,0x00000929,0xfffff3dd,0x00000c9a,0xfffff55d,0x000006de,0xfffffdbc,0xfffffdec,0x00000545,0xfffff939,0x0000068f,0xfffffaf9,0x000002e3,0xffffff14,0xffffffc2,0x00000055,},
368{ 0xffffffa0,0x000000b5,0xffffff9a,0xffffff72,0x00000215,0xfffffc01,0x0000060f,0xfffff801,0x00000986,0xfffff59b,0x00000a6c,0xfffff67c,0x000007ad,0xfffffaf9,0x000001c5,0x000001cf,0xfffffa9b,0x000008a6,0xfffff4bb,0x00000d06,0xfffff23c,0x00000d72,0xfffff3dd,0x00000a02,0xfffff8b3,0x00000451,0xfffffea2,0xfffffebf,0x00000350,0xfffffb5a,0x00000535,0xfffffaf9,0x0000043d,0xfffffcf3,0x000001b7,0xffffff83,},
369{ 0xffffff8b,0x00000179,0xfffffd68,0x000003cb,0xfffffaf9,0x00000643,0xfffff88b,0x00000895,0xfffff667,0x00000a79,0xfffff4d1,0x00000bb5,0xfffff3f8,0x00000c23,0xfffff3f8,0x00000bb5,0xfffff4d1,0x00000a79,0xfffff667,0x00000895,0xfffff88b,0x00000643,0xfffffaf9,0x000003cb,0xfffffd68,0x00000179,0xffffff8b,0xffffff95,0x00000121,0xfffffe59,0x000001f9,0xfffffdeb,0x000001f9,0xfffffe59,0x00000121,0xffffff95,}};
370
371static const short filter_int_const[SBLIMIT][64] = {
372{ 23170, 24279, 25330, 26320, 27246, 28106, 28899, 29622, 30274, 30853, 31357, 31786, 32138, 32413, 32610, 32729, 32767, 32729, 32610, 32413, 32138, 31786, 31357, 30853, 30274, 29622, 28899, 28106, 27246, 26320, 25330, 24279, 23170, 22006, 20788, 19520, 18205, 16846, 15447, 14010, 12540, 11039, 9512, 7962, 6393, 4808, 3212, 1608, 0, -1607, -3211, -4807, -6392, -7961, -9511,-11038,-12539,-14009,-15446,-16845,-18204,-19519,-20787,-22005, },
373{ -23169,-19519,-15446,-11038, -6392, -1607, 3212, 7962, 12540, 16846, 20788, 24279, 27246, 29622, 31357, 32413, 32767, 32413, 31357, 29622, 27246, 24279, 20788, 16846, 12540, 7962, 3212, -1607, -6392,-11038,-15446,-19519,-23169,-26319,-28898,-30852,-32137,-32728,-32609,-31785,-30273,-28105,-25329,-22005,-18204,-14009, -9511, -4807, 0, 4808, 9512, 14010, 18205, 22006, 25330, 28106, 30274, 31786, 32610, 32729, 32138, 30853, 28899, 26320, },
374{ -23169,-28105,-31356,-32728,-32137,-29621,-25329,-19519,-12539, -4807, 3212, 11039, 18205, 24279, 28899, 31786, 32767, 31786, 28899, 24279, 18205, 11039, 3212, -4807,-12539,-19519,-25329,-29621,-32137,-32728,-31356,-28105,-23169,-16845, -9511, -1607, 6393, 14010, 20788, 26320, 30274, 32413, 32610, 30853, 27246, 22006, 15447, 7962, 0, -7961,-15446,-22005,-27245,-30852,-32609,-32412,-30273,-26319,-20787,-14009, -6392, 1608, 9512, 16846, },
375{ 23170, 14010, 3212, -7961,-18204,-26319,-31356,-32728,-30273,-24278,-15446, -4807, 6393, 16846, 25330, 30853, 32767, 30853, 25330, 16846, 6393, -4807,-15446,-24278,-30273,-32728,-31356,-26319,-18204, -7961, 3212, 14010, 23170, 29622, 32610, 31786, 27246, 19520, 9512, -1607,-12539,-22005,-28898,-32412,-32137,-28105,-20787,-11038, 0, 11039, 20788, 28106, 32138, 32413, 28899, 22006, 12540, 1608, -9511,-19519,-27245,-31785,-32609,-29621, },
376{ 23170, 30853, 32610, 28106, 18205, 4808, -9511,-22005,-30273,-32728,-28898,-19519, -6392, 7962, 20788, 29622, 32767, 29622, 20788, 7962, -6392,-19519,-28898,-32728,-30273,-22005, -9511, 4808, 18205, 28106, 32610, 30853, 23170, 11039, -3211,-16845,-27245,-32412,-31356,-24278,-12539, 1608, 15447, 26320, 32138, 31786, 25330, 14010, 0,-14009,-25329,-31785,-32137,-26319,-15446, -1607, 12540, 24279, 31357, 32413, 27246, 16846, 3212,-11038, },
377{ -23169, -7961, 9512, 24279, 32138, 30853, 20788, 4808,-12539,-26319,-32609,-29621,-18204, -1607, 15447, 28106, 32767, 28106, 15447, -1607,-18204,-29621,-32609,-26319,-12539, 4808, 20788, 30853, 32138, 24279, 9512, -7961,-23169,-31785,-31356,-22005, -6392, 11039, 25330, 32413, 30274, 19520, 3212,-14009,-27245,-32728,-28898,-16845, 0, 16846, 28899, 32729, 27246, 14010, -3211,-19519,-30273,-32412,-25329,-11038, 6393, 22006, 31357, 31786, },
378{ -23169,-32412,-28898,-14009, 6393, 24279, 32610, 28106, 12540, -7961,-25329,-32728,-27245,-11038, 9512, 26320, 32767, 26320, 9512,-11038,-27245,-32728,-25329, -7961, 12540, 28106, 32610, 24279, 6393,-14009,-28898,-32412,-23169, -4807, 15447, 29622, 32138, 22006, 3212,-16845,-30273,-31785,-20787, -1607, 18205, 30853, 31357, 19520, 0,-19519,-31356,-30852,-18204, 1608, 20788, 31786, 30274, 16846, -3211,-22005,-32137,-29621,-15446, 4808, },
379{ 23170, 1608,-20787,-32412,-27245, -7961, 15447, 30853, 30274, 14010, -9511,-28105,-32137,-19519, 3212, 24279, 32767, 24279, 3212,-19519,-32137,-28105, -9511, 14010, 30274, 30853, 15447, -7961,-27245,-32412,-20787, 1608, 23170, 32729, 25330, 4808,-18204,-31785,-28898,-11038, 12540, 29622, 31357, 16846, -6392,-26319,-32609,-22005, 0, 22006, 32610, 26320, 6393,-16845,-31356,-29621,-12539, 11039, 28899, 31786, 18205, -4807,-25329,-32728, },
380{ 23170, 32729, 20788, -4807,-27245,-31785,-15446, 11039, 30274, 29622, 9512,-16845,-32137,-26319, -3211, 22006, 32767, 22006, -3211,-26319,-32137,-16845, 9512, 29622, 30274, 11039,-15446,-31785,-27245, -4807, 20788, 32729, 23170, -1607,-25329,-32412,-18204, 7962, 28899, 30853, 12540,-14009,-31356,-28105, -6392, 19520, 32610, 24279, 0,-24278,-32609,-19519, 6393, 28106, 31357, 14010,-12539,-30852,-28898, -7961, 18205, 32413, 25330, 1608, },
381{ -23169, 4808, 28899, 29622, 6393,-22005,-32609,-16845, 12540, 31786, 25330, -1607,-27245,-30852, -9511, 19520, 32767, 19520, -9511,-30852,-27245, -1607, 25330, 31786, 12540,-16845,-32609,-22005, 6393, 29622, 28899, 4808,-23169,-32412,-15446, 14010, 32138, 24279, -3211,-28105,-30273, -7961, 20788, 32729, 18205,-11038,-31356,-26319, 0, 26320, 31357, 11039,-18204,-32728,-20787, 7962, 30274, 28106, 3212,-24278,-32137,-14009, 15447, 32413, },
382{ -23169,-31785, -9511, 22006, 32138, 11039,-20787,-32412,-12539, 19520, 32610, 14010,-18204,-32728,-15446, 16846, 32767, 16846,-15446,-32728,-18204, 14010, 32610, 19520,-12539,-32412,-20787, 11039, 32138, 22006, -9511,-31785,-23169, 7962, 31357, 24279, -6392,-30852,-25329, 4808, 30274, 26320, -3211,-29621,-27245, 1608, 28899, 28106, 0,-28105,-28898, -1607, 27246, 29622, 3212,-26319,-30273, -4807, 25330, 30853, 6393,-24278,-31356, -7961, },
383{ 23170,-11038,-32609,-16845, 18205, 32413, 9512,-24278,-30273, -1607, 28899, 26320, -6392,-31785,-20787, 14010, 32767, 14010,-20787,-31785, -6392, 26320, 28899, -1607,-30273,-24278, 9512, 32413, 18205,-16845,-32609,-11038, 23170, 30853, 3212,-28105,-27245, 4808, 31357, 22006,-12539,-32728,-15446, 19520, 32138, 7962,-25329,-29621, 0, 29622, 25330, -7961,-32137,-19519, 15447, 32729, 12540,-22005,-31356, -4807, 27246, 28106, -3211,-30852, },
384{ 23170, 29622, -3211,-31785,-18204, 19520, 31357, 1608,-30273,-22005, 15447, 32413, 6393,-28105,-25329, 11039, 32767, 11039,-25329,-28105, 6393, 32413, 15447,-22005,-30273, 1608, 31357, 19520,-18204,-31785, -3211, 29622, 23170,-14009,-32609, -7961, 27246, 26320, -9511,-32728,-12539, 24279, 28899, -4807,-32137,-16845, 20788, 30853, 0,-30852,-20787, 16846, 32138, 4808,-28898,-24278, 12540, 32729, 9512,-26319,-27245, 7962, 32610, 14010, },
385{ -23169, 16846, 31357, -1607,-32137,-14009, 25330, 26320,-12539,-32412, -3211, 30853, 18205,-22005,-28898, 7962, 32767, 7962,-28898,-22005, 18205, 30853, -3211,-32412,-12539, 26320, 25330,-14009,-32137, -1607, 31357, 16846,-23169,-28105, 9512, 32729, 6393,-29621,-20787, 19520, 30274, -4807,-32609,-11038, 27246, 24279,-15446,-31785, 0, 31786, 15447,-24278,-27245, 11039, 32610, 4808,-30273,-19519, 20788, 29622, -6392,-32728, -9511, 28106, },
386{ -23169,-26319, 15447, 30853, -6392,-32728, -3211, 31786, 12540,-28105,-20787, 22006, 27246,-14009,-31356, 4808, 32767, 4808,-31356,-14009, 27246, 22006,-20787,-28105, 12540, 31786, -3211,-32728, -6392, 30853, 15447,-26319,-23169, 19520, 28899,-11038,-32137, 1608, 32610, 7962,-30273,-16845, 25330, 24279,-18204,-29621, 9512, 32413, 0,-32412, -9511, 29622, 18205,-24278,-25329, 16846, 30274, -7961,-32609, -1607, 32138, 11039,-28898,-19519, },
387{ 23170,-22005,-25329, 19520, 27246,-16845,-28898, 14010, 30274,-11038,-31356, 7962, 32138, -4807,-32609, 1608, 32767, 1608,-32609, -4807, 32138, 7962,-31356,-11038, 30274, 14010,-28898,-16845, 27246, 19520,-25329,-22005, 23170, 24279,-20787,-26319, 18205, 28106,-15446,-29621, 12540, 30853, -9511,-31785, 6393, 32413, -3211,-32728, 0, 32729, 3212,-32412, -6392, 31786, 9512,-30852,-12539, 29622, 15447,-28105,-18204, 26320, 20788,-24278, },
388{ 23170, 22006,-25329,-19519, 27246, 16846,-28898,-14009, 30274, 11039,-31356, -7961, 32138, 4808,-32609, -1607, 32767, -1607,-32609, 4808, 32138, -7961,-31356, 11039, 30274,-14009,-28898, 16846, 27246,-19519,-25329, 22006, 23170,-24278,-20787, 26320, 18205,-28105,-15446, 29622, 12540,-30852, -9511, 31786, 6393,-32412, -3211, 32729, 0,-32728, 3212, 32413, -6392,-31785, 9512, 30853,-12539,-29621, 15447, 28106,-18204,-26319, 20788, 24279, },
389{ -23169, 26320, 15447,-30852, -6392, 32729, -3211,-31785, 12540, 28106,-20787,-22005, 27246, 14010,-31356, -4807, 32767, -4807,-31356, 14010, 27246,-22005,-20787, 28106, 12540,-31785, -3211, 32729, -6392,-30852, 15447, 26320,-23169,-19519, 28899, 11039,-32137, -1607, 32610, -7961,-30273, 16846, 25330,-24278,-18204, 29622, 9512,-32412, 0, 32413, -9511,-29621, 18205, 24279,-25329,-16845, 30274, 7962,-32609, 1608, 32138,-11038,-28898, 19520, },
390{ -23169,-16845, 31357, 1608,-32137, 14010, 25330,-26319,-12539, 32413, -3211,-30852, 18205, 22006,-28898, -7961, 32767, -7961,-28898, 22006, 18205,-30852, -3211, 32413,-12539,-26319, 25330, 14010,-32137, 1608, 31357,-16845,-23169, 28106, 9512,-32728, 6393, 29622,-20787,-19519, 30274, 4808,-32609, 11039, 27246,-24278,-15446, 31786, 0,-31785, 15447, 24279,-27245,-11038, 32610, -4807,-30273, 19520, 20788,-29621, -6392, 32729, -9511,-28105, },
391{ 23170,-29621, -3211, 31786,-18204,-19519, 31357, -1607,-30273, 22006, 15447,-32412, 6393, 28106,-25329,-11038, 32767,-11038,-25329, 28106, 6393,-32412, 15447, 22006,-30273, -1607, 31357,-19519,-18204, 31786, -3211,-29621, 23170, 14010,-32609, 7962, 27246,-26319, -9511, 32729,-12539,-24278, 28899, 4808,-32137, 16846, 20788,-30852, 0, 30853,-20787,-16845, 32138, -4807,-28898, 24279, 12540,-32728, 9512, 26320,-27245, -7961, 32610,-14009, },
392{ 23170, 11039,-32609, 16846, 18205,-32412, 9512, 24279,-30273, 1608, 28899,-26319, -6392, 31786,-20787,-14009, 32767,-14009,-20787, 31786, -6392,-26319, 28899, 1608,-30273, 24279, 9512,-32412, 18205, 16846,-32609, 11039, 23170,-30852, 3212, 28106,-27245, -4807, 31357,-22005,-12539, 32729,-15446,-19519, 32138, -7961,-25329, 29622, 0,-29621, 25330, 7962,-32137, 19520, 15447,-32728, 12540, 22006,-31356, 4808, 27246,-28105, -3211, 30853, },
393{ -23169, 31786, -9511,-22005, 32138,-11038,-20787, 32413,-12539,-19519, 32610,-14009,-18204, 32729,-15446,-16845, 32767,-16845,-15446, 32729,-18204,-14009, 32610,-19519,-12539, 32413,-20787,-11038, 32138,-22005, -9511, 31786,-23169, -7961, 31357,-24278, -6392, 30853,-25329, -4807, 30274,-26319, -3211, 29622,-27245, -1607, 28899,-28105, 0, 28106,-28898, 1608, 27246,-29621, 3212, 26320,-30273, 4808, 25330,-30852, 6393, 24279,-31356, 7962, },
394{ -23169, -4807, 28899,-29621, 6393, 22006,-32609, 16846, 12540,-31785, 25330, 1608,-27245, 30853, -9511,-19519, 32767,-19519, -9511, 30853,-27245, 1608, 25330,-31785, 12540, 16846,-32609, 22006, 6393,-29621, 28899, -4807,-23169, 32413,-15446,-14009, 32138,-24278, -3211, 28106,-30273, 7962, 20788,-32728, 18205, 11039,-31356, 26320, 0,-26319, 31357,-11038,-18204, 32729,-20787, -7961, 30274,-28105, 3212, 24279,-32137, 14010, 15447,-32412, },
395{ 23170,-32728, 20788, 4808,-27245, 31786,-15446,-11038, 30274,-29621, 9512, 16846,-32137, 26320, -3211,-22005, 32767,-22005, -3211, 26320,-32137, 16846, 9512,-29621, 30274,-11038,-15446, 31786,-27245, 4808, 20788,-32728, 23170, 1608,-25329, 32413,-18204, -7961, 28899,-30852, 12540, 14010,-31356, 28106, -6392,-19519, 32610,-24278, 0, 24279,-32609, 19520, 6393,-28105, 31357,-14009,-12539, 30853,-28898, 7962, 18205,-32412, 25330, -1607, },
396{ 23170, -1607,-20787, 32413,-27245, 7962, 15447,-30852, 30274,-14009, -9511, 28106,-32137, 19520, 3212,-24278, 32767,-24278, 3212, 19520,-32137, 28106, -9511,-14009, 30274,-30852, 15447, 7962,-27245, 32413,-20787, -1607, 23170,-32728, 25330, -4807,-18204, 31786,-28898, 11039, 12540,-29621, 31357,-16845, -6392, 26320,-32609, 22006, 0,-22005, 32610,-26319, 6393, 16846,-31356, 29622,-12539,-11038, 28899,-31785, 18205, 4808,-25329, 32729, },
397{ -23169, 32413,-28898, 14010, 6393,-24278, 32610,-28105, 12540, 7962,-25329, 32729,-27245, 11039, 9512,-26319, 32767,-26319, 9512, 11039,-27245, 32729,-25329, 7962, 12540,-28105, 32610,-24278, 6393, 14010,-28898, 32413,-23169, 4808, 15447,-29621, 32138,-22005, 3212, 16846,-30273, 31786,-20787, 1608, 18205,-30852, 31357,-19519, 0, 19520,-31356, 30853,-18204, -1607, 20788,-31785, 30274,-16845, -3211, 22006,-32137, 29622,-15446, -4807, },
398{ -23169, 7962, 9512,-24278, 32138,-30852, 20788, -4807,-12539, 26320,-32609, 29622,-18204, 1608, 15447,-28105, 32767,-28105, 15447, 1608,-18204, 29622,-32609, 26320,-12539, -4807, 20788,-30852, 32138,-24278, 9512, 7962,-23169, 31786,-31356, 22006, -6392,-11038, 25330,-32412, 30274,-19519, 3212, 14010,-27245, 32729,-28898, 16846, 0,-16845, 28899,-32728, 27246,-14009, -3211, 19520,-30273, 32413,-25329, 11039, 6393,-22005, 31357,-31785, },
399{ 23170,-30852, 32610,-28105, 18205, -4807, -9511, 22006,-30273, 32729,-28898, 19520, -6392, -7961, 20788,-29621, 32767,-29621, 20788, -7961, -6392, 19520,-28898, 32729,-30273, 22006, -9511, -4807, 18205,-28105, 32610,-30852, 23170,-11038, -3211, 16846,-27245, 32413,-31356, 24279,-12539, -1607, 15447,-26319, 32138,-31785, 25330,-14009, 0, 14010,-25329, 31786,-32137, 26320,-15446, 1608, 12540,-24278, 31357,-32412, 27246,-16845, 3212, 11039, },
400{ 23170,-14009, 3212, 7962,-18204, 26320,-31356, 32729,-30273, 24279,-15446, 4808, 6393,-16845, 25330,-30852, 32767,-30852, 25330,-16845, 6393, 4808,-15446, 24279,-30273, 32729,-31356, 26320,-18204, 7962, 3212,-14009, 23170,-29621, 32610,-31785, 27246,-19519, 9512, 1608,-12539, 22006,-28898, 32413,-32137, 28106,-20787, 11039, 0,-11038, 20788,-28105, 32138,-32412, 28899,-22005, 12540, -1607, -9511, 19520,-27245, 31786,-32609, 29622, },
401{ -23169, 28106,-31356, 32729,-32137, 29622,-25329, 19520,-12539, 4808, 3212,-11038, 18205,-24278, 28899,-31785, 32767,-31785, 28899,-24278, 18205,-11038, 3212, 4808,-12539, 19520,-25329, 29622,-32137, 32729,-31356, 28106,-23169, 16846, -9511, 1608, 6393,-14009, 20788,-26319, 30274,-32412, 32610,-30852, 27246,-22005, 15447, -7961, 0, 7962,-15446, 22006,-27245, 30853,-32609, 32413,-30273, 26320,-20787, 14010, -6392, -1607, 9512,-16845, },
402{ -23169, 19520,-15446, 11039, -6392, 1608, 3212, -7961, 12540,-16845, 20788,-24278, 27246,-29621, 31357,-32412, 32767,-32412, 31357,-29621, 27246,-24278, 20788,-16845, 12540, -7961, 3212, 1608, -6392, 11039,-15446, 19520,-23169, 26320,-28898, 30853,-32137, 32729,-32609, 31786,-30273, 28106,-25329, 22006,-18204, 14010, -9511, 4808, 0, -4807, 9512,-14009, 18205,-22005, 25330,-28105, 30274,-31785, 32610,-32728, 32138,-30852, 28899,-26319, },
403{ 23170,-24278, 25330,-26319, 27246,-28105, 28899,-29621, 30274,-30852, 31357,-31785, 32138,-32412, 32610,-32728, 32767,-32728, 32610,-32412, 32138,-31785, 31357,-30852, 30274,-29621, 28899,-28105, 27246,-26319, 25330,-24278, 23170,-22005, 20788,-19519, 18205,-16845, 15447,-14009, 12540,-11038, 9512, -7961, 6393, -4807, 3212, -1607, 0, 1608, -3211, 4808, -6392, 7962, -9511, 11039,-12539, 14010,-15446, 16846,-18204, 19520,-20787, 22006, } };
404
405static const int sfBand[6][23] =
406{ 523{
407/* Table B.2.b: 22.05 kHz */ 524/* Table B.2.b: 22.05 kHz */
408{0,6,12,18,24,30,36,44,54,66,80,96,116,140,168,200,238,284,336,396,464,522,576}, 525{0,6,12,18,24,30,36,44,54,66,80,96,116,140,168,200,238,284,336,396,464,522,576},
@@ -417,1474 +534,577 @@ static const int sfBand[6][23] =
417/* Table B.8.a: 32 kHz */ 534/* Table B.8.a: 32 kHz */
418{0,4, 8,12,16,20,24,30,36,44,54,66, 82,102,126,156,194,240,296,364,448,550,576} }; 535{0,4, 8,12,16,20,24,30,36,44,54,66, 82,102,126,156,194,240,296,364,448,550,576} };
419 536
420static const uint16 enwindow_int_const[512] = { 537
4210x0000,0x0035,0x01fd,0x066c,0x4948,0x066c,0x01fd,0x0035,0x0000,0x0037,0x01f4,0x05d2,0x493c,0x06f8,0x0204,0x0034, 538static const short int2idx_const[4096] = /* int2idx[i] = sqrt(i*sqrt(i)); */
4220x0000,0x0038,0x01e8,0x052a,0x491a,0x0776,0x0208,0x0032,0x0000,0x0038,0x01d9,0x0474,0x48e1,0x07e7,0x020a,0x0031, 539{
4230x0000,0x0039,0x01c8,0x03b0,0x4892,0x084b,0x0209,0x0030,0x0000,0x0039,0x01b3,0x02de,0x482d,0x08a2,0x0207,0x002e, 540 0, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 6, 7, 7, 8, 8, 8, 9, 9,
4240x0000,0x0039,0x019b,0x01fd,0x47b2,0x08ed,0x0202,0x002c,0x0000,0x0039,0x0180,0x010f,0x4721,0x092b,0x01fc,0x002a, 541 9, 10, 10, 11, 11, 11, 12, 12, 12, 12, 13, 13, 13, 14, 14, 14, 15, 15, 15, 16,
4250x0000,0x0038,0x0161,0x0011,0x467a,0x095e,0x01f4,0x0028,0x0000,0x0037,0x0140,0xff07,0x45bf,0x0985,0x01eb,0x0026, 542 16, 16, 16, 17, 17, 17, 18, 18, 18, 19, 19, 19, 19, 20, 20, 20, 20, 21, 21, 21,
4260x0000,0x0036,0x011b,0xfdee,0x44f0,0x09a2,0x01e0,0x0025,0x0000,0x0034,0x00f3,0xfcc8,0x440c,0x09b4,0x01d4,0x0023, 543 22, 22, 22, 22, 23, 23, 23, 23, 24, 24, 24, 24, 25, 25, 25, 25, 26, 26, 26, 26,
4270x0000,0x0032,0x00c7,0xfb93,0x4315,0x09bb,0x01c6,0x0021,0x0000,0x002f,0x0097,0xfa53,0x420b,0x09ba,0x01b8,0x001f, 544 27, 27, 27, 27, 28, 28, 28, 28, 29, 29, 29, 29, 30, 30, 30, 30, 31, 31, 31, 31,
4280x0000,0x002c,0x0065,0xf905,0x40f0,0x09af,0x01a9,0x001d,0x0000,0x0029,0x002e,0xf7aa,0x3fc3,0x099b,0x0198,0x001c, 545 32, 32, 32, 32, 33, 33, 33, 33, 34, 34, 34, 34, 34, 35, 35, 35, 35, 36, 36, 36,
4290x0000,0x0025,0xfff6,0xf643,0x3e85,0x0980,0x0188,0x001a,0xffff,0x0020,0xffb9,0xf4d1,0x3d37,0x095c,0x0176,0x0018, 546 36, 36, 37, 37, 37, 37, 38, 38, 38, 38, 38, 39, 39, 39, 39, 40, 40, 40, 40, 40,
4300xffff,0x001b,0xff79,0xf354,0x3bda,0x0932,0x0165,0x0017,0xffff,0x0015,0xff36,0xf1cc,0x3a70,0x0901,0x0153,0x0015, 547 41, 41, 41, 41, 42, 42, 42, 42, 42, 43, 43, 43, 43, 44, 44, 44, 44, 44, 45, 45,
4310xffff,0x000e,0xfeef,0xf03a,0x38f7,0x08ca,0x0141,0x0014,0xffff,0x0007,0xfea6,0xee9f,0x3773,0x088d,0x012f,0x0012, 548 45, 45, 45, 46, 46, 46, 46, 46, 47, 47, 47, 47, 47, 48, 48, 48, 48, 49, 49, 49,
4320xfffe,0x0000,0xfe5a,0xecfb,0x35e3,0x084b,0x011c,0x0011,0xfffe,0xfff8,0xfe0b,0xeb50,0x3447,0x0804,0x010a,0x0010, 549 49, 49, 50, 50, 50, 50, 50, 51, 51, 51, 51, 51, 52, 52, 52, 52, 52, 53, 53, 53,
4330xfffe,0xffef,0xfdbb,0xe99d,0x32a3,0x07ba,0x00f8,0x000f,0xfffd,0xffe5,0xfd67,0xe7e4,0x30f6,0x076b,0x00e6,0x000d, 550 53, 53, 54, 54, 54, 54, 54, 55, 55, 55, 55, 55, 56, 56, 56, 56, 56, 57, 57, 57,
4340xfffd,0xffdb,0xfd12,0xe624,0x2f41,0x071a,0x00d4,0x000c,0xfffd,0xffd0,0xfcbb,0xe461,0x2d86,0x06c6,0x00c3,0x000b, 551 57, 57, 58, 58, 58, 58, 58, 58, 59, 59, 59, 59, 59, 60, 60, 60, 60, 60, 61, 61,
4350xfffc,0xffc4,0xfc63,0xe299,0x2bc5,0x066f,0x00b2,0x000a,0xfffc,0xffb8,0xfc09,0xe0ce,0x2a00,0x0617,0x00a1,0x0009, 552 61, 61, 61, 62, 62, 62, 62, 62, 62, 63, 63, 63, 63, 63, 64, 64, 64, 64, 64, 65,
4360xfffb,0xffaa,0xfbaf,0xdf01,0x2836,0x05be,0x0091,0x0009,0xfffb,0xff9d,0xfb54,0xdd33,0x266a,0x0563,0x0081,0x0008, 553 65, 65, 65, 65, 65, 66, 66, 66, 66, 66, 67, 67, 67, 67, 67, 68, 68, 68, 68, 68,
4370xfffa,0xff8e,0xfaf9,0xdb65,0x249c,0x0508,0x0073,0x0007,0xfff9,0xff80,0xfa9e,0xd997,0x22ce,0x04ad,0x0064,0x0006, 554 68, 69, 69, 69, 69, 69, 70, 70, 70, 70, 70, 70, 71, 71, 71, 71, 71, 72, 72, 72,
4380xfff8,0xff70,0xfa43,0xd7cb,0x2100,0x0452,0x0057,0x0006,0xfff8,0xff60,0xf9ea,0xd601,0x1f33,0x03f8,0x0049,0x0005, 555 72, 72, 72, 73, 73, 73, 73, 73, 74, 74, 74, 74, 74, 74, 75, 75, 75, 75, 75, 75,
4390xfff7,0xff4f,0xf992,0xd43c,0x1d68,0x039e,0x003d,0x0005,0xfff6,0xff3e,0xf93b,0xd27b,0x1ba0,0x0346,0x0031,0x0004, 556 76, 76, 76, 76, 76, 77, 77, 77, 77, 77, 77, 78, 78, 78, 78, 78, 78, 79, 79, 79,
4400xfff5,0xff2d,0xf8e7,0xd0c0,0x19dd,0x02ef,0x0026,0x0004,0xfff4,0xff1b,0xf896,0xcf0b,0x181d,0x029a,0x001c,0x0004, 557 79, 79, 80, 80, 80, 80, 80, 80, 81, 81, 81, 81, 81, 81, 82, 82, 82, 82, 82, 82,
4410xfff2,0xff09,0xf847,0xcd5e,0x1664,0x0246,0x0012,0x0003,0xfff1,0xfef7,0xf7fd,0xcbba,0x14b1,0x01f6,0x0009,0x0003, 558 83, 83, 83, 83, 83, 84, 84, 84, 84, 84, 84, 85, 85, 85, 85, 85, 85, 86, 86, 86,
4420xfff0,0xfee5,0xf7b6,0xca1e,0x1306,0x01a7,0x0001,0x0003,0xffef,0xfed2,0xf774,0xc88e,0x1162,0x015b,0xfffa,0x0002, 559 86, 86, 86, 87, 87, 87, 87, 87, 87, 88, 88, 88, 88, 88, 88, 89, 89, 89, 89, 89,
4430xffed,0xfec0,0xf737,0xc70a,0x0fc7,0x0112,0xfff3,0x0002,0xffec,0xfeae,0xf700,0xc591,0x0e35,0x00cb,0xffec,0x0002, 560 89, 90, 90, 90, 90, 90, 90, 91, 91, 91, 91, 91, 91, 92, 92, 92, 92, 92, 92, 93,
4440xffea,0xfe9c,0xf6cf,0xc427,0x0cad,0x0088,0xffe6,0x0002,0xffe9,0xfe8b,0xf6a5,0xc2ca,0x0b30,0x0048,0xffe1,0x0002, 561 93, 93, 93, 93, 93, 94, 94, 94, 94, 94, 94, 95, 95, 95, 95, 95, 95, 96, 96, 96,
4450xffe7,0xfe79,0xf681,0xc17c,0x09be,0x000b,0xffdc,0x0001,0xffe5,0xfe69,0xf666,0xc03e,0x0857,0xffd3,0xffd8,0x0001, 562 96, 96, 96, 97, 97, 97, 97, 97, 97, 98, 98, 98, 98, 98, 98, 99, 99, 99, 99, 99,
4460xffe4,0xfe58,0xf652,0xbf11,0x06fc,0xff9c,0xffd5,0x0001,0xffe2,0xfe49,0xf647,0xbdf6,0x05ae,0xff6a,0xffd2,0x0001, 563 99, 99,100,100,100,100,100,100,101,101,101,101,101,101,102,102,102,102,102,102,
4470xffe0,0xfe3b,0xf646,0xbcec,0x046e,0xff3a,0xffcf,0x0001,0xffde,0xfe2d,0xf64d,0xbbf5,0x0339,0xff0e,0xffcd,0x0001, 564103,103,103,103,103,103,104,104,104,104,104,104,104,105,105,105,105,105,105,106,
4480xffdc,0xfe21,0xf65f,0xbb11,0x0213,0xfee6,0xffcb,0x0001,0xffdb,0xfe16,0xf67c,0xba42,0x00fa,0xfec1,0xffca,0x0001, 565106,106,106,106,106,107,107,107,107,107,107,107,108,108,108,108,108,108,109,109,
4490xffd9,0xfe0d,0xf6a3,0xb987,0xfff0,0xfea0,0xffc9,0x0001,0xffd7,0xfe05,0xf6d6,0xb8e0,0xfef2,0xfe81,0xffc8,0x0001, 566109,109,109,109,110,110,110,110,110,110,110,111,111,111,111,111,111,112,112,112,
4500xffd5,0xfdff,0xf714,0xb84f,0xfe04,0xfe66,0xffc8,0x0000,0xffd3,0xfdfa,0xf75f,0xb7d4,0xfd23,0xfe4e,0xffc8,0x0000, 567112,112,112,112,113,113,113,113,113,113,114,114,114,114,114,114,115,115,115,115,
4510xffd1,0xfdf8,0xf7b6,0xb76f,0xfc51,0xfe39,0xffc8,0x0000,0xffd0,0xfdf7,0xf81a,0xb720,0xfb8d,0xfe28,0xffc9,0x0000, 568115,115,115,116,116,116,116,116,116,117,117,117,117,117,117,117,118,118,118,118,
4520xffcf,0xfdf9,0xf88b,0xb6e7,0xfad7,0xfe19,0xffc9,0x0000,0xffcd,0xfdfd,0xf909,0xb6c5,0xfa2f,0xfe0d,0xffca,0x0000, 569118,118,118,119,119,119,119,119,119,120,120,120,120,120,120,120,121,121,121,121,
570121,121,122,122,122,122,122,122,122,123,123,123,123,123,123,123,124,124,124,124,
571124,124,125,125,125,125,125,125,125,126,126,126,126,126,126,126,127,127,127,127,
572127,127,128,128,128,128,128,128,128,129,129,129,129,129,129,129,130,130,130,130,
573130,130,131,131,131,131,131,131,131,132,132,132,132,132,132,132,133,133,133,133,
574133,133,133,134,134,134,134,134,134,134,135,135,135,135,135,135,136,136,136,136,
575136,136,136,137,137,137,137,137,137,137,138,138,138,138,138,138,138,139,139,139,
576139,139,139,139,140,140,140,140,140,140,140,141,141,141,141,141,141,141,142,142,
577142,142,142,142,142,143,143,143,143,143,143,143,144,144,144,144,144,144,144,145,
578145,145,145,145,145,145,146,146,146,146,146,146,146,147,147,147,147,147,147,147,
579148,148,148,148,148,148,148,149,149,149,149,149,149,149,150,150,150,150,150,150,
580150,151,151,151,151,151,151,151,152,152,152,152,152,152,152,153,153,153,153,153,
581153,153,154,154,154,154,154,154,154,154,155,155,155,155,155,155,155,156,156,156,
582156,156,156,156,157,157,157,157,157,157,157,158,158,158,158,158,158,158,159,159,
583159,159,159,159,159,160,160,160,160,160,160,160,160,161,161,161,161,161,161,161,
584162,162,162,162,162,162,162,163,163,163,163,163,163,163,163,164,164,164,164,164,
585164,164,165,165,165,165,165,165,165,166,166,166,166,166,166,166,167,167,167,167,
586167,167,167,167,168,168,168,168,168,168,168,169,169,169,169,169,169,169,169,170,
587170,170,170,170,170,170,171,171,171,171,171,171,171,172,172,172,172,172,172,172,
588172,173,173,173,173,173,173,173,174,174,174,174,174,174,174,174,175,175,175,175,
589175,175,175,176,176,176,176,176,176,176,176,177,177,177,177,177,177,177,178,178,
590178,178,178,178,178,178,179,179,179,179,179,179,179,180,180,180,180,180,180,180,
591180,181,181,181,181,181,181,181,182,182,182,182,182,182,182,182,183,183,183,183,
592183,183,183,184,184,184,184,184,184,184,184,185,185,185,185,185,185,185,186,186,
593186,186,186,186,186,186,187,187,187,187,187,187,187,187,188,188,188,188,188,188,
594188,189,189,189,189,189,189,189,189,190,190,190,190,190,190,190,190,191,191,191,
595191,191,191,191,192,192,192,192,192,192,192,192,193,193,193,193,193,193,193,193,
596194,194,194,194,194,194,194,195,195,195,195,195,195,195,195,196,196,196,196,196,
597196,196,196,197,197,197,197,197,197,197,197,198,198,198,198,198,198,198,199,199,
598199,199,199,199,199,199,200,200,200,200,200,200,200,200,201,201,201,201,201,201,
599201,201,202,202,202,202,202,202,202,202,203,203,203,203,203,203,203,204,204,204,
600204,204,204,204,204,205,205,205,205,205,205,205,205,206,206,206,206,206,206,206,
601206,207,207,207,207,207,207,207,207,208,208,208,208,208,208,208,208,209,209,209,
602209,209,209,209,209,210,210,210,210,210,210,210,210,211,211,211,211,211,211,211,
603211,212,212,212,212,212,212,212,212,213,213,213,213,213,213,213,213,214,214,214,
604214,214,214,214,214,215,215,215,215,215,215,215,215,216,216,216,216,216,216,216,
605216,217,217,217,217,217,217,217,217,218,218,218,218,218,218,218,218,219,219,219,
606219,219,219,219,219,220,220,220,220,220,220,220,220,221,221,221,221,221,221,221,
607221,222,222,222,222,222,222,222,222,223,223,223,223,223,223,223,223,224,224,224,
608224,224,224,224,224,225,225,225,225,225,225,225,225,226,226,226,226,226,226,226,
609226,227,227,227,227,227,227,227,227,228,228,228,228,228,228,228,228,229,229,229,
610229,229,229,229,229,229,230,230,230,230,230,230,230,230,231,231,231,231,231,231,
611231,231,232,232,232,232,232,232,232,232,233,233,233,233,233,233,233,233,234,234,
612234,234,234,234,234,234,234,235,235,235,235,235,235,235,235,236,236,236,236,236,
613236,236,236,237,237,237,237,237,237,237,237,238,238,238,238,238,238,238,238,238,
614239,239,239,239,239,239,239,239,240,240,240,240,240,240,240,240,241,241,241,241,
615241,241,241,241,242,242,242,242,242,242,242,242,242,243,243,243,243,243,243,243,
616243,244,244,244,244,244,244,244,244,245,245,245,245,245,245,245,245,245,246,246,
617246,246,246,246,246,246,247,247,247,247,247,247,247,247,248,248,248,248,248,248,
618248,248,248,249,249,249,249,249,249,249,249,250,250,250,250,250,250,250,250,250,
619251,251,251,251,251,251,251,251,252,252,252,252,252,252,252,252,253,253,253,253,
620253,253,253,253,253,254,254,254,254,254,254,254,254,255,255,255,255,255,255,255,
621255,255,256,256,256,256,256,256,256,256,257,257,257,257,257,257,257,257,257,258,
622258,258,258,258,258,258,258,259,259,259,259,259,259,259,259,259,260,260,260,260,
623260,260,260,260,261,261,261,261,261,261,261,261,261,262,262,262,262,262,262,262,
624262,263,263,263,263,263,263,263,263,263,264,264,264,264,264,264,264,264,265,265,
625265,265,265,265,265,265,265,266,266,266,266,266,266,266,266,267,267,267,267,267,
626267,267,267,267,268,268,268,268,268,268,268,268,268,269,269,269,269,269,269,269,
627269,270,270,270,270,270,270,270,270,270,271,271,271,271,271,271,271,271,271,272,
628272,272,272,272,272,272,272,273,273,273,273,273,273,273,273,273,274,274,274,274,
629274,274,274,274,275,275,275,275,275,275,275,275,275,276,276,276,276,276,276,276,
630276,276,277,277,277,277,277,277,277,277,277,278,278,278,278,278,278,278,278,279,
631279,279,279,279,279,279,279,279,280,280,280,280,280,280,280,280,280,281,281,281,
632281,281,281,281,281,282,282,282,282,282,282,282,282,282,283,283,283,283,283,283,
633283,283,283,284,284,284,284,284,284,284,284,284,285,285,285,285,285,285,285,285,
634286,286,286,286,286,286,286,286,286,287,287,287,287,287,287,287,287,287,288,288,
635288,288,288,288,288,288,288,289,289,289,289,289,289,289,289,289,290,290,290,290,
636290,290,290,290,291,291,291,291,291,291,291,291,291,292,292,292,292,292,292,292,
637292,292,293,293,293,293,293,293,293,293,293,294,294,294,294,294,294,294,294,294,
638295,295,295,295,295,295,295,295,295,296,296,296,296,296,296,296,296,296,297,297,
639297,297,297,297,297,297,297,298,298,298,298,298,298,298,298,299,299,299,299,299,
640299,299,299,299,300,300,300,300,300,300,300,300,300,301,301,301,301,301,301,301,
641301,301,302,302,302,302,302,302,302,302,302,303,303,303,303,303,303,303,303,303,
642304,304,304,304,304,304,304,304,304,305,305,305,305,305,305,305,305,305,306,306,
643306,306,306,306,306,306,306,307,307,307,307,307,307,307,307,307,308,308,308,308,
644308,308,308,308,308,309,309,309,309,309,309,309,309,309,310,310,310,310,310,310,
645310,310,310,311,311,311,311,311,311,311,311,311,312,312,312,312,312,312,312,312,
646312,313,313,313,313,313,313,313,313,313,314,314,314,314,314,314,314,314,314,315,
647315,315,315,315,315,315,315,315,316,316,316,316,316,316,316,316,316,317,317,317,
648317,317,317,317,317,317,318,318,318,318,318,318,318,318,318,318,319,319,319,319,
649319,319,319,319,319,320,320,320,320,320,320,320,320,320,321,321,321,321,321,321,
650321,321,321,322,322,322,322,322,322,322,322,322,323,323,323,323,323,323,323,323,
651323,324,324,324,324,324,324,324,324,324,325,325,325,325,325,325,325,325,325,325,
652326,326,326,326,326,326,326,326,326,327,327,327,327,327,327,327,327,327,328,328,
653328,328,328,328,328,328,328,329,329,329,329,329,329,329,329,329,330,330,330,330,
654330,330,330,330,330,330,331,331,331,331,331,331,331,331,331,332,332,332,332,332,
655332,332,332,332,333,333,333,333,333,333,333,333,333,334,334,334,334,334,334,334,
656334,334,335,335,335,335,335,335,335,335,335,335,336,336,336,336,336,336,336,336,
657336,337,337,337,337,337,337,337,337,337,338,338,338,338,338,338,338,338,338,338,
658339,339,339,339,339,339,339,339,339,340,340,340,340,340,340,340,340,340,341,341,
659341,341,341,341,341,341,341,341,342,342,342,342,342,342,342,342,342,343,343,343,
660343,343,343,343,343,343,344,344,344,344,344,344,344,344,344,344,345,345,345,345,
661345,345,345,345,345,346,346,346,346,346,346,346,346,346,347,347,347,347,347,347,
662347,347,347,347,348,348,348,348,348,348,348,348,348,349,349,349,349,349,349,349,
663349,349,350,350,350,350,350,350,350,350,350,350,351,351,351,351,351,351,351,351,
664351,352,352,352,352,352,352,352,352,352,352,353,353,353,353,353,353,353,353,353,
665354,354,354,354,354,354,354,354,354,355,355,355,355,355,355,355,355,355,355,356,
666356,356,356,356,356,356,356,356,357,357,357,357,357,357,357,357,357,357,358,358,
667358,358,358,358,358,358,358,359,359,359,359,359,359,359,359,359,359,360,360,360,
668360,360,360,360,360,360,361,361,361,361,361,361,361,361,361,361,362,362,362,362,
669362,362,362,362,362,363,363,363,363,363,363,363,363,363,363,364,364,364,364,364,
670364,364,364,364,365,365,365,365,365,365,365,365,365,365,366,366,366,366,366,366,
671366,366,366,367,367,367,367,367,367,367,367,367,367,368,368,368,368,368,368,368,
672368,368,369,369,369,369,369,369,369,369,369,369,370,370,370,370,370,370,370,370,
673370,370,371,371,371,371,371,371,371,371,371,372,372,372,372,372,372,372,372,372,
674372,373,373,373,373,373,373,373,373,373,374,374,374,374,374,374,374,374,374,374,
675375,375,375,375,375,375,375,375,375,375,376,376,376,376,376,376,376,376,376,377,
676377,377,377,377,377,377,377,377,377,378,378,378,378,378,378,378,378,378,379,379,
677379,379,379,379,379,379,379,379,380,380,380,380,380,380,380,380,380,380,381,381,
678381,381,381,381,381,381,381,382,382,382,382,382,382,382,382,382,382,383,383,383,
679383,383,383,383,383,383,383,384,384,384,384,384,384,384,384,384,385,385,385,385,
680385,385,385,385,385,385,386,386,386,386,386,386,386,386,386,386,387,387,387,387,
681387,387,387,387,387,387,388,388,388,388,388,388,388,388,388,389,389,389,389,389,
682389,389,389,389,389,390,390,390,390,390,390,390,390,390,390,391,391,391,391,391,
683391,391,391,391,391,392,392,392,392,392,392,392,392,392,393,393,393,393,393,393,
684393,393,393,393,394,394,394,394,394,394,394,394,394,394,395,395,395,395,395,395,
685395,395,395,395,396,396,396,396,396,396,396,396,396,397,397,397,397,397,397,397,
686397,397,397,398,398,398,398,398,398,398,398,398,398,399,399,399,399,399,399,399,
687399,399,399,400,400,400,400,400,400,400,400,400,400,401,401,401,401,401,401,401,
688401,401,402,402,402,402,402,402,402,402,402,402,403,403,403,403,403,403,403,403,
689403,403,404,404,404,404,404,404,404,404,404,404,405,405,405,405,405,405,405,405,
690405,405,406,406,406,406,406,406,406,406,406,406,407,407,407,407,407,407,407,407,
691407,407,408,408,408,408,408,408,408,408,408,408,409,409,409,409,409,409,409,409,
692409,410,410,410,410,410,410,410,410,410,410,411,411,411,411,411,411,411,411,411,
693411,412,412,412,412,412,412,412,412,412,412,413,413,413,413,413,413,413,413,413,
694413,414,414,414,414,414,414,414,414,414,414,415,415,415,415,415,415,415,415,415,
695415,416,416,416,416,416,416,416,416,416,416,417,417,417,417,417,417,417,417,417,
696417,418,418,418,418,418,418,418,418,418,418,419,419,419,419,419,419,419,419,419,
697419,420,420,420,420,420,420,420,420,420,420,421,421,421,421,421,421,421,421,421,
698421,422,422,422,422,422,422,422,422,422,422,423,423,423,423,423,423,423,423,423,
699423,424,424,424,424,424,424,424,424,424,424,425,425,425,425,425,425,425,425,425,
700425,426,426,426,426,426,426,426,426,426,426,427,427,427,427,427,427,427,427,427,
701427,428,428,428,428,428,428,428,428,428,428,429,429,429,429,429,429,429,429,429,
702429,430,430,430,430,430,430,430,430,430,430,431,431,431,431,431,431,431,431,431,
703431,432,432,432,432,432,432,432,432,432,432,433,433,433,433,433,433,433,433,433,
704433,434,434,434,434,434,434,434,434,434,434,435,435,435,435,435,435,435,435,435,
705435,435,436,436,436,436,436,436,436,436,436,436,437,437,437,437,437,437,437,437,
706437,437,438,438,438,438,438,438,438,438,438,438,439,439,439,439,439,439,439,439,
707439,439,440,440,440,440,440,440,440,440,440,440,441,441,441,441,441,441,441,441,
708441,441,442,442,442,442,442,442,442,442,442,442,443,443,443,443,443,443,443,443,
709443,443,443,444,444,444,444,444,444,444,444,444,444,445,445,445,445,445,445,445,
710445,445,445,446,446,446,446,446,446,446,446,446,446,447,447,447,447,447,447,447,
711447,447,447,448,448,448,448,448,448,448,448,448,448,448,449,449,449,449,449,449,
712449,449,449,449,450,450,450,450,450,450,450,450,450,450,451,451,451,451,451,451,
713451,451,451,451,452,452,452,452,452,452,452,452,452,452,453,453,453,453,453,453,
714453,453,453,453,453,454,454,454,454,454,454,454,454,454,454,455,455,455,455,455,
715455,455,455,455,455,456,456,456,456,456,456,456,456,456,456,457,457,457,457,457,
716457,457,457,457,457,457,458,458,458,458,458,458,458,458,458,458,459,459,459,459,
717459,459,459,459,459,459,460,460,460,460,460,460,460,460,460,460,460,461,461,461,
718461,461,461,461,461,461,461,462,462,462,462,462,462,462,462,462,462,463,463,463,
719463,463,463,463,463,463,463,463,464,464,464,464,464,464,464,464,464,464,465,465,
720465,465,465,465,465,465,465,465,466,466,466,466,466,466,466,466,466,466,466,467,
721467,467,467,467,467,467,467,467,467,468,468,468,468,468,468,468,468,468,468,469,
722469,469,469,469,469,469,469,469,469,469,470,470,470,470,470,470,470,470,470,470,
723471,471,471,471,471,471,471,471,471,471,472,472,472,472,472,472,472,472,472,472,
724472,473,473,473,473,473,473,473,473,473,473,474,474,474,474,474,474,474,474,474,
725474,475,475,475,475,475,475,475,475,475,475,475,476,476,476,476,476,476,476,476,
726476,476,477,477,477,477,477,477,477,477,477,477,477,478,478,478,478,478,478,478,
727478,478,478,479,479,479,479,479,479,479,479,479,479,479,480,480,480,480,480,480,
728480,480,480,480,481,481,481,481,481,481,481,481,481,481,482,482,482,482,482,482,
729482,482,482,482,482,483,483,483,483,483,483,483,483,483,483,484,484,484,484,484,
730484,484,484,484,484,484,485,485,485,485,485,485,485,485,485,485,486,486,486,486,
731486,486,486,486,486,486,486,487,487,487,487,487,487,487,487,487,487,488,488,488,
732488,488,488,488,488,488,488,488,489,489,489,489,489,489,489,489,489,489,490,490,
733490,490,490,490,490,490,490,490,490,491,491,491,491,491,491,491,491,491,491,492,
734492,492,492,492,492,492,492,492,492,492,493,493,493,493,493,493,493,493,493,493,
735494,494,494,494,494,494,494,494,494,494,494,495,495,495,495,495,495,495,495,495,
736495,496,496,496,496,496,496,496,496,496,496,496,497,497,497,497,497,497,497,497,
737497,497,497,498,498,498,498,498,498,498,498,498,498,499,499,499,499,499,499,499,
738499,499,499,499,500,500,500,500,500,500,500,500,500,500,501,501,501,501,501,501,
739501,501,501,501,501,502,502,502,502,502,502,502,502,502,502,503,503,503,503,503,
740503,503,503,503,503,503,504,504,504,504,504,504,504,504,504,504,504,505,505,505,
741505,505,505,505,505,505,505,506,506,506,506,506,506,506,506,506,506,506,507,507,
742507,507,507,507,507,507,507,507,507,508,508,508,508,508,508,508,508,508,508,509,
743509,509,509,509,509,509,509,509,509,509,510,510,510,510,510,510,510,510,510,510,
744510,511,511,511,511,511,511,511,511,511,511,512,512,512,512,512 };
745
746static const int order[32] =
747{ 0, 1, 16, 17, 8, 9, 24, 25, 4, 5, 20, 21, 12, 13, 28, 29,
748 2, 3, 18, 19,10,11, 26, 27, 6, 7, 22, 23, 14, 15, 30, 31 };
749
750static const int bitr_index[2][15] =
751{ {0, 8,16,24,32,40,48,56, 64, 80, 96,112,128,144,160},
752 {0,32,40,48,56,64,80,96,112,128,160,192,224,256,320} };
753
754static const int num_bands[3][15] =
755{ {0,10,10,10,10,12,14,16, 20, 22, 24, 26, 28, 30, 32},
756 {0,10,10,10,10,10,12,14, 18, 24, 26, 28, 30, 32, 32},
757 {0,10,12,14,18,24,26,28, 30, 32, 32, 32, 32, 32, 32} };
758
759static const int cx_const[9] =
760{ 16135, 10531, 5604, 15396, -2845,-12551, 14189, 8192, 16384 };
761
762static const int ca_const[8] =
763{-16859,-15458,-10269, -5961, -3099, -1342, -465, -121 };
764
765static const int cs_const[8] =
766{ 28098, 28893, 31117, 32221, 32621, 32740, 32765, 32768 };
767
768static const short enwindow_const[15*27+24] =
769{ 0, 65, 593, 1766, 22228, 2115, 611, 62,
770 8, 119, 1419, 10564,-11659,-1635,-154, -9,
771 -8, -119,-1419,-10564, 11659, 1635, 154, 9, 464, 100, 91,
772 0, 69, 604, 1635, 23148, 2363, 643, 62,
773 7, 107, 1368, 10449,-12733,-1818,-180,-11,
774 -7, -107,-1368,-10449, 12733, 1818, 180, 11, 420, 200, 164,
775 0, 72, 608, 1465, 23979, 2600, 671, 63,
776 7, 94, 1305, 10265,-13818,-2004,-207,-12,
777 -7, -94,-1305,-10265, 13818, 2004, 207, 12, 380, 297, 220,
778 0, 76, 606, 1256, 24718, 2825, 693, 63,
779 6, 81, 1232, 10016,-14908,-2192,-236,-14,
780 -6, -81,-1232,-10016, 14908, 2192, 236, 14, 342, 392, 262,
781 0, 78, 597, 1007, 25359, 3033, 712, 63,
782 6, 68, 1150, 9706,-15995,-2380,-267,-15,
783 -6, -68,-1150, -9706, 15995, 2380, 267, 15, 307, 483, 289,
784 0, 80, 580, 719, 25901, 3224, 726, 62,
785 6, 54, 1060, 9343,-17072,-2565,-299,-17,
786 -6, -54,-1060, -9343, 17072, 2565, 299, 17, 274, 569, 304,
787 -1, 82, 555, 391, 26339, 3395, 735, 61,
788 5, 40, 963, 8930,-18131,-2747,-332,-19,
789 -5, -40, -963, -8930, 18131, 2747, 332, 19, 242, 650, 307,
790 -1, 83, 523, 26, 26672, 3545, 740, 60,
791 5, 27, 861, 8474,-19164,-2923,-366,-21,
792 -5, -27, -861, -8474, 19164, 2923, 366, 21, 212, 724, 300,
793 -1, 83, 482, -376, 26900, 3672, 739, 58,
794 4, 14, 756, 7981,-20163,-3092,-401,-24,
795 -4, -14, -756, -7981, 20163, 3092, 401, 24, 183, 792, 283,
796 -1, 82, 433, -812, 27022, 3776, 735, 56,
797 4, 1, 648, 7456,-21122,-3250,-435,-26,
798 -4, -1, -648, -7456, 21122, 3250, 435, 26, 155, 851, 258,
799 -1, 81, 376, -1281, 27038, 3855, 726, 54,
800 3, -11, 539, 6907,-22032,-3397,-470,-28,
801 -3, 11, -539, -6907, 22032, 3397, 470, 28, 128, 903, 226,
802 -1, 78, 312, -1778, 26951, 3910, 713, 52,
803 3, -22, 430, 6338,-22887,-3530,-503,-31,
804 -3, 22, -430, -6338, 22887, 3530, 503, 31, 102, 946, 188,
805 -2, 75, 239, -2302, 26761, 3941, 696, 49,
806 3, -33, 322, 5757,-23678,-3648,-537,-34,
807 -3, 33, -322, -5757, 23678, 3648, 537, 34, 76, 980, 145,
808 -2, 70, 160, -2848, 26472, 3948, 676, 47,
809 3, -42, 217, 5167,-24399,-3749,-568,-36,
810 -3, 42, -217, -5167, 24399, 3749, 568, 36, 50, 1004, 99,
811 -2, 65, 74, -3412, 26087, 3931, 653, 44,
812 2, -51, 115, 4577,-25045,-3830,-599,-39,
813 -2, 51, -115, -4577, 25045, 3830, 599, 39, 25, 1019, 50,
814
815 25610,3891,627,42,-3990,-18,58,-2,
816 21226,-21226,10604,-10604,1860,-1860,1458,-1458,576,-576,130,-130,60,-60,8,-8
453}; 817};
454 818
455static const uint8 int2idx_const[5000] = { 819static const int win_const[18][4] = {
456 0, 0, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 4, 4, 5, 5, 820 { -3072, -134, -146, 3352 },
457 5, 5, 5, 5, 5, 5, 5, 5, 6, 6, 6, 6, 6, 6, 6, 6, 6, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 8, 8, 8, 8, 821 { -2747, -362, -471, 3579 },
458 8, 8, 8, 8, 8, 8, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 11, 11, 11, 822 { -2387, -529, -831, 3747 },
459 11, 11, 11, 11, 11, 11, 11, 11, 11, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 823 { -2004, -632,-1214, 3850 },
460 13, 13, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 16, 16, 16, 16, 824 { -1609, -666,-1609, 3884 },
461 16, 16, 16, 16, 16, 16, 16, 16, 16, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 18, 18, 18, 18, 18, 18, 18, 18, 18, 825 { -1214, -632,-2004, 3850 },
462 18, 18, 18, 18, 18, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 826 { -831, -529,-2387, 3747 },
463 20, 20, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 23, 827 { -471, -362,-2747, 3579 },
464 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 25, 25, 828 { -146, -134,-3072, 3352 },
465 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 27, 27, 27, 829 { 134,-3072,-3352, -146 },
466 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 29, 29, 830 { 362,-2747,-3579, -471 },
467 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 31, 831 { 529,-2387,-3747, -831 },
468 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 832 { 632,-2004,-3850,-1214 },
469 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 833 { 666,-1609,-3884,-1609 },
470 34, 34, 34, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 834 { 632,-1214,-3850,-2004 },
471 36, 36, 36, 36, 36, 36, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 38, 38, 38, 38, 38, 38, 38, 38, 835 { 529, -831,-3747,-2387 },
472 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 40, 40, 40, 40, 836 { 362, -471,-3579,-2747 },
473 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 837 { 134, -146,-3352,-3072 } };
474 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43,
475 43, 43, 43, 43, 43, 43, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 45, 45, 45, 45, 45, 45, 45, 45,
476 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 47, 47,
477 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
478 48, 48, 48, 48, 48, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 50, 50, 50, 50, 50, 50, 50,
479 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51,
480 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53,
481 53, 53, 53, 53, 53, 53, 53, 53, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 55, 55, 55, 55,
482 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56,
483 56, 56, 56, 56, 56, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 58, 58, 58, 58, 58, 58, 58,
484 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59,
485 59, 59, 59, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 61, 61, 61, 61, 61, 61, 61, 61,
486 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62,
487 62, 62, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 64, 64, 64, 64, 64, 64, 64, 64, 64,
488 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65,
489 65, 65, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 67, 67, 67, 67, 67, 67, 67, 67,
490 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68,
491 68, 68, 68, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 70, 70, 70, 70, 70, 70, 70,
492 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71,
493 71, 71, 71, 71, 71, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 73, 73, 73, 73, 73,
494 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74,
495 74, 74, 74, 74, 74, 74, 74, 74, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 76, 76,
496 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77,
497 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78,
498 78, 78, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 80, 80, 80, 80, 80, 80, 80,
499 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81,
500 81, 81, 81, 81, 81, 81, 81, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 83,
501 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84,
502 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85,
503 85, 85, 85, 85, 85, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 87, 87, 87, 87,
504 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88,
505 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89,
506 89, 89, 89, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 91, 91, 91, 91, 91,
507 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92,
508 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93,
509 93, 93, 93, 93, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 95, 95, 95, 95,
510 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96,
511 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97,
512 97, 97, 97, 97, 97, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 99, 99,
513 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99,100,100,100,100,100,100,100,100,100,100,
514100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,101,101,101,101,101,101,101,101,101,101,101,101,101,101,101,101,101,
515101,101,101,101,101,101,101,101,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,
516102,103,103,103,103,103,103,103,103,103,103,103,103,103,103,103,103,103,103,103,103,103,103,103,103,103,104,104,104,104,104,104,
517104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,105,105,105,105,105,105,105,105,105,105,105,105,105,
518105,105,105,105,105,105,105,105,105,105,105,105,106,106,106,106,106,106,106,106,106,106,106,106,106,106,106,106,106,106,106,106,
519106,106,106,106,106,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,108,
520108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,109,109,109,109,109,109,109,109,
521109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,110,110,110,110,110,110,110,110,110,110,110,110,110,110,
522110,110,110,110,110,110,110,110,110,110,110,111,111,111,111,111,111,111,111,111,111,111,111,111,111,111,111,111,111,111,111,111,
523111,111,111,111,111,112,112,112,112,112,112,112,112,112,112,112,112,112,112,112,112,112,112,112,112,112,112,112,112,112,112,113,
524113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,114,114,114,114,114,114,114,114,
525114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,115,115,115,115,115,115,115,115,115,115,115,115,115,115,
526115,115,115,115,115,115,115,115,115,115,115,115,116,116,116,116,116,116,116,116,116,116,116,116,116,116,116,116,116,116,116,116,
527116,116,116,116,116,116,117,117,117,117,117,117,117,117,117,117,117,117,117,117,117,117,117,117,117,117,117,117,117,117,117,117,
528118,118,118,118,118,118,118,118,118,118,118,118,118,118,118,118,118,118,118,118,118,118,118,118,118,118,119,119,119,119,119,119,
529119,119,119,119,119,119,119,119,119,119,119,119,119,119,119,119,119,119,119,119,119,120,120,120,120,120,120,120,120,120,120,120,
530120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,121,121,121,121,121,121,121,121,121,121,121,121,121,121,121,121,121,
531121,121,121,121,121,121,121,121,121,122,122,122,122,122,122,122,122,122,122,122,122,122,122,122,122,122,122,122,122,122,122,122,
532122,122,122,122,123,123,123,123,123,123,123,123,123,123,123,123,123,123,123,123,123,123,123,123,123,123,123,123,123,123,124,124,
533124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,125,125,125,125,125,125,125,
534125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,126,126,126,126,126,126,126,126,126,126,126,126,
535126,126,126,126,126,126,126,126,126,126,126,126,126,126,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,
536127,127,127,127,127,127,127,127,127,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,
537128,128,128,128,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,130,
538130,130,130,130,130,130,130,130,130,130,130,130,130,130,130,130,130,130,130,130,130,130,130,130,130,130,131,131,131,131,131,131,
539131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,132,132,132,132,132,132,132,132,132,132,132,
540132,132,132,132,132,132,132,132,132,132,132,132,132,132,132,132,133,133,133,133,133,133,133,133,133,133,133,133,133,133,133,133,
541133,133,133,133,133,133,133,133,133,133,133,133,134,134,134,134,134,134,134,134,134,134,134,134,134,134,134,134,134,134,134,134,
542134,134,134,134,134,134,134,135,135,135,135,135,135,135,135,135,135,135,135,135,135,135,135,135,135,135,135,135,135,135,135,135,
543135,135,136,136,136,136,136,136,136,136,136,136,136,136,136,136,136,136,136,136,136,136,136,136,136,136,136,136,136,136,137,137,
544137,137,137,137,137,137,137,137,137,137,137,137,137,137,137,137,137,137,137,137,137,137,137,137,137,138,138,138,138,138,138,138,
545138,138,138,138,138,138,138,138,138,138,138,138,138,138,138,138,138,138,138,138,138,139,139,139,139,139,139,139,139,139,139,139,
546139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,140,140,140,140,140,140,140,140,140,140,140,140,140,140,140,140,
547140,140,140,140,140,140,140,140,140,140,140,140,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,
548141,141,141,141,141,141,141,141,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,
549142,142,142,142,143,143,143,143,143,143,143,143,143,143,143,143,143,143,143,143,143,143,143,143,143,143,143,143,143,143,143,144,
550144,144,144,144,144,144,144,144,144,144,144,144,144,144,144,144,144,144,144,144,144,144,144,144,144,144,144,145,145,145,145,145,
551145,145,145,145,145,145,145,145,145,145,145,145,145,145,145,145,145,145,145,145,145,145,145,146,146,146,146,146,146,146,146,146,
552146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,147,147,147,147,147,147,147,147,147,147,147,147,
553147,147,147,147,147,147,147,147,147,147,147,147,147,147,147,147,148,148,148,148,148,148,148,148,148,148,148,148,148,148,148,148,
554148,148,148,148,148,148,148,148,148,148,148,148,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,
555149,149,149,149,149,149,149,149,150,150,150,150,150,150,150,150,150,150,150,150,150,150,150,150,150,150,150,150,150,150,150,150,
556150,150,150,150,150,151,151,151,151,151,151,151,151,151,151,151,151,151,151,151,151,151,151,151,151,151,151,151,151,151,151,151,
557151,152,152,152,152,152,152,152,152,152,152,152,152,152,152,152,152,152,152,152,152,152,152,152,152,152,152,152,152,153,153,153,
558153,153,153,153,153,153,153,153,153,153,153,153,153,153,153,153,153,153,153,153,153,153,153,153,153,153,154,154,154,154,154,154,
559154,154,154,154,154,154,154,154,154,154,154,154,154,154,154,154,154,154,154,154,154,154,154,155,155,155,155,155,155,155,155,155,
560155,155,155,155,155,155,155,155,155,155,155,155,155,155,155,155,155,155,155,156,156,156,156,156,156,156,156,156,156,156,156,156,
561156,156,156,156,156,156,156,156,156,156,156,156,156,156,156,156,157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,
562157,157,157,157,157,157,157,157,157,157,157,157,157,158,158,158,158,158,158,158,158,158,158,158,158,158,158,158,158,158,158,158,
563158,158,158,158,158,158,158,158,158,158,159,159,159,159,159,159,159,159,159,159,159,159,159,159,159,159,159,159,159,159,159,159,
564159,159,159,159,159,159,160,160,160,160,160,160,160,160,160,160,160,160,160,160,160,160,160,160,160,160,160,160,160,160,160,160,
565160,160,160,161,161,161,161,161,161,161,161,161,161,161,161,161,161,161,161,161,161,161,161,161,161,161,161,161,161,161,161,161,
566162,162,162,162,162,162,162,162,162,162,162,162,162,162,162,162,162,162,162,162,162,162,162,162,162,162,162,162,162,163,163,163,
567163,163,163,163,163,163,163,163,163,163,163,163,163,163,163,163,163,163,163,163,163,163,163,163,163,163,163,164,164,164,164,164,
568164,164,164,164,164,164,164,164,164,164,164,164,164,164,164,164,164,164,164,164,164,164,164,164,165,165,165,165,165,165,165,165,
569165,165,165,165,165,165,165,165,165,165,165,165,165,165,165,165,165,165,165,165,165,166,166,166,166,166,166,166,166,166,166,166,
570166,166,166,166,166,166,166,166,166,166,166,166,166,166,166,166,166,166,167,167,167,167,167,167,167,167,167,167,167,167,167,167,
571167,167,167,167,167,167,167,167,167,167,167,167,167,167,167,167,168,168,168,168,168,168,168,168,168,168,168,168,168,168,168,168,
572168,168,168,168,168,168,168,168,168,168,168,168,168,169,169,169,169,169,169,169,169,169,169,169,169,169,169,169,169,169,169,169,
573169,169,169,169,169,169,169,169,169,169,169,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,
574170,170,170,170,170,170,170,170,171,171,171,171,171,171,171,171,171,171,171,171,171,171,171,171,171,171,171,171,171,171,171,171,
575171,171,171,171,171,171,172,172,172,172,172,172,172,172,172,172,172,172,172,172,172,172,172,172,172,172,172,172,172,172,172,172,
576172,172,172,172,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
577173,174,174,174,174,174,174,174,174,174,174,174,174,174,174,174,174,174,174,174,174,174,174,174,174,174,174,174,174,174,174,175,
578175,175,175,175,175,175,175,175,175,175,175,175,175,175,175,175,175,175,175,175,175,175,175,175,175,175,175,175,175,176,176,176,
579176,176,176,176,176,176,176,176,176,176,176,176,176,176,176,176,176,176,176,176,176,176,176,176,176,176,176,177,177,177,177,177,
580177,177,177,177,177,177,177,177,177,177,177,177,177,177,177,177,177,177,177,177,177,177,177,177,177,178,178,178,178,178,178,178,
581178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,179,179,179,179,179,179,179,179,179,
582179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,180,180,180,180,180,180,180,180,180,180,180,
583180,180,180,180,180,180,180,180,180,180,180,180,180,180,180,180,180,180,180,181,181,181,181,181,181,181,181,181,181,181,181,181,
584181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,182,182,182,182,182,182,182,182,182,182,182,182,182,182,182,
585182,182,182,182,182,182,182,182,182,182,182,182,182,182,182,183,183,183,183,183,183,183,183,183,183,183,183,183,183,183,183,183,
586183,183,183,183,183,183,183,183,183,183,183,183,183,183,184,184,184,184,184,184,184,184,184,184,184,184,184,184,184,184,184,184,
587184,184,184,184,184,184,184,184,184,184,184,184,185,185,185,185,185,185,185,185,185,185,185,185,185,185,185,185,185,185,185,185,
588185,185,185,185,185,185,185,185,185,185,186,186,186,186,186,186,186,186,186,186,186,186,186,186,186,186,186,186,186,186,186,186,
589186,186,186,186,186,186,186,186,186,187,187,187,187,187,187,187,187,187,187,187,187,187,187,187,187,187,187,187,187,187,187,187,
590187,187,187,187,187,187,187,188,188,188,188,188,188,188,188,188,188,188,188,188,188,188,188,188,188,188,188,188,188,188,188,188,
591188,188,188,188,188,188,189,189,189,189,189,189,189,189,189,189,189,189,189,189,189,189,189,189,189,189,189,189,189,189,189,189,
592189,189,189,189,190,190,190,190,190,190,190,190,190,190,190,190,190,190,190,190,190,190,190,190,190,190,190,190,190,190,190,190,
593190,190,190,191,191,191,191,191,191,191,191,191,191,191,191,191,191,191,191,191,191,191,191,191,191,191,191,191,191,191,191,191,
594191,191,192,192,192,192,192,192,192,192,192,192,192,192,192,192,192,192,192,192,192,192,192,192,192,192,192,192,192,192,192,192,
595192,193,193,193,193,193,193,193,193,193,193,193,193,193,193,193,193,193,193,193,193,193,193,193,193,193,193,193,193,193,193,194,
596194,194,194,194,194,194,194,194,194,194,194,194,194,194,194,194,194,194,194,194,194,194,194,194,194,194,194,194,194,194,195,195,
597195,195,195,195,195,195,195,195,195,195,195,195,195,195,195,195,195,195,195,195,195,195,195,195,195,195,195,195,195,196,196,196,
598196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,197,197,197,197,
599197,197,197,197,197,197,197,197,197,197,197,197,197,197,197,197,197,197,197,197,197,197,197,197,197,197,197,198,198,198,198,198,
600198,198,198,198,198,198,198,198,198,198,198,198,198,198,198,198,198,198,198,198,198,198,198,198,198,198,199,199,199,199,199,199,
601199,199,199,199,199,199,199,199,199,199,199,199,199,199,199,199,199,199,199,199,199,199,199,199,199,200,200,200,200,200,200,200,
602200,200,200,200,200,200,200,200,200,200,200,200,200,200,200,200,200,200,200,200,200,200,200,200,200,201,201,201,201,201,201,201,
603201,201,201,201,201,201,201,201,201,201,201,201,201,201,201,201,201,201,201,201,201,201,201,201,202,202,202,202,202,202,202,202,
604202,202,202,202,202,202,202,202,202,202,202,202,202,202,202,202,202,202,202,202,202,202,202,203,203,203,203,203,203,203,203,203,
605203,203,203,203,203,203,203,203,203,203,203,203,203,203,203,203,203,203,203,203,203,203,203,204,204,204,204,204,204,204,204,204,
606204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,205,205,205,205,205,205,205,205,205,205,
607205,205,205,205,205,205,205,205,205,205,205,205,205,205,205,205,205,205,205,205,205,206,206,206,206,206,206,206,206,206,206,206,
608206,206,206,206,206,206,206,206,206,206,206,206,206,206,206,206,206,206,206,206,206,207,207,207,207,207,207,207,207,207,207,207,
609207,207,207,207,207,207,207,207,207,207,207,207,207,207,207,207,207,207,207,207,208,208,208,208,208,208,208,208,208,208,208,208,
610208,208,208,208,208,208,208,208,208,208,208,208,208,208,208,208,208,208,208,208,209,209,209,209,209,209,209,209,209,209,209,209,
611209,209,209,209,209,209,209,209,209,209,209,209,209,209,209,209,209,209,209,209,210,210,210,210,210,210,210,210,210,210,210,210,
612210,210,210,210,210,210,210,210 };
613
614static const uint16 int3idx[32768] = {
615 0, 0, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 4, 4, 5, 5,
616 5, 5, 5, 5, 5, 5, 5, 5, 6, 6, 6, 6, 6, 6, 6, 6, 6, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 8, 8, 8, 8,
617 8, 8, 8, 8, 8, 8, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 11, 11, 11,
618 11, 11, 11, 11, 11, 11, 11, 11, 11, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
619 13, 13, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 16, 16, 16, 16,
620 16, 16, 16, 16, 16, 16, 16, 16, 16, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 18, 18, 18, 18, 18, 18, 18, 18, 18,
621 18, 18, 18, 18, 18, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,
622 20, 20, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 23,
623 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 25, 25,
624 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 27, 27, 27,
625 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 29, 29,
626 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 31,
627 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
628 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34,
629 34, 34, 34, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36,
630 36, 36, 36, 36, 36, 36, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 38, 38, 38, 38, 38, 38, 38, 38,
631 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 40, 40, 40, 40,
632 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41,
633 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43,
634 43, 43, 43, 43, 43, 43, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 45, 45, 45, 45, 45, 45, 45, 45,
635 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 47, 47,
636 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
637 48, 48, 48, 48, 48, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 50, 50, 50, 50, 50, 50, 50,
638 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51,
639 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53,
640 53, 53, 53, 53, 53, 53, 53, 53, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 55, 55, 55, 55,
641 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56,
642 56, 56, 56, 56, 56, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 58, 58, 58, 58, 58, 58, 58,
643 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59,
644 59, 59, 59, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 61, 61, 61, 61, 61, 61, 61, 61,
645 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62,
646 62, 62, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 64, 64, 64, 64, 64, 64, 64, 64, 64,
647 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65,
648 65, 65, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 67, 67, 67, 67, 67, 67, 67, 67,
649 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68,
650 68, 68, 68, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 70, 70, 70, 70, 70, 70, 70,
651 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71,
652 71, 71, 71, 71, 71, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 73, 73, 73, 73, 73,
653 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74,
654 74, 74, 74, 74, 74, 74, 74, 74, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 76, 76,
655 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77,
656 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78, 78,
657 78, 78, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 80, 80, 80, 80, 80, 80, 80,
658 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81,
659 81, 81, 81, 81, 81, 81, 81, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 82, 83,
660 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84,
661 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85,
662 85, 85, 85, 85, 85, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 87, 87, 87, 87,
663 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 87, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88,
664 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89, 89,
665 89, 89, 89, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 91, 91, 91, 91, 91,
666 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92,
667 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93,
668 93, 93, 93, 93, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 95, 95, 95, 95,
669 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96,
670 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97,
671 97, 97, 97, 97, 97, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 99, 99,
672 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99,100,100,100,100,100,100,100,100,100,100,
673100,100,100,100,100,100,100,100,100,100,100,100,100,100,100,101,101,101,101,101,101,101,101,101,101,101,101,101,101,101,101,101,
674101,101,101,101,101,101,101,101,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,102,
675102,103,103,103,103,103,103,103,103,103,103,103,103,103,103,103,103,103,103,103,103,103,103,103,103,103,104,104,104,104,104,104,
676104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,105,105,105,105,105,105,105,105,105,105,105,105,105,
677105,105,105,105,105,105,105,105,105,105,105,105,106,106,106,106,106,106,106,106,106,106,106,106,106,106,106,106,106,106,106,106,
678106,106,106,106,106,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,107,108,
679108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,108,109,109,109,109,109,109,109,109,
680109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,110,110,110,110,110,110,110,110,110,110,110,110,110,110,
681110,110,110,110,110,110,110,110,110,110,110,111,111,111,111,111,111,111,111,111,111,111,111,111,111,111,111,111,111,111,111,111,
682111,111,111,111,111,112,112,112,112,112,112,112,112,112,112,112,112,112,112,112,112,112,112,112,112,112,112,112,112,112,112,113,
683113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,113,114,114,114,114,114,114,114,114,
684114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,114,115,115,115,115,115,115,115,115,115,115,115,115,115,115,
685115,115,115,115,115,115,115,115,115,115,115,115,116,116,116,116,116,116,116,116,116,116,116,116,116,116,116,116,116,116,116,116,
686116,116,116,116,116,116,117,117,117,117,117,117,117,117,117,117,117,117,117,117,117,117,117,117,117,117,117,117,117,117,117,117,
687118,118,118,118,118,118,118,118,118,118,118,118,118,118,118,118,118,118,118,118,118,118,118,118,118,118,119,119,119,119,119,119,
688119,119,119,119,119,119,119,119,119,119,119,119,119,119,119,119,119,119,119,119,119,120,120,120,120,120,120,120,120,120,120,120,
689120,120,120,120,120,120,120,120,120,120,120,120,120,120,120,121,121,121,121,121,121,121,121,121,121,121,121,121,121,121,121,121,
690121,121,121,121,121,121,121,121,121,122,122,122,122,122,122,122,122,122,122,122,122,122,122,122,122,122,122,122,122,122,122,122,
691122,122,122,122,123,123,123,123,123,123,123,123,123,123,123,123,123,123,123,123,123,123,123,123,123,123,123,123,123,123,124,124,
692124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,124,125,125,125,125,125,125,125,
693125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,125,126,126,126,126,126,126,126,126,126,126,126,126,
694126,126,126,126,126,126,126,126,126,126,126,126,126,126,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,127,
695127,127,127,127,127,127,127,127,127,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,
696128,128,128,128,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,129,130,
697130,130,130,130,130,130,130,130,130,130,130,130,130,130,130,130,130,130,130,130,130,130,130,130,130,130,131,131,131,131,131,131,
698131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,131,132,132,132,132,132,132,132,132,132,132,132,
699132,132,132,132,132,132,132,132,132,132,132,132,132,132,132,132,133,133,133,133,133,133,133,133,133,133,133,133,133,133,133,133,
700133,133,133,133,133,133,133,133,133,133,133,133,134,134,134,134,134,134,134,134,134,134,134,134,134,134,134,134,134,134,134,134,
701134,134,134,134,134,134,134,135,135,135,135,135,135,135,135,135,135,135,135,135,135,135,135,135,135,135,135,135,135,135,135,135,
702135,135,136,136,136,136,136,136,136,136,136,136,136,136,136,136,136,136,136,136,136,136,136,136,136,136,136,136,136,136,137,137,
703137,137,137,137,137,137,137,137,137,137,137,137,137,137,137,137,137,137,137,137,137,137,137,137,137,138,138,138,138,138,138,138,
704138,138,138,138,138,138,138,138,138,138,138,138,138,138,138,138,138,138,138,138,138,139,139,139,139,139,139,139,139,139,139,139,
705139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,139,140,140,140,140,140,140,140,140,140,140,140,140,140,140,140,140,
706140,140,140,140,140,140,140,140,140,140,140,140,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,141,
707141,141,141,141,141,141,141,141,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,142,
708142,142,142,142,143,143,143,143,143,143,143,143,143,143,143,143,143,143,143,143,143,143,143,143,143,143,143,143,143,143,143,144,
709144,144,144,144,144,144,144,144,144,144,144,144,144,144,144,144,144,144,144,144,144,144,144,144,144,144,144,145,145,145,145,145,
710145,145,145,145,145,145,145,145,145,145,145,145,145,145,145,145,145,145,145,145,145,145,145,146,146,146,146,146,146,146,146,146,
711146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,146,147,147,147,147,147,147,147,147,147,147,147,147,
712147,147,147,147,147,147,147,147,147,147,147,147,147,147,147,147,148,148,148,148,148,148,148,148,148,148,148,148,148,148,148,148,
713148,148,148,148,148,148,148,148,148,148,148,148,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,149,
714149,149,149,149,149,149,149,149,150,150,150,150,150,150,150,150,150,150,150,150,150,150,150,150,150,150,150,150,150,150,150,150,
715150,150,150,150,150,151,151,151,151,151,151,151,151,151,151,151,151,151,151,151,151,151,151,151,151,151,151,151,151,151,151,151,
716151,152,152,152,152,152,152,152,152,152,152,152,152,152,152,152,152,152,152,152,152,152,152,152,152,152,152,152,152,153,153,153,
717153,153,153,153,153,153,153,153,153,153,153,153,153,153,153,153,153,153,153,153,153,153,153,153,153,153,154,154,154,154,154,154,
718154,154,154,154,154,154,154,154,154,154,154,154,154,154,154,154,154,154,154,154,154,154,154,155,155,155,155,155,155,155,155,155,
719155,155,155,155,155,155,155,155,155,155,155,155,155,155,155,155,155,155,155,156,156,156,156,156,156,156,156,156,156,156,156,156,
720156,156,156,156,156,156,156,156,156,156,156,156,156,156,156,156,157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,157,
721157,157,157,157,157,157,157,157,157,157,157,157,157,158,158,158,158,158,158,158,158,158,158,158,158,158,158,158,158,158,158,158,
722158,158,158,158,158,158,158,158,158,158,159,159,159,159,159,159,159,159,159,159,159,159,159,159,159,159,159,159,159,159,159,159,
723159,159,159,159,159,159,160,160,160,160,160,160,160,160,160,160,160,160,160,160,160,160,160,160,160,160,160,160,160,160,160,160,
724160,160,160,161,161,161,161,161,161,161,161,161,161,161,161,161,161,161,161,161,161,161,161,161,161,161,161,161,161,161,161,161,
725162,162,162,162,162,162,162,162,162,162,162,162,162,162,162,162,162,162,162,162,162,162,162,162,162,162,162,162,162,163,163,163,
726163,163,163,163,163,163,163,163,163,163,163,163,163,163,163,163,163,163,163,163,163,163,163,163,163,163,163,164,164,164,164,164,
727164,164,164,164,164,164,164,164,164,164,164,164,164,164,164,164,164,164,164,164,164,164,164,164,165,165,165,165,165,165,165,165,
728165,165,165,165,165,165,165,165,165,165,165,165,165,165,165,165,165,165,165,165,165,166,166,166,166,166,166,166,166,166,166,166,
729166,166,166,166,166,166,166,166,166,166,166,166,166,166,166,166,166,166,167,167,167,167,167,167,167,167,167,167,167,167,167,167,
730167,167,167,167,167,167,167,167,167,167,167,167,167,167,167,167,168,168,168,168,168,168,168,168,168,168,168,168,168,168,168,168,
731168,168,168,168,168,168,168,168,168,168,168,168,168,169,169,169,169,169,169,169,169,169,169,169,169,169,169,169,169,169,169,169,
732169,169,169,169,169,169,169,169,169,169,169,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,
733170,170,170,170,170,170,170,170,171,171,171,171,171,171,171,171,171,171,171,171,171,171,171,171,171,171,171,171,171,171,171,171,
734171,171,171,171,171,171,172,172,172,172,172,172,172,172,172,172,172,172,172,172,172,172,172,172,172,172,172,172,172,172,172,172,
735172,172,172,172,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,173,
736173,174,174,174,174,174,174,174,174,174,174,174,174,174,174,174,174,174,174,174,174,174,174,174,174,174,174,174,174,174,174,175,
737175,175,175,175,175,175,175,175,175,175,175,175,175,175,175,175,175,175,175,175,175,175,175,175,175,175,175,175,175,176,176,176,
738176,176,176,176,176,176,176,176,176,176,176,176,176,176,176,176,176,176,176,176,176,176,176,176,176,176,176,177,177,177,177,177,
739177,177,177,177,177,177,177,177,177,177,177,177,177,177,177,177,177,177,177,177,177,177,177,177,177,178,178,178,178,178,178,178,
740178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,178,179,179,179,179,179,179,179,179,179,
741179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,179,180,180,180,180,180,180,180,180,180,180,180,
742180,180,180,180,180,180,180,180,180,180,180,180,180,180,180,180,180,180,180,181,181,181,181,181,181,181,181,181,181,181,181,181,
743181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,181,182,182,182,182,182,182,182,182,182,182,182,182,182,182,182,
744182,182,182,182,182,182,182,182,182,182,182,182,182,182,182,183,183,183,183,183,183,183,183,183,183,183,183,183,183,183,183,183,
745183,183,183,183,183,183,183,183,183,183,183,183,183,183,184,184,184,184,184,184,184,184,184,184,184,184,184,184,184,184,184,184,
746184,184,184,184,184,184,184,184,184,184,184,184,185,185,185,185,185,185,185,185,185,185,185,185,185,185,185,185,185,185,185,185,
747185,185,185,185,185,185,185,185,185,185,186,186,186,186,186,186,186,186,186,186,186,186,186,186,186,186,186,186,186,186,186,186,
748186,186,186,186,186,186,186,186,186,187,187,187,187,187,187,187,187,187,187,187,187,187,187,187,187,187,187,187,187,187,187,187,
749187,187,187,187,187,187,187,188,188,188,188,188,188,188,188,188,188,188,188,188,188,188,188,188,188,188,188,188,188,188,188,188,
750188,188,188,188,188,188,189,189,189,189,189,189,189,189,189,189,189,189,189,189,189,189,189,189,189,189,189,189,189,189,189,189,
751189,189,189,189,190,190,190,190,190,190,190,190,190,190,190,190,190,190,190,190,190,190,190,190,190,190,190,190,190,190,190,190,
752190,190,190,191,191,191,191,191,191,191,191,191,191,191,191,191,191,191,191,191,191,191,191,191,191,191,191,191,191,191,191,191,
753191,191,192,192,192,192,192,192,192,192,192,192,192,192,192,192,192,192,192,192,192,192,192,192,192,192,192,192,192,192,192,192,
754192,193,193,193,193,193,193,193,193,193,193,193,193,193,193,193,193,193,193,193,193,193,193,193,193,193,193,193,193,193,193,194,
755194,194,194,194,194,194,194,194,194,194,194,194,194,194,194,194,194,194,194,194,194,194,194,194,194,194,194,194,194,194,195,195,
756195,195,195,195,195,195,195,195,195,195,195,195,195,195,195,195,195,195,195,195,195,195,195,195,195,195,195,195,195,196,196,196,
757196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,196,197,197,197,197,
758197,197,197,197,197,197,197,197,197,197,197,197,197,197,197,197,197,197,197,197,197,197,197,197,197,197,197,198,198,198,198,198,
759198,198,198,198,198,198,198,198,198,198,198,198,198,198,198,198,198,198,198,198,198,198,198,198,198,198,199,199,199,199,199,199,
760199,199,199,199,199,199,199,199,199,199,199,199,199,199,199,199,199,199,199,199,199,199,199,199,199,200,200,200,200,200,200,200,
761200,200,200,200,200,200,200,200,200,200,200,200,200,200,200,200,200,200,200,200,200,200,200,200,200,201,201,201,201,201,201,201,
762201,201,201,201,201,201,201,201,201,201,201,201,201,201,201,201,201,201,201,201,201,201,201,201,202,202,202,202,202,202,202,202,
763202,202,202,202,202,202,202,202,202,202,202,202,202,202,202,202,202,202,202,202,202,202,202,203,203,203,203,203,203,203,203,203,
764203,203,203,203,203,203,203,203,203,203,203,203,203,203,203,203,203,203,203,203,203,203,203,204,204,204,204,204,204,204,204,204,
765204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,204,205,205,205,205,205,205,205,205,205,205,
766205,205,205,205,205,205,205,205,205,205,205,205,205,205,205,205,205,205,205,205,205,206,206,206,206,206,206,206,206,206,206,206,
767206,206,206,206,206,206,206,206,206,206,206,206,206,206,206,206,206,206,206,206,206,207,207,207,207,207,207,207,207,207,207,207,
768207,207,207,207,207,207,207,207,207,207,207,207,207,207,207,207,207,207,207,207,208,208,208,208,208,208,208,208,208,208,208,208,
769208,208,208,208,208,208,208,208,208,208,208,208,208,208,208,208,208,208,208,208,209,209,209,209,209,209,209,209,209,209,209,209,
770209,209,209,209,209,209,209,209,209,209,209,209,209,209,209,209,209,209,209,209,210,210,210,210,210,210,210,210,210,210,210,210,
771210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,210,211,211,211,211,211,211,211,211,211,211,211,211,211,
772211,211,211,211,211,211,211,211,211,211,211,211,211,211,211,211,211,211,211,212,212,212,212,212,212,212,212,212,212,212,212,212,
773212,212,212,212,212,212,212,212,212,212,212,212,212,212,212,212,212,212,212,213,213,213,213,213,213,213,213,213,213,213,213,213,
774213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,213,214,214,214,214,214,214,214,214,214,214,214,214,214,
775214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,214,215,215,215,215,215,215,215,215,215,215,215,215,215,
776215,215,215,215,215,215,215,215,215,215,215,215,215,215,215,215,215,215,215,216,216,216,216,216,216,216,216,216,216,216,216,216,
777216,216,216,216,216,216,216,216,216,216,216,216,216,216,216,216,216,216,216,217,217,217,217,217,217,217,217,217,217,217,217,217,
778217,217,217,217,217,217,217,217,217,217,217,217,217,217,217,217,217,217,217,218,218,218,218,218,218,218,218,218,218,218,218,218,
779218,218,218,218,218,218,218,218,218,218,218,218,218,218,218,218,218,218,218,219,219,219,219,219,219,219,219,219,219,219,219,219,
780219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,219,220,220,220,220,220,220,220,220,220,220,220,220,220,
781220,220,220,220,220,220,220,220,220,220,220,220,220,220,220,220,220,220,220,221,221,221,221,221,221,221,221,221,221,221,221,221,
782221,221,221,221,221,221,221,221,221,221,221,221,221,221,221,221,221,221,221,222,222,222,222,222,222,222,222,222,222,222,222,222,
783222,222,222,222,222,222,222,222,222,222,222,222,222,222,222,222,222,222,222,222,223,223,223,223,223,223,223,223,223,223,223,223,
784223,223,223,223,223,223,223,223,223,223,223,223,223,223,223,223,223,223,223,223,224,224,224,224,224,224,224,224,224,224,224,224,
785224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,224,225,225,225,225,225,225,225,225,225,225,225,
786225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,225,226,226,226,226,226,226,226,226,226,226,226,
787226,226,226,226,226,226,226,226,226,226,226,226,226,226,226,226,226,226,226,226,226,227,227,227,227,227,227,227,227,227,227,227,
788227,227,227,227,227,227,227,227,227,227,227,227,227,227,227,227,227,227,227,227,227,227,228,228,228,228,228,228,228,228,228,228,
789228,228,228,228,228,228,228,228,228,228,228,228,228,228,228,228,228,228,228,228,228,228,228,229,229,229,229,229,229,229,229,229,
790229,229,229,229,229,229,229,229,229,229,229,229,229,229,229,229,229,229,229,229,229,229,229,230,230,230,230,230,230,230,230,230,
791230,230,230,230,230,230,230,230,230,230,230,230,230,230,230,230,230,230,230,230,230,230,230,230,231,231,231,231,231,231,231,231,
792231,231,231,231,231,231,231,231,231,231,231,231,231,231,231,231,231,231,231,231,231,231,231,231,231,232,232,232,232,232,232,232,
793232,232,232,232,232,232,232,232,232,232,232,232,232,232,232,232,232,232,232,232,232,232,232,232,232,233,233,233,233,233,233,233,
794233,233,233,233,233,233,233,233,233,233,233,233,233,233,233,233,233,233,233,233,233,233,233,233,233,233,234,234,234,234,234,234,
795234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,234,235,235,235,235,235,
796235,235,235,235,235,235,235,235,235,235,235,235,235,235,235,235,235,235,235,235,235,235,235,235,235,235,235,235,236,236,236,236,
797236,236,236,236,236,236,236,236,236,236,236,236,236,236,236,236,236,236,236,236,236,236,236,236,236,236,236,236,236,237,237,237,
798237,237,237,237,237,237,237,237,237,237,237,237,237,237,237,237,237,237,237,237,237,237,237,237,237,237,237,237,237,237,238,238,
799238,238,238,238,238,238,238,238,238,238,238,238,238,238,238,238,238,238,238,238,238,238,238,238,238,238,238,238,238,238,238,239,
800239,239,239,239,239,239,239,239,239,239,239,239,239,239,239,239,239,239,239,239,239,239,239,239,239,239,239,239,239,239,239,239,
801240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,240,
802240,241,241,241,241,241,241,241,241,241,241,241,241,241,241,241,241,241,241,241,241,241,241,241,241,241,241,241,241,241,241,241,
803241,241,242,242,242,242,242,242,242,242,242,242,242,242,242,242,242,242,242,242,242,242,242,242,242,242,242,242,242,242,242,242,
804242,242,242,242,243,243,243,243,243,243,243,243,243,243,243,243,243,243,243,243,243,243,243,243,243,243,243,243,243,243,243,243,
805243,243,243,243,243,244,244,244,244,244,244,244,244,244,244,244,244,244,244,244,244,244,244,244,244,244,244,244,244,244,244,244,
806244,244,244,244,244,244,245,245,245,245,245,245,245,245,245,245,245,245,245,245,245,245,245,245,245,245,245,245,245,245,245,245,
807245,245,245,245,245,245,245,245,246,246,246,246,246,246,246,246,246,246,246,246,246,246,246,246,246,246,246,246,246,246,246,246,
808246,246,246,246,246,246,246,246,246,247,247,247,247,247,247,247,247,247,247,247,247,247,247,247,247,247,247,247,247,247,247,247,
809247,247,247,247,247,247,247,247,247,247,247,248,248,248,248,248,248,248,248,248,248,248,248,248,248,248,248,248,248,248,248,248,
810248,248,248,248,248,248,248,248,248,248,248,248,249,249,249,249,249,249,249,249,249,249,249,249,249,249,249,249,249,249,249,249,
811249,249,249,249,249,249,249,249,249,249,249,249,249,249,250,250,250,250,250,250,250,250,250,250,250,250,250,250,250,250,250,250,
812250,250,250,250,250,250,250,250,250,250,250,250,250,250,250,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,
813251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,
814252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,253,253,253,253,253,253,253,253,253,253,253,253,253,
815253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,253,254,254,254,254,254,254,254,254,254,254,254,254,
816254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,254,255,255,255,255,255,255,255,255,255,255,
817255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,256,256,256,256,256,256,256,256,
818256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,256,257,257,257,257,257,257,
819257,257,257,257,257,257,257,257,257,257,257,257,257,257,257,257,257,257,257,257,257,257,257,257,257,257,257,257,258,258,258,258,
820258,258,258,258,258,258,258,258,258,258,258,258,258,258,258,258,258,258,258,258,258,258,258,258,258,258,258,258,258,258,259,259,
821259,259,259,259,259,259,259,259,259,259,259,259,259,259,259,259,259,259,259,259,259,259,259,259,259,259,259,259,259,259,259,259,
822260,260,260,260,260,260,260,260,260,260,260,260,260,260,260,260,260,260,260,260,260,260,260,260,260,260,260,260,260,260,260,260,
823260,260,261,261,261,261,261,261,261,261,261,261,261,261,261,261,261,261,261,261,261,261,261,261,261,261,261,261,261,261,261,261,
824261,261,261,261,262,262,262,262,262,262,262,262,262,262,262,262,262,262,262,262,262,262,262,262,262,262,262,262,262,262,262,262,
825262,262,262,262,262,262,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,263,
826263,263,263,263,263,263,263,263,264,264,264,264,264,264,264,264,264,264,264,264,264,264,264,264,264,264,264,264,264,264,264,264,
827264,264,264,264,264,264,264,264,264,264,265,265,265,265,265,265,265,265,265,265,265,265,265,265,265,265,265,265,265,265,265,265,
828265,265,265,265,265,265,265,265,265,265,265,265,265,266,266,266,266,266,266,266,266,266,266,266,266,266,266,266,266,266,266,266,
829266,266,266,266,266,266,266,266,266,266,266,266,266,266,266,267,267,267,267,267,267,267,267,267,267,267,267,267,267,267,267,267,
830267,267,267,267,267,267,267,267,267,267,267,267,267,267,267,267,267,268,268,268,268,268,268,268,268,268,268,268,268,268,268,268,
831268,268,268,268,268,268,268,268,268,268,268,268,268,268,268,268,268,268,268,268,269,269,269,269,269,269,269,269,269,269,269,269,
832269,269,269,269,269,269,269,269,269,269,269,269,269,269,269,269,269,269,269,269,269,269,270,270,270,270,270,270,270,270,270,270,
833270,270,270,270,270,270,270,270,270,270,270,270,270,270,270,270,270,270,270,270,270,270,270,270,270,271,271,271,271,271,271,271,
834271,271,271,271,271,271,271,271,271,271,271,271,271,271,271,271,271,271,271,271,271,271,271,271,271,271,271,272,272,272,272,272,
835272,272,272,272,272,272,272,272,272,272,272,272,272,272,272,272,272,272,272,272,272,272,272,272,272,272,272,272,272,272,273,273,
836273,273,273,273,273,273,273,273,273,273,273,273,273,273,273,273,273,273,273,273,273,273,273,273,273,273,273,273,273,273,273,273,
837274,274,274,274,274,274,274,274,274,274,274,274,274,274,274,274,274,274,274,274,274,274,274,274,274,274,274,274,274,274,274,274,
838274,274,274,275,275,275,275,275,275,275,275,275,275,275,275,275,275,275,275,275,275,275,275,275,275,275,275,275,275,275,275,275,
839275,275,275,275,275,275,276,276,276,276,276,276,276,276,276,276,276,276,276,276,276,276,276,276,276,276,276,276,276,276,276,276,
840276,276,276,276,276,276,276,276,277,277,277,277,277,277,277,277,277,277,277,277,277,277,277,277,277,277,277,277,277,277,277,277,
841277,277,277,277,277,277,277,277,277,277,277,278,278,278,278,278,278,278,278,278,278,278,278,278,278,278,278,278,278,278,278,278,
842278,278,278,278,278,278,278,278,278,278,278,278,278,278,279,279,279,279,279,279,279,279,279,279,279,279,279,279,279,279,279,279,
843279,279,279,279,279,279,279,279,279,279,279,279,279,279,279,279,279,280,280,280,280,280,280,280,280,280,280,280,280,280,280,280,
844280,280,280,280,280,280,280,280,280,280,280,280,280,280,280,280,280,280,280,280,281,281,281,281,281,281,281,281,281,281,281,281,
845281,281,281,281,281,281,281,281,281,281,281,281,281,281,281,281,281,281,281,281,281,281,281,282,282,282,282,282,282,282,282,282,
846282,282,282,282,282,282,282,282,282,282,282,282,282,282,282,282,282,282,282,282,282,282,282,282,282,282,283,283,283,283,283,283,
847283,283,283,283,283,283,283,283,283,283,283,283,283,283,283,283,283,283,283,283,283,283,283,283,283,283,283,283,283,284,284,284,
848284,284,284,284,284,284,284,284,284,284,284,284,284,284,284,284,284,284,284,284,284,284,284,284,284,284,284,284,284,284,284,284,
849285,285,285,285,285,285,285,285,285,285,285,285,285,285,285,285,285,285,285,285,285,285,285,285,285,285,285,285,285,285,285,285,
850285,285,285,286,286,286,286,286,286,286,286,286,286,286,286,286,286,286,286,286,286,286,286,286,286,286,286,286,286,286,286,286,
851286,286,286,286,286,286,287,287,287,287,287,287,287,287,287,287,287,287,287,287,287,287,287,287,287,287,287,287,287,287,287,287,
852287,287,287,287,287,287,287,287,287,288,288,288,288,288,288,288,288,288,288,288,288,288,288,288,288,288,288,288,288,288,288,288,
853288,288,288,288,288,288,288,288,288,288,288,288,289,289,289,289,289,289,289,289,289,289,289,289,289,289,289,289,289,289,289,289,
854289,289,289,289,289,289,289,289,289,289,289,289,289,289,289,289,290,290,290,290,290,290,290,290,290,290,290,290,290,290,290,290,
855290,290,290,290,290,290,290,290,290,290,290,290,290,290,290,290,290,290,290,291,291,291,291,291,291,291,291,291,291,291,291,291,
856291,291,291,291,291,291,291,291,291,291,291,291,291,291,291,291,291,291,291,291,291,291,292,292,292,292,292,292,292,292,292,292,
857292,292,292,292,292,292,292,292,292,292,292,292,292,292,292,292,292,292,292,292,292,292,292,292,292,292,293,293,293,293,293,293,
858293,293,293,293,293,293,293,293,293,293,293,293,293,293,293,293,293,293,293,293,293,293,293,293,293,293,293,293,293,294,294,294,
859294,294,294,294,294,294,294,294,294,294,294,294,294,294,294,294,294,294,294,294,294,294,294,294,294,294,294,294,294,294,294,294,
860295,295,295,295,295,295,295,295,295,295,295,295,295,295,295,295,295,295,295,295,295,295,295,295,295,295,295,295,295,295,295,295,
861295,295,295,295,296,296,296,296,296,296,296,296,296,296,296,296,296,296,296,296,296,296,296,296,296,296,296,296,296,296,296,296,
862296,296,296,296,296,296,296,297,297,297,297,297,297,297,297,297,297,297,297,297,297,297,297,297,297,297,297,297,297,297,297,297,
863297,297,297,297,297,297,297,297,297,297,297,298,298,298,298,298,298,298,298,298,298,298,298,298,298,298,298,298,298,298,298,298,
864298,298,298,298,298,298,298,298,298,298,298,298,298,298,298,299,299,299,299,299,299,299,299,299,299,299,299,299,299,299,299,299,
865299,299,299,299,299,299,299,299,299,299,299,299,299,299,299,299,299,299,300,300,300,300,300,300,300,300,300,300,300,300,300,300,
866300,300,300,300,300,300,300,300,300,300,300,300,300,300,300,300,300,300,300,300,300,300,301,301,301,301,301,301,301,301,301,301,
867301,301,301,301,301,301,301,301,301,301,301,301,301,301,301,301,301,301,301,301,301,301,301,301,301,301,302,302,302,302,302,302,
868302,302,302,302,302,302,302,302,302,302,302,302,302,302,302,302,302,302,302,302,302,302,302,302,302,302,302,302,302,302,303,303,
869303,303,303,303,303,303,303,303,303,303,303,303,303,303,303,303,303,303,303,303,303,303,303,303,303,303,303,303,303,303,303,303,
870303,304,304,304,304,304,304,304,304,304,304,304,304,304,304,304,304,304,304,304,304,304,304,304,304,304,304,304,304,304,304,304,
871304,304,304,304,304,305,305,305,305,305,305,305,305,305,305,305,305,305,305,305,305,305,305,305,305,305,305,305,305,305,305,305,
872305,305,305,305,305,305,305,305,305,306,306,306,306,306,306,306,306,306,306,306,306,306,306,306,306,306,306,306,306,306,306,306,
873306,306,306,306,306,306,306,306,306,306,306,306,306,307,307,307,307,307,307,307,307,307,307,307,307,307,307,307,307,307,307,307,
874307,307,307,307,307,307,307,307,307,307,307,307,307,307,307,307,307,308,308,308,308,308,308,308,308,308,308,308,308,308,308,308,
875308,308,308,308,308,308,308,308,308,308,308,308,308,308,308,308,308,308,308,308,308,309,309,309,309,309,309,309,309,309,309,309,
876309,309,309,309,309,309,309,309,309,309,309,309,309,309,309,309,309,309,309,309,309,309,309,309,309,310,310,310,310,310,310,310,
877310,310,310,310,310,310,310,310,310,310,310,310,310,310,310,310,310,310,310,310,310,310,310,310,310,310,310,310,310,311,311,311,
878311,311,311,311,311,311,311,311,311,311,311,311,311,311,311,311,311,311,311,311,311,311,311,311,311,311,311,311,311,311,311,311,
879311,312,312,312,312,312,312,312,312,312,312,312,312,312,312,312,312,312,312,312,312,312,312,312,312,312,312,312,312,312,312,312,
880312,312,312,312,312,312,313,313,313,313,313,313,313,313,313,313,313,313,313,313,313,313,313,313,313,313,313,313,313,313,313,313,
881313,313,313,313,313,313,313,313,313,313,314,314,314,314,314,314,314,314,314,314,314,314,314,314,314,314,314,314,314,314,314,314,
882314,314,314,314,314,314,314,314,314,314,314,314,314,314,315,315,315,315,315,315,315,315,315,315,315,315,315,315,315,315,315,315,
883315,315,315,315,315,315,315,315,315,315,315,315,315,315,315,315,315,315,316,316,316,316,316,316,316,316,316,316,316,316,316,316,
884316,316,316,316,316,316,316,316,316,316,316,316,316,316,316,316,316,316,316,316,316,316,316,317,317,317,317,317,317,317,317,317,
885317,317,317,317,317,317,317,317,317,317,317,317,317,317,317,317,317,317,317,317,317,317,317,317,317,317,317,318,318,318,318,318,
886318,318,318,318,318,318,318,318,318,318,318,318,318,318,318,318,318,318,318,318,318,318,318,318,318,318,318,318,318,318,318,319,
887319,319,319,319,319,319,319,319,319,319,319,319,319,319,319,319,319,319,319,319,319,319,319,319,319,319,319,319,319,319,319,319,
888319,319,319,319,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,320,
889320,320,320,320,320,320,320,320,321,321,321,321,321,321,321,321,321,321,321,321,321,321,321,321,321,321,321,321,321,321,321,321,
890321,321,321,321,321,321,321,321,321,321,321,321,321,322,322,322,322,322,322,322,322,322,322,322,322,322,322,322,322,322,322,322,
891322,322,322,322,322,322,322,322,322,322,322,322,322,322,322,322,322,323,323,323,323,323,323,323,323,323,323,323,323,323,323,323,
892323,323,323,323,323,323,323,323,323,323,323,323,323,323,323,323,323,323,323,323,323,323,324,324,324,324,324,324,324,324,324,324,
893324,324,324,324,324,324,324,324,324,324,324,324,324,324,324,324,324,324,324,324,324,324,324,324,324,324,324,325,325,325,325,325,
894325,325,325,325,325,325,325,325,325,325,325,325,325,325,325,325,325,325,325,325,325,325,325,325,325,325,325,325,325,325,325,326,
895326,326,326,326,326,326,326,326,326,326,326,326,326,326,326,326,326,326,326,326,326,326,326,326,326,326,326,326,326,326,326,326,
896326,326,326,326,327,327,327,327,327,327,327,327,327,327,327,327,327,327,327,327,327,327,327,327,327,327,327,327,327,327,327,327,
897327,327,327,327,327,327,327,327,327,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,328,
898328,328,328,328,328,328,328,328,328,328,328,328,328,328,329,329,329,329,329,329,329,329,329,329,329,329,329,329,329,329,329,329,
899329,329,329,329,329,329,329,329,329,329,329,329,329,329,329,329,329,329,330,330,330,330,330,330,330,330,330,330,330,330,330,330,
900330,330,330,330,330,330,330,330,330,330,330,330,330,330,330,330,330,330,330,330,330,330,330,331,331,331,331,331,331,331,331,331,
901331,331,331,331,331,331,331,331,331,331,331,331,331,331,331,331,331,331,331,331,331,331,331,331,331,331,331,331,332,332,332,332,
902332,332,332,332,332,332,332,332,332,332,332,332,332,332,332,332,332,332,332,332,332,332,332,332,332,332,332,332,332,332,332,332,
903332,333,333,333,333,333,333,333,333,333,333,333,333,333,333,333,333,333,333,333,333,333,333,333,333,333,333,333,333,333,333,333,
904333,333,333,333,333,333,334,334,334,334,334,334,334,334,334,334,334,334,334,334,334,334,334,334,334,334,334,334,334,334,334,334,
905334,334,334,334,334,334,334,334,334,334,334,335,335,335,335,335,335,335,335,335,335,335,335,335,335,335,335,335,335,335,335,335,
906335,335,335,335,335,335,335,335,335,335,335,335,335,335,335,335,336,336,336,336,336,336,336,336,336,336,336,336,336,336,336,336,
907336,336,336,336,336,336,336,336,336,336,336,336,336,336,336,336,336,336,336,336,336,337,337,337,337,337,337,337,337,337,337,337,
908337,337,337,337,337,337,337,337,337,337,337,337,337,337,337,337,337,337,337,337,337,337,337,337,337,337,338,338,338,338,338,338,
909338,338,338,338,338,338,338,338,338,338,338,338,338,338,338,338,338,338,338,338,338,338,338,338,338,338,338,338,338,338,338,338,
910339,339,339,339,339,339,339,339,339,339,339,339,339,339,339,339,339,339,339,339,339,339,339,339,339,339,339,339,339,339,339,339,
911339,339,339,339,339,340,340,340,340,340,340,340,340,340,340,340,340,340,340,340,340,340,340,340,340,340,340,340,340,340,340,340,
912340,340,340,340,340,340,340,340,340,340,341,341,341,341,341,341,341,341,341,341,341,341,341,341,341,341,341,341,341,341,341,341,
913341,341,341,341,341,341,341,341,341,341,341,341,341,341,341,342,342,342,342,342,342,342,342,342,342,342,342,342,342,342,342,342,
914342,342,342,342,342,342,342,342,342,342,342,342,342,342,342,342,342,342,342,342,343,343,343,343,343,343,343,343,343,343,343,343,
915343,343,343,343,343,343,343,343,343,343,343,343,343,343,343,343,343,343,343,343,343,343,343,343,343,343,344,344,344,344,344,344,
916344,344,344,344,344,344,344,344,344,344,344,344,344,344,344,344,344,344,344,344,344,344,344,344,344,344,344,344,344,344,344,345,
917345,345,345,345,345,345,345,345,345,345,345,345,345,345,345,345,345,345,345,345,345,345,345,345,345,345,345,345,345,345,345,345,
918345,345,345,345,345,346,346,346,346,346,346,346,346,346,346,346,346,346,346,346,346,346,346,346,346,346,346,346,346,346,346,346,
919346,346,346,346,346,346,346,346,346,346,347,347,347,347,347,347,347,347,347,347,347,347,347,347,347,347,347,347,347,347,347,347,
920347,347,347,347,347,347,347,347,347,347,347,347,347,347,347,347,348,348,348,348,348,348,348,348,348,348,348,348,348,348,348,348,
921348,348,348,348,348,348,348,348,348,348,348,348,348,348,348,348,348,348,348,348,348,349,349,349,349,349,349,349,349,349,349,349,
922349,349,349,349,349,349,349,349,349,349,349,349,349,349,349,349,349,349,349,349,349,349,349,349,349,349,349,350,350,350,350,350,
923350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,350,
924351,351,351,351,351,351,351,351,351,351,351,351,351,351,351,351,351,351,351,351,351,351,351,351,351,351,351,351,351,351,351,351,
925351,351,351,351,351,351,352,352,352,352,352,352,352,352,352,352,352,352,352,352,352,352,352,352,352,352,352,352,352,352,352,352,
926352,352,352,352,352,352,352,352,352,352,352,353,353,353,353,353,353,353,353,353,353,353,353,353,353,353,353,353,353,353,353,353,
927353,353,353,353,353,353,353,353,353,353,353,353,353,353,353,353,353,354,354,354,354,354,354,354,354,354,354,354,354,354,354,354,
928354,354,354,354,354,354,354,354,354,354,354,354,354,354,354,354,354,354,354,354,354,354,354,355,355,355,355,355,355,355,355,355,
929355,355,355,355,355,355,355,355,355,355,355,355,355,355,355,355,355,355,355,355,355,355,355,355,355,355,355,355,355,356,356,356,
930356,356,356,356,356,356,356,356,356,356,356,356,356,356,356,356,356,356,356,356,356,356,356,356,356,356,356,356,356,356,356,356,
931356,356,357,357,357,357,357,357,357,357,357,357,357,357,357,357,357,357,357,357,357,357,357,357,357,357,357,357,357,357,357,357,
932357,357,357,357,357,357,357,357,358,358,358,358,358,358,358,358,358,358,358,358,358,358,358,358,358,358,358,358,358,358,358,358,
933358,358,358,358,358,358,358,358,358,358,358,358,358,358,359,359,359,359,359,359,359,359,359,359,359,359,359,359,359,359,359,359,
934359,359,359,359,359,359,359,359,359,359,359,359,359,359,359,359,359,359,359,359,360,360,360,360,360,360,360,360,360,360,360,360,
935360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,360,361,361,361,361,361,361,
936361,361,361,361,361,361,361,361,361,361,361,361,361,361,361,361,361,361,361,361,361,361,361,361,361,361,361,361,361,361,361,361,
937362,362,362,362,362,362,362,362,362,362,362,362,362,362,362,362,362,362,362,362,362,362,362,362,362,362,362,362,362,362,362,362,
938362,362,362,362,362,362,363,363,363,363,363,363,363,363,363,363,363,363,363,363,363,363,363,363,363,363,363,363,363,363,363,363,
939363,363,363,363,363,363,363,363,363,363,363,363,364,364,364,364,364,364,364,364,364,364,364,364,364,364,364,364,364,364,364,364,
940364,364,364,364,364,364,364,364,364,364,364,364,364,364,364,364,364,364,365,365,365,365,365,365,365,365,365,365,365,365,365,365,
941365,365,365,365,365,365,365,365,365,365,365,365,365,365,365,365,365,365,365,365,365,365,365,365,366,366,366,366,366,366,366,366,
942366,366,366,366,366,366,366,366,366,366,366,366,366,366,366,366,366,366,366,366,366,366,366,366,366,366,366,366,366,366,367,367,
943367,367,367,367,367,367,367,367,367,367,367,367,367,367,367,367,367,367,367,367,367,367,367,367,367,367,367,367,367,367,367,367,
944367,367,367,367,367,368,368,368,368,368,368,368,368,368,368,368,368,368,368,368,368,368,368,368,368,368,368,368,368,368,368,368,
945368,368,368,368,368,368,368,368,368,368,368,369,369,369,369,369,369,369,369,369,369,369,369,369,369,369,369,369,369,369,369,369,
946369,369,369,369,369,369,369,369,369,369,369,369,369,369,369,369,369,370,370,370,370,370,370,370,370,370,370,370,370,370,370,370,
947370,370,370,370,370,370,370,370,370,370,370,370,370,370,370,370,370,370,370,370,370,370,370,371,371,371,371,371,371,371,371,371,
948371,371,371,371,371,371,371,371,371,371,371,371,371,371,371,371,371,371,371,371,371,371,371,371,371,371,371,371,371,371,372,372,
949372,372,372,372,372,372,372,372,372,372,372,372,372,372,372,372,372,372,372,372,372,372,372,372,372,372,372,372,372,372,372,372,
950372,372,372,372,373,373,373,373,373,373,373,373,373,373,373,373,373,373,373,373,373,373,373,373,373,373,373,373,373,373,373,373,
951373,373,373,373,373,373,373,373,373,373,374,374,374,374,374,374,374,374,374,374,374,374,374,374,374,374,374,374,374,374,374,374,
952374,374,374,374,374,374,374,374,374,374,374,374,374,374,374,374,374,375,375,375,375,375,375,375,375,375,375,375,375,375,375,375,
953375,375,375,375,375,375,375,375,375,375,375,375,375,375,375,375,375,375,375,375,375,375,375,376,376,376,376,376,376,376,376,376,
954376,376,376,376,376,376,376,376,376,376,376,376,376,376,376,376,376,376,376,376,376,376,376,376,376,376,376,376,376,376,377,377,
955377,377,377,377,377,377,377,377,377,377,377,377,377,377,377,377,377,377,377,377,377,377,377,377,377,377,377,377,377,377,377,377,
956377,377,377,377,378,378,378,378,378,378,378,378,378,378,378,378,378,378,378,378,378,378,378,378,378,378,378,378,378,378,378,378,
957378,378,378,378,378,378,378,378,378,378,378,379,379,379,379,379,379,379,379,379,379,379,379,379,379,379,379,379,379,379,379,379,
958379,379,379,379,379,379,379,379,379,379,379,379,379,379,379,379,379,379,380,380,380,380,380,380,380,380,380,380,380,380,380,380,
959380,380,380,380,380,380,380,380,380,380,380,380,380,380,380,380,380,380,380,380,380,380,380,380,381,381,381,381,381,381,381,381,
960381,381,381,381,381,381,381,381,381,381,381,381,381,381,381,381,381,381,381,381,381,381,381,381,381,381,381,381,381,381,381,382,
961382,382,382,382,382,382,382,382,382,382,382,382,382,382,382,382,382,382,382,382,382,382,382,382,382,382,382,382,382,382,382,382,
962382,382,382,382,382,382,383,383,383,383,383,383,383,383,383,383,383,383,383,383,383,383,383,383,383,383,383,383,383,383,383,383,
963383,383,383,383,383,383,383,383,383,383,383,383,384,384,384,384,384,384,384,384,384,384,384,384,384,384,384,384,384,384,384,384,
964384,384,384,384,384,384,384,384,384,384,384,384,384,384,384,384,384,384,384,385,385,385,385,385,385,385,385,385,385,385,385,385,
965385,385,385,385,385,385,385,385,385,385,385,385,385,385,385,385,385,385,385,385,385,385,385,385,385,385,386,386,386,386,386,386,
966386,386,386,386,386,386,386,386,386,386,386,386,386,386,386,386,386,386,386,386,386,386,386,386,386,386,386,386,386,386,386,386,
967386,387,387,387,387,387,387,387,387,387,387,387,387,387,387,387,387,387,387,387,387,387,387,387,387,387,387,387,387,387,387,387,
968387,387,387,387,387,387,387,387,388,388,388,388,388,388,388,388,388,388,388,388,388,388,388,388,388,388,388,388,388,388,388,388,
969388,388,388,388,388,388,388,388,388,388,388,388,388,388,389,389,389,389,389,389,389,389,389,389,389,389,389,389,389,389,389,389,
970389,389,389,389,389,389,389,389,389,389,389,389,389,389,389,389,389,389,389,389,389,390,390,390,390,390,390,390,390,390,390,390,
971390,390,390,390,390,390,390,390,390,390,390,390,390,390,390,390,390,390,390,390,390,390,390,390,390,390,390,390,391,391,391,391,
972391,391,391,391,391,391,391,391,391,391,391,391,391,391,391,391,391,391,391,391,391,391,391,391,391,391,391,391,391,391,391,391,
973391,391,391,392,392,392,392,392,392,392,392,392,392,392,392,392,392,392,392,392,392,392,392,392,392,392,392,392,392,392,392,392,
974392,392,392,392,392,392,392,392,392,392,393,393,393,393,393,393,393,393,393,393,393,393,393,393,393,393,393,393,393,393,393,393,
975393,393,393,393,393,393,393,393,393,393,393,393,393,393,393,393,393,394,394,394,394,394,394,394,394,394,394,394,394,394,394,394,
976394,394,394,394,394,394,394,394,394,394,394,394,394,394,394,394,394,394,394,394,394,394,394,394,394,395,395,395,395,395,395,395,
977395,395,395,395,395,395,395,395,395,395,395,395,395,395,395,395,395,395,395,395,395,395,395,395,395,395,395,395,395,395,395,395,
978396,396,396,396,396,396,396,396,396,396,396,396,396,396,396,396,396,396,396,396,396,396,396,396,396,396,396,396,396,396,396,396,
979396,396,396,396,396,396,396,397,397,397,397,397,397,397,397,397,397,397,397,397,397,397,397,397,397,397,397,397,397,397,397,397,
980397,397,397,397,397,397,397,397,397,397,397,397,397,397,398,398,398,398,398,398,398,398,398,398,398,398,398,398,398,398,398,398,
981398,398,398,398,398,398,398,398,398,398,398,398,398,398,398,398,398,398,398,398,398,399,399,399,399,399,399,399,399,399,399,399,
982399,399,399,399,399,399,399,399,399,399,399,399,399,399,399,399,399,399,399,399,399,399,399,399,399,399,399,399,399,400,400,400,
983400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,400,
984400,400,400,400,401,401,401,401,401,401,401,401,401,401,401,401,401,401,401,401,401,401,401,401,401,401,401,401,401,401,401,401,
985401,401,401,401,401,401,401,401,401,401,401,402,402,402,402,402,402,402,402,402,402,402,402,402,402,402,402,402,402,402,402,402,
986402,402,402,402,402,402,402,402,402,402,402,402,402,402,402,402,402,402,402,403,403,403,403,403,403,403,403,403,403,403,403,403,
987403,403,403,403,403,403,403,403,403,403,403,403,403,403,403,403,403,403,403,403,403,403,403,403,403,403,404,404,404,404,404,404,
988404,404,404,404,404,404,404,404,404,404,404,404,404,404,404,404,404,404,404,404,404,404,404,404,404,404,404,404,404,404,404,404,
989404,405,405,405,405,405,405,405,405,405,405,405,405,405,405,405,405,405,405,405,405,405,405,405,405,405,405,405,405,405,405,405,
990405,405,405,405,405,405,405,405,405,406,406,406,406,406,406,406,406,406,406,406,406,406,406,406,406,406,406,406,406,406,406,406,
991406,406,406,406,406,406,406,406,406,406,406,406,406,406,406,406,407,407,407,407,407,407,407,407,407,407,407,407,407,407,407,407,
992407,407,407,407,407,407,407,407,407,407,407,407,407,407,407,407,407,407,407,407,407,407,407,407,408,408,408,408,408,408,408,408,
993408,408,408,408,408,408,408,408,408,408,408,408,408,408,408,408,408,408,408,408,408,408,408,408,408,408,408,408,408,408,408,409,
994409,409,409,409,409,409,409,409,409,409,409,409,409,409,409,409,409,409,409,409,409,409,409,409,409,409,409,409,409,409,409,409,
995409,409,409,409,409,409,409,410,410,410,410,410,410,410,410,410,410,410,410,410,410,410,410,410,410,410,410,410,410,410,410,410,
996410,410,410,410,410,410,410,410,410,410,410,410,410,410,410,411,411,411,411,411,411,411,411,411,411,411,411,411,411,411,411,411,
997411,411,411,411,411,411,411,411,411,411,411,411,411,411,411,411,411,411,411,411,411,411,412,412,412,412,412,412,412,412,412,412,
998412,412,412,412,412,412,412,412,412,412,412,412,412,412,412,412,412,412,412,412,412,412,412,412,412,412,412,412,412,412,413,413,
999413,413,413,413,413,413,413,413,413,413,413,413,413,413,413,413,413,413,413,413,413,413,413,413,413,413,413,413,413,413,413,413,
1000413,413,413,413,413,413,414,414,414,414,414,414,414,414,414,414,414,414,414,414,414,414,414,414,414,414,414,414,414,414,414,414,
1001414,414,414,414,414,414,414,414,414,414,414,414,414,415,415,415,415,415,415,415,415,415,415,415,415,415,415,415,415,415,415,415,
1002415,415,415,415,415,415,415,415,415,415,415,415,415,415,415,415,415,415,415,415,415,416,416,416,416,416,416,416,416,416,416,416,
1003416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,416,417,417,417,
1004417,417,417,417,417,417,417,417,417,417,417,417,417,417,417,417,417,417,417,417,417,417,417,417,417,417,417,417,417,417,417,417,
1005417,417,417,417,417,418,418,418,418,418,418,418,418,418,418,418,418,418,418,418,418,418,418,418,418,418,418,418,418,418,418,418,
1006418,418,418,418,418,418,418,418,418,418,418,418,418,419,419,419,419,419,419,419,419,419,419,419,419,419,419,419,419,419,419,419,
1007419,419,419,419,419,419,419,419,419,419,419,419,419,419,419,419,419,419,419,419,419,420,420,420,420,420,420,420,420,420,420,420,
1008420,420,420,420,420,420,420,420,420,420,420,420,420,420,420,420,420,420,420,420,420,420,420,420,420,420,420,420,420,421,421,421,
1009421,421,421,421,421,421,421,421,421,421,421,421,421,421,421,421,421,421,421,421,421,421,421,421,421,421,421,421,421,421,421,421,
1010421,421,421,421,421,422,422,422,422,422,422,422,422,422,422,422,422,422,422,422,422,422,422,422,422,422,422,422,422,422,422,422,
1011422,422,422,422,422,422,422,422,422,422,422,422,422,423,423,423,423,423,423,423,423,423,423,423,423,423,423,423,423,423,423,423,
1012423,423,423,423,423,423,423,423,423,423,423,423,423,423,423,423,423,423,423,423,423,424,424,424,424,424,424,424,424,424,424,424,
1013424,424,424,424,424,424,424,424,424,424,424,424,424,424,424,424,424,424,424,424,424,424,424,424,424,424,424,424,424,425,425,425,
1014425,425,425,425,425,425,425,425,425,425,425,425,425,425,425,425,425,425,425,425,425,425,425,425,425,425,425,425,425,425,425,425,
1015425,425,425,425,425,426,426,426,426,426,426,426,426,426,426,426,426,426,426,426,426,426,426,426,426,426,426,426,426,426,426,426,
1016426,426,426,426,426,426,426,426,426,426,426,426,426,427,427,427,427,427,427,427,427,427,427,427,427,427,427,427,427,427,427,427,
1017427,427,427,427,427,427,427,427,427,427,427,427,427,427,427,427,427,427,427,427,427,428,428,428,428,428,428,428,428,428,428,428,
1018428,428,428,428,428,428,428,428,428,428,428,428,428,428,428,428,428,428,428,428,428,428,428,428,428,428,428,428,428,429,429,429,
1019429,429,429,429,429,429,429,429,429,429,429,429,429,429,429,429,429,429,429,429,429,429,429,429,429,429,429,429,429,429,429,429,
1020429,429,429,429,429,429,430,430,430,430,430,430,430,430,430,430,430,430,430,430,430,430,430,430,430,430,430,430,430,430,430,430,
1021430,430,430,430,430,430,430,430,430,430,430,430,430,430,431,431,431,431,431,431,431,431,431,431,431,431,431,431,431,431,431,431,
1022431,431,431,431,431,431,431,431,431,431,431,431,431,431,431,431,431,431,431,431,431,431,432,432,432,432,432,432,432,432,432,432,
1023432,432,432,432,432,432,432,432,432,432,432,432,432,432,432,432,432,432,432,432,432,432,432,432,432,432,432,432,432,432,433,433,
1024433,433,433,433,433,433,433,433,433,433,433,433,433,433,433,433,433,433,433,433,433,433,433,433,433,433,433,433,433,433,433,433,
1025433,433,433,433,433,433,433,434,434,434,434,434,434,434,434,434,434,434,434,434,434,434,434,434,434,434,434,434,434,434,434,434,
1026434,434,434,434,434,434,434,434,434,434,434,434,434,434,434,435,435,435,435,435,435,435,435,435,435,435,435,435,435,435,435,435,
1027435,435,435,435,435,435,435,435,435,435,435,435,435,435,435,435,435,435,435,435,435,435,435,435,436,436,436,436,436,436,436,436,
1028436,436,436,436,436,436,436,436,436,436,436,436,436,436,436,436,436,436,436,436,436,436,436,436,436,436,436,436,436,436,436,436,
1029437,437,437,437,437,437,437,437,437,437,437,437,437,437,437,437,437,437,437,437,437,437,437,437,437,437,437,437,437,437,437,437,
1030437,437,437,437,437,437,437,437,437,438,438,438,438,438,438,438,438,438,438,438,438,438,438,438,438,438,438,438,438,438,438,438,
1031438,438,438,438,438,438,438,438,438,438,438,438,438,438,438,438,438,439,439,439,439,439,439,439,439,439,439,439,439,439,439,439,
1032439,439,439,439,439,439,439,439,439,439,439,439,439,439,439,439,439,439,439,439,439,439,439,439,439,439,440,440,440,440,440,440,
1033440,440,440,440,440,440,440,440,440,440,440,440,440,440,440,440,440,440,440,440,440,440,440,440,440,440,440,440,440,440,440,440,
1034440,440,441,441,441,441,441,441,441,441,441,441,441,441,441,441,441,441,441,441,441,441,441,441,441,441,441,441,441,441,441,441,
1035441,441,441,441,441,441,441,441,441,441,441,442,442,442,442,442,442,442,442,442,442,442,442,442,442,442,442,442,442,442,442,442,
1036442,442,442,442,442,442,442,442,442,442,442,442,442,442,442,442,442,442,442,443,443,443,443,443,443,443,443,443,443,443,443,443,
1037443,443,443,443,443,443,443,443,443,443,443,443,443,443,443,443,443,443,443,443,443,443,443,443,443,443,443,443,444,444,444,444,
1038444,444,444,444,444,444,444,444,444,444,444,444,444,444,444,444,444,444,444,444,444,444,444,444,444,444,444,444,444,444,444,444,
1039444,444,444,444,444,445,445,445,445,445,445,445,445,445,445,445,445,445,445,445,445,445,445,445,445,445,445,445,445,445,445,445,
1040445,445,445,445,445,445,445,445,445,445,445,445,445,446,446,446,446,446,446,446,446,446,446,446,446,446,446,446,446,446,446,446,
1041446,446,446,446,446,446,446,446,446,446,446,446,446,446,446,446,446,446,446,446,446,446,447,447,447,447,447,447,447,447,447,447,
1042447,447,447,447,447,447,447,447,447,447,447,447,447,447,447,447,447,447,447,447,447,447,447,447,447,447,447,447,447,447,447,448,
1043448,448,448,448,448,448,448,448,448,448,448,448,448,448,448,448,448,448,448,448,448,448,448,448,448,448,448,448,448,448,448,448,
1044448,448,448,448,448,448,448,448,449,449,449,449,449,449,449,449,449,449,449,449,449,449,449,449,449,449,449,449,449,449,449,449,
1045449,449,449,449,449,449,449,449,449,449,449,449,449,449,449,449,449,450,450,450,450,450,450,450,450,450,450,450,450,450,450,450,
1046450,450,450,450,450,450,450,450,450,450,450,450,450,450,450,450,450,450,450,450,450,450,450,450,450,451,451,451,451,451,451,451,
1047451,451,451,451,451,451,451,451,451,451,451,451,451,451,451,451,451,451,451,451,451,451,451,451,451,451,451,451,451,451,451,451,
1048451,451,452,452,452,452,452,452,452,452,452,452,452,452,452,452,452,452,452,452,452,452,452,452,452,452,452,452,452,452,452,452,
1049452,452,452,452,452,452,452,452,452,452,452,453,453,453,453,453,453,453,453,453,453,453,453,453,453,453,453,453,453,453,453,453,
1050453,453,453,453,453,453,453,453,453,453,453,453,453,453,453,453,453,453,453,453,454,454,454,454,454,454,454,454,454,454,454,454,
1051454,454,454,454,454,454,454,454,454,454,454,454,454,454,454,454,454,454,454,454,454,454,454,454,454,454,454,454,454,455,455,455,
1052455,455,455,455,455,455,455,455,455,455,455,455,455,455,455,455,455,455,455,455,455,455,455,455,455,455,455,455,455,455,455,455,
1053455,455,455,455,455,455,456,456,456,456,456,456,456,456,456,456,456,456,456,456,456,456,456,456,456,456,456,456,456,456,456,456,
1054456,456,456,456,456,456,456,456,456,456,456,456,456,456,456,457,457,457,457,457,457,457,457,457,457,457,457,457,457,457,457,457,
1055457,457,457,457,457,457,457,457,457,457,457,457,457,457,457,457,457,457,457,457,457,457,457,457,458,458,458,458,458,458,458,458,
1056458,458,458,458,458,458,458,458,458,458,458,458,458,458,458,458,458,458,458,458,458,458,458,458,458,458,458,458,458,458,458,458,
1057458,458,459,459,459,459,459,459,459,459,459,459,459,459,459,459,459,459,459,459,459,459,459,459,459,459,459,459,459,459,459,459,
1058459,459,459,459,459,459,459,459,459,459,459,460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,
1059460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,460,461,461,461,461,461,461,461,461,461,461,461,461,
1060461,461,461,461,461,461,461,461,461,461,461,461,461,461,461,461,461,461,461,461,461,461,461,461,461,461,461,461,461,462,462,462,
1061462,462,462,462,462,462,462,462,462,462,462,462,462,462,462,462,462,462,462,462,462,462,462,462,462,462,462,462,462,462,462,462,
1062462,462,462,462,462,462,463,463,463,463,463,463,463,463,463,463,463,463,463,463,463,463,463,463,463,463,463,463,463,463,463,463,
1063463,463,463,463,463,463,463,463,463,463,463,463,463,463,463,463,464,464,464,464,464,464,464,464,464,464,464,464,464,464,464,464,
1064464,464,464,464,464,464,464,464,464,464,464,464,464,464,464,464,464,464,464,464,464,464,464,464,464,465,465,465,465,465,465,465,
1065465,465,465,465,465,465,465,465,465,465,465,465,465,465,465,465,465,465,465,465,465,465,465,465,465,465,465,465,465,465,465,465,
1066465,465,466,466,466,466,466,466,466,466,466,466,466,466,466,466,466,466,466,466,466,466,466,466,466,466,466,466,466,466,466,466,
1067466,466,466,466,466,466,466,466,466,466,466,466,467,467,467,467,467,467,467,467,467,467,467,467,467,467,467,467,467,467,467,467,
1068467,467,467,467,467,467,467,467,467,467,467,467,467,467,467,467,467,467,467,467,467,468,468,468,468,468,468,468,468,468,468,468,
1069468,468,468,468,468,468,468,468,468,468,468,468,468,468,468,468,468,468,468,468,468,468,468,468,468,468,468,468,468,468,469,469,
1070469,469,469,469,469,469,469,469,469,469,469,469,469,469,469,469,469,469,469,469,469,469,469,469,469,469,469,469,469,469,469,469,
1071469,469,469,469,469,469,469,469,470,470,470,470,470,470,470,470,470,470,470,470,470,470,470,470,470,470,470,470,470,470,470,470,
1072470,470,470,470,470,470,470,470,470,470,470,470,470,470,470,470,470,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,
1073471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,471,472,472,472,472,472,
1074472,472,472,472,472,472,472,472,472,472,472,472,472,472,472,472,472,472,472,472,472,472,472,472,472,472,472,472,472,472,472,472,
1075472,472,472,472,473,473,473,473,473,473,473,473,473,473,473,473,473,473,473,473,473,473,473,473,473,473,473,473,473,473,473,473,
1076473,473,473,473,473,473,473,473,473,473,473,473,473,473,474,474,474,474,474,474,474,474,474,474,474,474,474,474,474,474,474,474,
1077474,474,474,474,474,474,474,474,474,474,474,474,474,474,474,474,474,474,474,474,474,474,474,475,475,475,475,475,475,475,475,475,
1078475,475,475,475,475,475,475,475,475,475,475,475,475,475,475,475,475,475,475,475,475,475,475,475,475,475,475,475,475,475,475,475,
1079475,476,476,476,476,476,476,476,476,476,476,476,476,476,476,476,476,476,476,476,476,476,476,476,476,476,476,476,476,476,476,476,
1080476,476,476,476,476,476,476,476,476,476,476,477,477,477,477,477,477,477,477,477,477,477,477,477,477,477,477,477,477,477,477,477,
1081477,477,477,477,477,477,477,477,477,477,477,477,477,477,477,477,477,477,477,477,478,478,478,478,478,478,478,478,478,478,478,478,
1082478,478,478,478,478,478,478,478,478,478,478,478,478,478,478,478,478,478,478,478,478,478,478,478,478,478,478,478,478,478,479,479,
1083479,479,479,479,479,479,479,479,479,479,479,479,479,479,479,479,479,479,479,479,479,479,479,479,479,479,479,479,479,479,479,479,
1084479,479,479,479,479,479,479,479,480,480,480,480,480,480,480,480,480,480,480,480,480,480,480,480,480,480,480,480,480,480,480,480,
1085480,480,480,480,480,480,480,480,480,480,480,480,480,480,480,480,480,480,481,481,481,481,481,481,481,481,481,481,481,481,481,481,
1086481,481,481,481,481,481,481,481,481,481,481,481,481,481,481,481,481,481,481,481,481,481,481,481,481,481,481,482,482,482,482,482,
1087482,482,482,482,482,482,482,482,482,482,482,482,482,482,482,482,482,482,482,482,482,482,482,482,482,482,482,482,482,482,482,482,
1088482,482,482,482,482,483,483,483,483,483,483,483,483,483,483,483,483,483,483,483,483,483,483,483,483,483,483,483,483,483,483,483,
1089483,483,483,483,483,483,483,483,483,483,483,483,483,483,483,484,484,484,484,484,484,484,484,484,484,484,484,484,484,484,484,484,
1090484,484,484,484,484,484,484,484,484,484,484,484,484,484,484,484,484,484,484,484,484,484,484,484,484,485,485,485,485,485,485,485,
1091485,485,485,485,485,485,485,485,485,485,485,485,485,485,485,485,485,485,485,485,485,485,485,485,485,485,485,485,485,485,485,485,
1092485,485,485,486,486,486,486,486,486,486,486,486,486,486,486,486,486,486,486,486,486,486,486,486,486,486,486,486,486,486,486,486,
1093486,486,486,486,486,486,486,486,486,486,486,486,486,487,487,487,487,487,487,487,487,487,487,487,487,487,487,487,487,487,487,487,
1094487,487,487,487,487,487,487,487,487,487,487,487,487,487,487,487,487,487,487,487,487,487,487,488,488,488,488,488,488,488,488,488,
1095488,488,488,488,488,488,488,488,488,488,488,488,488,488,488,488,488,488,488,488,488,488,488,488,488,488,488,488,488,488,488,488,
1096488,489,489,489,489,489,489,489,489,489,489,489,489,489,489,489,489,489,489,489,489,489,489,489,489,489,489,489,489,489,489,489,
1097489,489,489,489,489,489,489,489,489,489,489,490,490,490,490,490,490,490,490,490,490,490,490,490,490,490,490,490,490,490,490,490,
1098490,490,490,490,490,490,490,490,490,490,490,490,490,490,490,490,490,490,490,490,490,491,491,491,491,491,491,491,491,491,491,491,
1099491,491,491,491,491,491,491,491,491,491,491,491,491,491,491,491,491,491,491,491,491,491,491,491,491,491,491,491,491,491,491,492,
1100492,492,492,492,492,492,492,492,492,492,492,492,492,492,492,492,492,492,492,492,492,492,492,492,492,492,492,492,492,492,492,492,
1101492,492,492,492,492,492,492,492,492,493,493,493,493,493,493,493,493,493,493,493,493,493,493,493,493,493,493,493,493,493,493,493,
1102493,493,493,493,493,493,493,493,493,493,493,493,493,493,493,493,493,493,493,494,494,494,494,494,494,494,494,494,494,494,494,494,
1103494,494,494,494,494,494,494,494,494,494,494,494,494,494,494,494,494,494,494,494,494,494,494,494,494,494,494,494,494,495,495,495,
1104495,495,495,495,495,495,495,495,495,495,495,495,495,495,495,495,495,495,495,495,495,495,495,495,495,495,495,495,495,495,495,495,
1105495,495,495,495,495,495,495,496,496,496,496,496,496,496,496,496,496,496,496,496,496,496,496,496,496,496,496,496,496,496,496,496,
1106496,496,496,496,496,496,496,496,496,496,496,496,496,496,496,496,496,496,497,497,497,497,497,497,497,497,497,497,497,497,497,497,
1107497,497,497,497,497,497,497,497,497,497,497,497,497,497,497,497,497,497,497,497,497,497,497,497,497,497,497,497,498,498,498,498,
1108498,498,498,498,498,498,498,498,498,498,498,498,498,498,498,498,498,498,498,498,498,498,498,498,498,498,498,498,498,498,498,498,
1109498,498,498,498,498,498,499,499,499,499,499,499,499,499,499,499,499,499,499,499,499,499,499,499,499,499,499,499,499,499,499,499,
1110499,499,499,499,499,499,499,499,499,499,499,499,499,499,499,499,500,500,500,500,500,500,500,500,500,500,500,500,500,500,500,500,
1111500,500,500,500,500,500,500,500,500,500,500,500,500,500,500,500,500,500,500,500,500,500,500,500,500,500,500,501,501,501,501,501,
1112501,501,501,501,501,501,501,501,501,501,501,501,501,501,501,501,501,501,501,501,501,501,501,501,501,501,501,501,501,501,501,501,
1113501,501,501,501,501,502,502,502,502,502,502,502,502,502,502,502,502,502,502,502,502,502,502,502,502,502,502,502,502,502,502,502,
1114502,502,502,502,502,502,502,502,502,502,502,502,502,502,502,502,503,503,503,503,503,503,503,503,503,503,503,503,503,503,503,503,
1115503,503,503,503,503,503,503,503,503,503,503,503,503,503,503,503,503,503,503,503,503,503,503,503,503,503,504,504,504,504,504,504,
1116504,504,504,504,504,504,504,504,504,504,504,504,504,504,504,504,504,504,504,504,504,504,504,504,504,504,504,504,504,504,504,504,
1117504,504,504,504,505,505,505,505,505,505,505,505,505,505,505,505,505,505,505,505,505,505,505,505,505,505,505,505,505,505,505,505,
1118505,505,505,505,505,505,505,505,505,505,505,505,505,505,505,506,506,506,506,506,506,506,506,506,506,506,506,506,506,506,506,506,
1119506,506,506,506,506,506,506,506,506,506,506,506,506,506,506,506,506,506,506,506,506,506,506,506,506,507,507,507,507,507,507,507,
1120507,507,507,507,507,507,507,507,507,507,507,507,507,507,507,507,507,507,507,507,507,507,507,507,507,507,507,507,507,507,507,507,
1121507,507,507,507,508,508,508,508,508,508,508,508,508,508,508,508,508,508,508,508,508,508,508,508,508,508,508,508,508,508,508,508,
1122508,508,508,508,508,508,508,508,508,508,508,508,508,508,509,509,509,509,509,509,509,509,509,509,509,509,509,509,509,509,509,509,
1123509,509,509,509,509,509,509,509,509,509,509,509,509,509,509,509,509,509,509,509,509,509,509,509,509,510,510,510,510,510,510,510,
1124510,510,510,510,510,510,510,510,510,510,510,510,510,510,510,510,510,510,510,510,510,510,510,510,510,510,510,510,510,510,510,510,
1125510,510,510,510,511,511,511,511,511,511,511,511,511,511,511,511,511,511,511,511,511,511,511,511,511,511,511,511,511,511,511,511,
1126511,511,511,511,511,511,511,511,511,511,511,511,511,511,512,512,512,512,512,512,512,512,512,512,512,512,512,512,512,512,512,512,
1127512,512,512,512,512,512,512,512,512,512,512,512,512,512,512,512,512,512,512,512,512,512,512,512,512,513,513,513,513,513,513,513,
1128513,513,513,513,513,513,513,513,513,513,513,513,513,513,513,513,513,513,513,513,513,513,513,513,513,513,513,513,513,513,513,513,
1129513,513,513,513,514,514,514,514,514,514,514,514,514,514,514,514,514,514,514,514,514,514,514,514,514,514,514,514,514,514,514,514,
1130514,514,514,514,514,514,514,514,514,514,514,514,514,514,515,515,515,515,515,515,515,515,515,515,515,515,515,515,515,515,515,515,
1131515,515,515,515,515,515,515,515,515,515,515,515,515,515,515,515,515,515,515,515,515,515,515,515,515,516,516,516,516,516,516,516,
1132516,516,516,516,516,516,516,516,516,516,516,516,516,516,516,516,516,516,516,516,516,516,516,516,516,516,516,516,516,516,516,516,
1133516,516,516,516,517,517,517,517,517,517,517,517,517,517,517,517,517,517,517,517,517,517,517,517,517,517,517,517,517,517,517,517,
1134517,517,517,517,517,517,517,517,517,517,517,517,517,517,517,518,518,518,518,518,518,518,518,518,518,518,518,518,518,518,518,518,
1135518,518,518,518,518,518,518,518,518,518,518,518,518,518,518,518,518,518,518,518,518,518,518,518,518,518,519,519,519,519,519,519,
1136519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,519,
1137519,519,519,519,520,520,520,520,520,520,520,520,520,520,520,520,520,520,520,520,520,520,520,520,520,520,520,520,520,520,520,520,
1138520,520,520,520,520,520,520,520,520,520,520,520,520,520,520,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,
1139521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,521,522,522,522,522,522,522,
1140522,522,522,522,522,522,522,522,522,522,522,522,522,522,522,522,522,522,522,522,522,522,522,522,522,522,522,522,522,522,522,522,
1141522,522,522,522,522,523,523,523,523,523,523,523,523,523,523,523,523,523,523,523,523,523,523,523,523,523,523,523,523,523,523,523,
1142523,523,523,523,523,523,523,523,523,523,523,523,523,523,523,523,524,524,524,524,524,524,524,524,524,524,524,524,524,524,524,524,
1143524,524,524,524,524,524,524,524,524,524,524,524,524,524,524,524,524,524,524,524,524,524,524,524,524,524,524,525,525,525,525,525,
1144525,525,525,525,525,525,525,525,525,525,525,525,525,525,525,525,525,525,525,525,525,525,525,525,525,525,525,525,525,525,525,525,
1145525,525,525,525,525,525,526,526,526,526,526,526,526,526,526,526,526,526,526,526,526,526,526,526,526,526,526,526,526,526,526,526,
1146526,526,526,526,526,526,526,526,526,526,526,526,526,526,526,526,526,527,527,527,527,527,527,527,527,527,527,527,527,527,527,527,
1147527,527,527,527,527,527,527,527,527,527,527,527,527,527,527,527,527,527,527,527,527,527,527,527,527,527,527,527,528,528,528,528,
1148528,528,528,528,528,528,528,528,528,528,528,528,528,528,528,528,528,528,528,528,528,528,528,528,528,528,528,528,528,528,528,528,
1149528,528,528,528,528,528,528,529,529,529,529,529,529,529,529,529,529,529,529,529,529,529,529,529,529,529,529,529,529,529,529,529,
1150529,529,529,529,529,529,529,529,529,529,529,529,529,529,529,529,529,529,529,530,530,530,530,530,530,530,530,530,530,530,530,530,
1151530,530,530,530,530,530,530,530,530,530,530,530,530,530,530,530,530,530,530,530,530,530,530,530,530,530,530,530,530,530,531,531,
1152531,531,531,531,531,531,531,531,531,531,531,531,531,531,531,531,531,531,531,531,531,531,531,531,531,531,531,531,531,531,531,531,
1153531,531,531,531,531,531,531,531,531,532,532,532,532,532,532,532,532,532,532,532,532,532,532,532,532,532,532,532,532,532,532,532,
1154532,532,532,532,532,532,532,532,532,532,532,532,532,532,532,532,532,532,532,532,533,533,533,533,533,533,533,533,533,533,533,533,
1155533,533,533,533,533,533,533,533,533,533,533,533,533,533,533,533,533,533,533,533,533,533,533,533,533,533,533,533,533,533,533,534,
1156534,534,534,534,534,534,534,534,534,534,534,534,534,534,534,534,534,534,534,534,534,534,534,534,534,534,534,534,534,534,534,534,
1157534,534,534,534,534,534,534,534,534,534,534,535,535,535,535,535,535,535,535,535,535,535,535,535,535,535,535,535,535,535,535,535,
1158535,535,535,535,535,535,535,535,535,535,535,535,535,535,535,535,535,535,535,535,535,535,536,536,536,536,536,536,536,536,536,536,
1159536,536,536,536,536,536,536,536,536,536,536,536,536,536,536,536,536,536,536,536,536,536,536,536,536,536,536,536,536,536,536,536,
1160536,537,537,537,537,537,537,537,537,537,537,537,537,537,537,537,537,537,537,537,537,537,537,537,537,537,537,537,537,537,537,537,
1161537,537,537,537,537,537,537,537,537,537,537,537,537,538,538,538,538,538,538,538,538,538,538,538,538,538,538,538,538,538,538,538,
1162538,538,538,538,538,538,538,538,538,538,538,538,538,538,538,538,538,538,538,538,538,538,538,538,539,539,539,539,539,539,539,539,
1163539,539,539,539,539,539,539,539,539,539,539,539,539,539,539,539,539,539,539,539,539,539,539,539,539,539,539,539,539,539,539,539,
1164539,539,539,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,
1165540,540,540,540,540,540,540,540,540,540,540,540,540,540,540,541,541,541,541,541,541,541,541,541,541,541,541,541,541,541,541,541,
1166541,541,541,541,541,541,541,541,541,541,541,541,541,541,541,541,541,541,541,541,541,541,541,541,541,541,542,542,542,542,542,542,
1167542,542,542,542,542,542,542,542,542,542,542,542,542,542,542,542,542,542,542,542,542,542,542,542,542,542,542,542,542,542,542,542,
1168542,542,542,542,542,542,543,543,543,543,543,543,543,543,543,543,543,543,543,543,543,543,543,543,543,543,543,543,543,543,543,543,
1169543,543,543,543,543,543,543,543,543,543,543,543,543,543,543,543,543,544,544,544,544,544,544,544,544,544,544,544,544,544,544,544,
1170544,544,544,544,544,544,544,544,544,544,544,544,544,544,544,544,544,544,544,544,544,544,544,544,544,544,544,544,544,545,545,545,
1171545,545,545,545,545,545,545,545,545,545,545,545,545,545,545,545,545,545,545,545,545,545,545,545,545,545,545,545,545,545,545,545,
1172545,545,545,545,545,545,545,545,546,546,546,546,546,546,546,546,546,546,546,546,546,546,546,546,546,546,546,546,546,546,546,546,
1173546,546,546,546,546,546,546,546,546,546,546,546,546,546,546,546,546,546,546,546,547,547,547,547,547,547,547,547,547,547,547,547,
1174547,547,547,547,547,547,547,547,547,547,547,547,547,547,547,547,547,547,547,547,547,547,547,547,547,547,547,547,547,547,547,547,
1175548,548,548,548,548,548,548,548,548,548,548,548,548,548,548,548,548,548,548,548,548,548,548,548,548,548,548,548,548,548,548,548,
1176548,548,548,548,548,548,548,548,548,548,548,549,549,549,549,549,549,549,549,549,549,549,549,549,549,549,549,549,549,549,549,549,
1177549,549,549,549,549,549,549,549,549,549,549,549,549,549,549,549,549,549,549,549,549,549,549,550,550,550,550,550,550,550,550,550,
1178550,550,550,550,550,550,550,550,550,550,550,550,550,550,550,550,550,550,550,550,550,550,550,550,550,550,550,550,550,550,550,550,
1179550,550,550,551,551,551,551,551,551,551,551,551,551,551,551,551,551,551,551,551,551,551,551,551,551,551,551,551,551,551,551,551,
1180551,551,551,551,551,551,551,551,551,551,551,551,551,551,552,552,552,552,552,552,552,552,552,552,552,552,552,552,552,552,552,552,
1181552,552,552,552,552,552,552,552,552,552,552,552,552,552,552,552,552,552,552,552,552,552,552,552,552,552,553,553,553,553,553,553,
1182553,553,553,553,553,553,553,553,553,553,553,553,553,553,553,553,553,553,553,553,553,553,553,553,553,553,553,553,553,553,553,553,
1183553,553,553,553,553,553,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,
1184554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,554,555,555,555,555,555,555,555,555,555,555,555,555,555,555,
1185555,555,555,555,555,555,555,555,555,555,555,555,555,555,555,555,555,555,555,555,555,555,555,555,555,555,555,555,555,555,556,556,
1186556,556,556,556,556,556,556,556,556,556,556,556,556,556,556,556,556,556,556,556,556,556,556,556,556,556,556,556,556,556,556,556,
1187556,556,556,556,556,556,556,556,556,557,557,557,557,557,557,557,557,557,557,557,557,557,557,557,557,557,557,557,557,557,557,557,
1188557,557,557,557,557,557,557,557,557,557,557,557,557,557,557,557,557,557,557,557,557,558,558,558,558,558,558,558,558,558,558,558,
1189558,558,558,558,558,558,558,558,558,558,558,558,558,558,558,558,558,558,558,558,558,558,558,558,558,558,558,558,558,558,558,558,
1190558,559,559,559,559,559,559,559,559,559,559,559,559,559,559,559,559,559,559,559,559,559,559,559,559,559,559,559,559,559,559,559,
1191559,559,559,559,559,559,559,559,559,559,559,559,559,560,560,560,560,560,560,560,560,560,560,560,560,560,560,560,560,560,560,560,
1192560,560,560,560,560,560,560,560,560,560,560,560,560,560,560,560,560,560,560,560,560,560,560,560,560,561,561,561,561,561,561,561,
1193561,561,561,561,561,561,561,561,561,561,561,561,561,561,561,561,561,561,561,561,561,561,561,561,561,561,561,561,561,561,561,561,
1194561,561,561,561,561,562,562,562,562,562,562,562,562,562,562,562,562,562,562,562,562,562,562,562,562,562,562,562,562,562,562,562,
1195562,562,562,562,562,562,562,562,562,562,562,562,562,562,562,562,562,563,563,563,563,563,563,563,563,563,563,563,563,563,563,563,
1196563,563,563,563,563,563,563,563,563,563,563,563,563,563,563,563,563,563,563,563,563,563,563,563,563,563,563,563,563,564,564,564,
1197564,564,564,564,564,564,564,564,564,564,564,564,564,564,564,564,564,564,564,564,564,564,564,564,564,564,564,564,564,564,564,564,
1198564,564,564,564,564,564,564,564,564,565,565,565,565,565,565,565,565,565,565,565,565,565,565,565,565,565,565,565,565,565,565,565,
1199565,565,565,565,565,565,565,565,565,565,565,565,565,565,565,565,565,565,565,565,565,566,566,566,566,566,566,566,566,566,566,566,
1200566,566,566,566,566,566,566,566,566,566,566,566,566,566,566,566,566,566,566,566,566,566,566,566,566,566,566,566,566,566,566,566,
1201566,567,567,567,567,567,567,567,567,567,567,567,567,567,567,567,567,567,567,567,567,567,567,567,567,567,567,567,567,567,567,567,
1202567,567,567,567,567,567,567,567,567,567,567,567,567,567,568,568,568,568,568,568,568,568,568,568,568,568,568,568,568,568,568,568,
1203568,568,568,568,568,568,568,568,568,568,568,568,568,568,568,568,568,568,568,568,568,568,568,568,568,568,569,569,569,569,569,569,
1204569,569,569,569,569,569,569,569,569,569,569,569,569,569,569,569,569,569,569,569,569,569,569,569,569,569,569,569,569,569,569,569,
1205569,569,569,569,569,569,570,570,570,570,570,570,570,570,570,570,570,570,570,570,570,570,570,570,570,570,570,570,570,570,570,570,
1206570,570,570,570,570,570,570,570,570,570,570,570,570,570,570,570,570,570,571,571,571,571,571,571,571,571,571,571,571,571,571,571,
1207571,571,571,571,571,571,571,571,571,571,571,571,571,571,571,571,571,571,571,571,571,571,571,571,571,571,571,571,571,571,572,572,
1208572,572,572,572,572,572,572,572,572,572,572,572,572,572,572,572,572,572,572,572,572,572,572,572,572,572,572,572,572,572,572,572,
1209572,572,572,572,572,572,572,572,572,572,572,573,573,573,573,573,573,573,573,573,573,573,573,573,573,573,573,573,573,573,573,573,
1210573,573,573,573,573,573,573,573,573,573,573,573,573,573,573,573,573,573,573,573,573,573,573,574,574,574,574,574,574,574,574,574,
1211574,574,574,574,574,574,574,574,574,574,574,574,574,574,574,574,574,574,574,574,574,574,574,574,574,574,574,574,574,574,574,574,
1212574,574,574,575,575,575,575,575,575,575,575,575,575,575,575,575,575,575,575,575,575,575,575,575,575,575,575,575,575,575,575,575,
1213575,575,575,575,575,575,575,575,575,575,575,575,575,575,575,575,576,576,576,576,576,576,576,576,576,576,576,576,576,576,576,576,
1214576,576,576,576,576,576,576,576,576,576,576,576,576,576,576,576,576,576,576,576,576,576,576,576,576,576,576,576,577,577,577,577,
1215577,577,577,577,577,577,577,577,577,577,577,577,577,577,577,577,577,577,577,577,577,577,577,577,577,577,577,577,577,577,577,577,
1216577,577,577,577,577,577,577,577,578,578,578,578,578,578,578,578,578,578,578,578,578,578,578,578,578,578,578,578,578,578,578,578,
1217578,578,578,578,578,578,578,578,578,578,578,578,578,578,578,578,578,578,578,578,578,579,579,579,579,579,579,579,579,579,579,579,
1218579,579,579,579,579,579,579,579,579,579,579,579,579,579,579,579,579,579,579,579,579,579,579,579,579,579,579,579,579,579,579,579,
1219579,580,580,580,580,580,580,580,580,580,580,580,580,580,580,580,580,580,580,580,580,580,580,580,580,580,580,580,580,580,580,580,
1220580,580,580,580,580,580,580,580,580,580,580,580,580,580,581,581,581,581,581,581,581,581,581,581,581,581,581,581,581,581,581,581,
1221581,581,581,581,581,581,581,581,581,581,581,581,581,581,581,581,581,581,581,581,581,581,581,581,581,581,582,582,582,582,582,582,
1222582,582,582,582,582,582,582,582,582,582,582,582,582,582,582,582,582,582,582,582,582,582,582,582,582,582,582,582,582,582,582,582,
1223582,582,582,582,582,582,582,583,583,583,583,583,583,583,583,583,583,583,583,583,583,583,583,583,583,583,583,583,583,583,583,583,
1224583,583,583,583,583,583,583,583,583,583,583,583,583,583,583,583,583,583,583,584,584,584,584,584,584,584,584,584,584,584,584,584,
1225584,584,584,584,584,584,584,584,584,584,584,584,584,584,584,584,584,584,584,584,584,584,584,584,584,584,584,584,584,584,584,584,
1226585,585,585,585,585,585,585,585,585,585,585,585,585,585,585,585,585,585,585,585,585,585,585,585,585,585,585,585,585,585,585,585,
1227585,585,585,585,585,585,585,585,585,585,585,585,585,586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,
1228586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,586,587,587,587,587,587,587,587,
1229587,587,587,587,587,587,587,587,587,587,587,587,587,587,587,587,587,587,587,587,587,587,587,587,587,587,587,587,587,587,587,587,
1230587,587,587,587,587,587,588,588,588,588,588,588,588,588,588,588,588,588,588,588,588,588,588,588,588,588,588,588,588,588,588,588,
1231588,588,588,588,588,588,588,588,588,588,588,588,588,588,588,588,588,588,588,589,589,589,589,589,589,589,589,589,589,589,589,589,
1232589,589,589,589,589,589,589,589,589,589,589,589,589,589,589,589,589,589,589,589,589,589,589,589,589,589,589,589,589,589,589,590,
1233590,590,590,590,590,590,590,590,590,590,590,590,590,590,590,590,590,590,590,590,590,590,590,590,590,590,590,590,590,590,590,590,
1234590,590,590,590,590,590,590,590,590,590,590,590,591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,
1235591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,591,592,592,592,592,592,592,592,
1236592,592,592,592,592,592,592,592,592,592,592,592,592,592,592,592,592,592,592,592,592,592,592,592,592,592,592,592,592,592,592,592,
1237592,592,592,592,592,592,593,593,593,593,593,593,593,593,593,593,593,593,593,593,593,593,593,593,593,593,593,593,593,593,593,593,
1238593,593,593,593,593,593,593,593,593,593,593,593,593,593,593,593,593,593,594,594,594,594,594,594,594,594,594,594,594,594,594,594,
1239594,594,594,594,594,594,594,594,594,594,594,594,594,594,594,594,594,594,594,594,594,594,594,594,594,594,594,594,594,594,594,595,
1240595,595,595,595,595,595,595,595,595,595,595,595,595,595,595,595,595,595,595,595,595,595,595,595,595,595,595,595,595,595,595,595,
1241595,595,595,595,595,595,595,595,595,595,595,595,596,596,596,596,596,596,596,596,596,596,596,596,596,596,596,596,596,596,596,596,
1242596,596,596,596,596,596,596,596,596,596,596,596,596,596,596,596,596,596,596,596,596,596,596,596,596,597,597,597,597,597,597,597,
1243597,597,597,597,597,597,597,597,597,597,597,597,597,597,597,597,597,597,597,597,597,597,597,597,597,597,597,597,597,597,597,597,
1244597,597,597,597,597,597,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,
1245598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,598,599,599,599,599,599,599,599,599,599,599,599,599,599,
1246599,599,599,599,599,599,599,599,599,599,599,599,599,599,599,599,599,599,599,599,599,599,599,599,599,599,599,599,599,599,599,599,
1247600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,600,
1248600,600,600,600,600,600,600,600,600,600,600,600,600,601,601,601,601,601,601,601,601,601,601,601,601,601,601,601,601,601,601,601,
1249601,601,601,601,601,601,601,601,601,601,601,601,601,601,601,601,601,601,601,601,601,601,601,601,601,601,602,602,602,602,602,602,
1250602,602,602,602,602,602,602,602,602,602,602,602,602,602,602,602,602,602,602,602,602,602,602,602,602,602,602,602,602,602,602,602,
1251602,602,602,602,602,602,602,603,603,603,603,603,603,603,603,603,603,603,603,603,603,603,603,603,603,603,603,603,603,603,603,603,
1252603,603,603,603,603,603,603,603,603,603,603,603,603,603,603,603,603,603,603,603,604,604,604,604,604,604,604,604,604,604,604,604,
1253604,604,604,604,604,604,604,604,604,604,604,604,604,604,604,604,604,604,604,604,604,604,604,604,604,604,604,604,604,604,604,604,
1254604,605,605,605,605,605,605,605,605,605,605,605,605,605,605,605,605,605,605,605,605,605,605,605,605,605,605,605,605,605,605,605,
1255605,605,605,605,605,605,605,605,605,605,605,605,605,605,606,606,606,606,606,606,606,606,606,606,606,606,606,606,606,606,606,606,
1256606,606,606,606,606,606,606,606,606,606,606,606,606,606,606,606,606,606,606,606,606,606,606,606,606,606,606,607,607,607,607,607,
1257607,607,607,607,607,607,607,607,607,607,607,607,607,607,607,607,607,607,607,607,607,607,607,607,607,607,607,607,607,607,607,607,
1258607,607,607,607,607,607,607,607,608,608,608,608,608,608,608,608,608,608,608,608,608,608,608,608,608,608,608,608,608,608,608,608,
1259608,608,608,608,608,608,608,608,608,608,608,608,608,608,608,608,608,608,608,608,608,609,609,609,609,609,609,609,609,609,609,609,
1260609,609,609,609,609,609,609,609,609,609,609,609,609,609,609,609,609,609,609,609,609,609,609,609,609,609,609,609,609,609,609,609,
1261609,609,609,610,610,610,610,610,610,610,610,610,610,610,610,610,610,610,610,610,610,610,610,610,610,610,610,610,610,610,610,610,
1262610,610,610,610,610,610,610,610,610,610,610,610,610,610,610,610,611,611,611,611,611,611,611,611,611,611,611,611,611,611,611,611,
1263611,611,611,611,611,611,611,611,611,611,611,611,611,611,611,611,611,611,611,611,611,611,611,611,611,611,611,611,611,612,612,612,
1264612,612,612,612,612,612,612,612,612,612,612,612,612,612,612,612,612,612,612,612,612,612,612,612,612,612,612,612,612,612,612,612,
1265612,612,612,612,612,612,612,612,612,612,613,613,613,613,613,613,613,613,613,613,613,613,613,613,613,613,613,613,613,613,613,613,
1266613,613,613,613,613,613,613,613,613,613,613,613,613,613,613,613,613,613,613,613,613,613,613,613,614,614,614,614,614,614,614,614,
1267614,614,614,614,614,614,614,614,614,614,614,614,614,614,614,614,614,614,614,614,614,614,614,614,614,614,614,614,614,614,614,614,
1268614,614,614,614,614,615,615,615,615,615,615,615,615,615,615,615,615,615,615,615,615,615,615,615,615,615,615,615,615,615,615,615,
1269615,615,615,615,615,615,615,615,615,615,615,615,615,615,615,615,615,615,616,616,616,616,616,616,616,616,616,616,616,616,616,616,
1270616,616,616,616,616,616,616,616,616,616,616,616,616,616,616,616,616,616,616,616,616,616,616,616,616,616,616,616,616,616,616,616,
1271617,617,617,617,617,617,617,617,617,617,617,617,617,617,617,617,617,617,617,617,617,617,617,617,617,617,617,617,617,617,617,617,
1272617,617,617,617,617,617,617,617,617,617,617,617,617,618,618,618,618,618,618,618,618,618,618,618,618,618,618,618,618,618,618,618,
1273618,618,618,618,618,618,618,618,618,618,618,618,618,618,618,618,618,618,618,618,618,618,618,618,618,618,618,619,619,619,619,619,
1274619,619,619,619,619,619,619,619,619,619,619,619,619,619,619,619,619,619,619,619,619,619,619,619,619,619,619,619,619,619,619,619,
1275619,619,619,619,619,619,619,619,620,620,620,620,620,620,620,620,620,620,620,620,620,620,620,620,620,620,620,620,620,620,620,620,
1276620,620,620,620,620,620,620,620,620,620,620,620,620,620,620,620,620,620,620,620,620,620,621,621,621,621,621,621,621,621,621,621,
1277621,621,621,621,621,621,621,621,621,621,621,621,621,621,621,621,621,621,621,621,621,621,621,621,621,621,621,621,621,621,621,621,
1278621,621,621,622,622,622,622,622,622,622,622,622,622,622,622,622,622,622,622,622,622,622,622,622,622,622,622,622,622,622,622,622,
1279622,622,622,622,622,622,622,622,622,622,622,622,622,622,622,622,622,623,623,623,623,623,623,623,623,623,623,623,623,623,623,623,
1280623,623,623,623,623,623,623,623,623,623,623,623,623,623,623,623,623,623,623,623,623,623,623,623,623,623,623,623,623,623,624,624,
1281624,624,624,624,624,624,624,624,624,624,624,624,624,624,624,624,624,624,624,624,624,624,624,624,624,624,624,624,624,624,624,624,
1282624,624,624,624,624,624,624,624,624,624,624,624,625,625,625,625,625,625,625,625,625,625,625,625,625,625,625,625,625,625,625,625,
1283625,625,625,625,625,625,625,625,625,625,625,625,625,625,625,625,625,625,625,625,625,625,625,625,625,626,626,626,626,626,626,626,
1284626,626,626,626,626,626,626,626,626,626,626,626,626,626,626,626,626,626,626,626,626,626,626,626,626,626,626,626,626,626,626,626,
1285626,626,626,626,626,626,626,627,627,627,627,627,627,627,627,627,627,627,627,627,627,627,627,627,627,627,627,627,627,627,627,627,
1286627,627,627,627,627,627,627,627,627,627,627,627,627,627,627,627,627,627,627,627,627,628,628,628,628,628,628,628,628,628,628,628,
1287628,628,628,628,628,628,628,628,628,628,628,628,628,628,628,628,628,628,628,628,628,628,628,628,628,628,628,628,628,628,628,628,
1288628,628,629,629,629,629,629,629,629,629,629,629,629,629,629,629,629,629,629,629,629,629,629,629,629,629,629,629,629,629,629,629,
1289629,629,629,629,629,629,629,629,629,629,629,629,629,629,629,629,630,630,630,630,630,630,630,630,630,630,630,630,630,630,630,630,
1290630,630,630,630,630,630,630,630,630,630,630,630,630,630,630,630,630,630,630,630,630,630,630,630,630,630,630,630,630,630,631,631,
1291631,631,631,631,631,631,631,631,631,631,631,631,631,631,631,631,631,631,631,631,631,631,631,631,631,631,631,631,631,631,631,631,
1292631,631,631,631,631,631,631,631,631,631,631,632,632,632,632,632,632,632,632,632,632,632,632,632,632,632,632,632,632,632,632,632,
1293632,632,632,632,632,632,632,632,632,632,632,632,632,632,632,632,632,632,632,632,632,632,632,632,632,633,633,633,633,633,633,633,
1294633,633,633,633,633,633,633,633,633,633,633,633,633,633,633,633,633,633,633,633,633,633,633,633,633,633,633,633,633,633,633,633,
1295633,633,633,633,633,633,633,634,634,634,634,634,634,634,634,634,634,634,634,634,634,634,634,634,634,634,634,634,634,634,634,634,
1296634,634,634,634,634,634,634,634,634,634,634,634,634,634,634,634,634,634,634,634,634,635,635,635,635,635,635,635,635,635,635,635,
1297635,635,635,635,635,635,635,635,635,635,635,635,635,635,635,635,635,635,635,635,635,635,635,635,635,635,635,635,635,635,635,635,
1298635,635,635,636,636,636,636,636,636,636,636,636,636,636,636,636,636,636,636,636,636,636,636,636,636,636,636,636,636,636,636,636,
1299636,636,636,636,636,636,636,636,636,636,636,636,636,636,636,636,636,637,637,637,637,637,637,637,637,637,637,637,637,637,637,637,
1300637,637,637,637,637,637,637,637,637,637,637,637,637,637,637,637,637,637,637,637,637,637,637,637,637,637,637,637,637,637,638,638,
1301638,638,638,638,638,638,638,638,638,638,638,638,638,638,638,638,638,638,638,638,638,638,638,638,638,638,638,638,638,638,638,638,
1302638,638,638,638,638,638,638,638,638,638,638,638,639,639,639,639,639,639,639,639,639,639,639,639,639,639,639,639,639,639,639,639,
1303639,639,639,639,639,639,639,639,639,639,639,639,639,639,639,639,639,639,639,639,639,639,639,639,639,639,640,640,640,640,640,640,
1304640,640,640,640,640,640,640,640,640,640,640,640,640,640,640,640,640,640,640,640,640,640,640,640,640,640,640,640,640,640,640,640,
1305640,640,640,640,640,640,640,640,641,641,641,641,641,641,641,641,641,641,641,641,641,641,641,641,641,641,641,641,641,641,641,641,
1306641,641,641,641,641,641,641,641,641,641,641,641,641,641,641,641,641,641,641,641,641,641,642,642,642,642,642,642,642,642,642,642,
1307642,642,642,642,642,642,642,642,642,642,642,642,642,642,642,642,642,642,642,642,642,642,642,642,642,642,642,642,642,642,642,642,
1308642,642,642,642,643,643,643,643,643,643,643,643,643,643,643,643,643,643,643,643,643,643,643,643,643,643,643,643,643,643,643,643,
1309643,643,643,643,643,643,643,643,643,643,643,643,643,643,643,643,643,643,644,644,644,644,644,644,644,644,644,644,644,644,644,644,
1310644,644,644,644,644,644,644,644,644,644,644,644,644,644,644,644,644,644,644,644,644,644,644,644,644,644,644,644,644,644,644,644,
1311645,645,645,645,645,645,645,645,645,645,645,645,645,645,645,645,645,645,645,645,645,645,645,645,645,645,645,645,645,645,645,645,
1312645,645,645,645,645,645,645,645,645,645,645,645,645,645,646,646,646,646,646,646,646,646,646,646,646,646,646,646,646,646,646,646,
1313646,646,646,646,646,646,646,646,646,646,646,646,646,646,646,646,646,646,646,646,646,646,646,646,646,646,646,646,646,647,647,647,
1314647,647,647,647,647,647,647,647,647,647,647,647,647,647,647,647,647,647,647,647,647,647,647,647,647,647,647,647,647,647,647,647,
1315647,647,647,647,647,647,647,647,647,647,647,648,648,648,648,648,648,648,648,648,648,648,648,648,648,648,648,648,648,648,648,648,
1316648,648,648,648,648,648,648,648,648,648,648,648,648,648,648,648,648,648,648,648,648,648,648,648,648,649,649,649,649,649,649,649,
1317649,649,649,649,649,649,649,649,649,649,649,649,649,649,649,649,649,649,649,649,649,649,649,649,649,649,649,649,649,649,649,649,
1318649,649,649,649,649,649,649,650,650,650,650,650,650,650,650,650,650,650,650,650,650,650,650,650,650,650,650,650,650,650,650,650,
1319650,650,650,650,650,650,650,650,650,650,650,650,650,650,650,650,650,650,650,650,650,651,651,651,651,651,651,651,651,651,651,651,
1320651,651,651,651,651,651,651,651,651,651,651,651,651,651,651,651,651,651,651,651,651,651,651,651,651,651,651,651,651,651,651,651,
1321651,651,651,652,652,652,652,652,652,652,652,652,652,652,652,652,652,652,652,652,652,652,652,652,652,652,652,652,652,652,652,652,
1322652,652,652,652,652,652,652,652,652,652,652,652,652,652,652,652,652,652,653,653,653,653,653,653,653,653,653,653,653,653,653,653,
1323653,653,653,653,653,653,653,653,653,653,653,653,653,653,653,653,653,653,653,653,653,653,653,653,653,653,653,653,653,653,653,653,
1324654,654,654,654,654,654,654,654,654,654,654,654,654,654,654,654,654,654,654,654,654,654,654,654,654,654,654,654,654,654,654,654,
1325654,654,654,654,654,654,654,654,654,654,654,654,654,654,655,655,655,655,655,655,655,655,655,655,655,655,655,655,655,655,655,655,
1326655,655,655,655,655,655,655,655,655,655,655,655,655,655,655,655,655,655,655,655,655,655,655,655,655,655,655,655,655,656,656,656,
1327656,656,656,656,656,656,656,656,656,656,656,656,656,656,656,656,656,656,656,656,656,656,656,656,656,656,656,656,656,656,656,656,
1328656,656,656,656,656,656,656,656,656,656,656,657,657,657,657,657,657,657,657,657,657,657,657,657,657,657,657,657,657,657,657,657,
1329657,657,657,657,657,657,657,657,657,657,657,657,657,657,657,657,657,657,657,657,657,657,657,657,657,658,658,658,658,658,658,658,
1330658,658,658,658,658,658,658,658,658,658,658,658,658,658,658,658,658,658,658,658,658,658,658,658,658,658,658,658,658,658,658,658,
1331658,658,658,658,658,658,658,658,659,659,659,659,659,659,659,659,659,659,659,659,659,659,659,659,659,659,659,659,659,659,659,659,
1332659,659,659,659,659,659,659,659,659,659,659,659,659,659,659,659,659,659,659,659,659,659,660,660,660,660,660,660,660,660,660,660,
1333660,660,660,660,660,660,660,660,660,660,660,660,660,660,660,660,660,660,660,660,660,660,660,660,660,660,660,660,660,660,660,660,
1334660,660,660,660,660,661,661,661,661,661,661,661,661,661,661,661,661,661,661,661,661,661,661,661,661,661,661,661,661,661,661,661,
1335661,661,661,661,661,661,661,661,661,661,661,661,661,661,661,661,661,661,661,662,662,662,662,662,662,662,662,662,662,662,662,662,
1336662,662,662,662,662,662,662,662,662,662,662,662,662,662,662,662,662,662,662,662,662,662,662,662,662,662,662,662,662,662,662,662,
1337662,663,663,663,663,663,663,663,663,663,663,663,663,663,663,663,663,663,663,663,663,663,663,663,663,663,663,663,663,663,663,663,
1338663,663,663,663,663,663,663,663,663,663,663,663,663,663,663,663,664,664,664,664,664,664,664,664,664,664,664,664,664,664,664,664,
1339664,664,664,664,664,664,664,664,664,664,664,664,664,664,664,664,664,664,664,664,664,664,664,664,664,664,664,664,664,664,664,665,
1340665,665,665,665,665,665,665,665,665,665,665,665,665,665,665,665,665,665,665,665,665,665,665,665,665,665,665,665,665,665,665,665,
1341665,665,665,665,665,665,665,665,665,665,665,665,665,666,666,666,666,666,666,666,666,666,666,666,666,666,666,666,666,666,666,666,
1342666,666,666,666,666,666,666,666,666,666,666,666,666,666,666,666,666,666,666,666,666,666,666,666,666,666,666,666,667,667,667,667,
1343667,667,667,667,667,667,667,667,667,667,667,667,667,667,667,667,667,667,667,667,667,667,667,667,667,667,667,667,667,667,667,667,
1344667,667,667,667,667,667,667,667,667,667,668,668,668,668,668,668,668,668,668,668,668,668,668,668,668,668,668,668,668,668,668,668,
1345668,668,668,668,668,668,668,668,668,668,668,668,668,668,668,668,668,668,668,668,668,668,668,668,668,669,669,669,669,669,669,669,
1346669,669,669,669,669,669,669,669,669,669,669,669,669,669,669,669,669,669,669,669,669,669,669,669,669,669,669,669,669,669,669,669,
1347669,669,669,669,669,669,669,669,670,670,670,670,670,670,670,670,670,670,670,670,670,670,670,670,670,670,670,670,670,670,670,670,
1348670,670,670,670,670,670,670,670,670,670,670,670,670,670,670,670,670,670,670,670,670,670,671,671,671,671,671,671,671,671,671,671,
1349671,671,671,671,671,671,671,671,671,671,671,671,671,671,671,671,671,671,671,671,671,671,671,671,671,671,671,671,671,671,671,671,
1350671,671,671,671,671,672,672,672,672,672,672,672,672,672,672,672,672,672,672,672,672,672,672,672,672,672,672,672,672,672,672,672,
1351672,672,672,672,672,672,672,672,672,672,672,672,672,672,672,672,672,672,672,672,673,673,673,673,673,673,673,673,673,673,673,673,
1352673,673,673,673,673,673,673,673,673,673,673,673,673,673,673,673,673,673,673,673,673,673,673,673,673,673,673,673,673,673,673,673,
1353673,673,674,674,674,674,674,674,674,674,674,674,674,674,674,674,674,674,674,674,674,674,674,674,674,674,674,674,674,674,674,674,
1354674,674,674,674,674,674,674,674,674,674,674,674,674,674,674,674,674,675,675,675,675,675,675,675,675,675,675,675,675,675,675,675,
1355675,675,675,675,675,675,675,675,675,675,675,675,675,675,675,675,675,675,675,675,675,675,675,675,675,675,675,675,675,675,675,675,
1356676,676,676,676,676,676,676,676,676,676,676,676,676,676,676,676,676,676,676,676,676,676,676,676,676,676,676,676,676,676,676,676,
1357676,676,676,676,676,676,676,676,676,676,676,676,676,676,676,677,677,677,677,677,677,677,677,677,677,677,677,677,677,677,677,677,
1358677,677,677,677,677,677,677,677,677,677,677,677,677,677,677,677,677,677,677,677,677,677,677,677,677,677,677,677,677,677,678,678,
1359678,678,678,678,678,678,678,678,678,678,678,678,678,678,678,678,678,678,678,678,678,678,678,678,678,678,678,678,678,678,678,678,
1360678,678,678,678,678,678,678,678,678,678,678,678,679,679,679,679,679,679,679,679,679,679,679,679,679,679,679,679,679,679,679,679,
1361679,679,679,679,679,679,679,679,679,679,679,679,679,679,679,679,679,679,679,679,679,679,679,679,679,679,679,680,680,680,680,680,
1362680,680,680,680,680,680,680,680,680,680,680,680,680,680,680,680,680,680,680,680,680,680,680,680,680,680,680,680,680,680,680,680,
1363680,680,680,680,680,680,680,680,680,680,681,681,681,681,681,681,681,681,681,681,681,681,681,681,681,681,681,681,681,681,681,681,
1364681,681,681,681,681,681,681,681,681,681,681,681,681,681,681,681,681,681,681,681,681,681,681,681,681,682,682,682,682,682,682,682,
1365682,682,682,682,682,682,682,682,682,682,682,682,682,682,682,682,682,682,682,682,682,682,682,682,682,682,682,682,682,682,682,682,
1366682,682,682,682,682,682,682,682,683,683,683,683,683,683,683,683,683,683,683,683,683,683,683,683,683,683,683,683,683,683,683,683,
1367683,683,683,683,683,683,683,683,683,683,683,683,683,683,683,683,683,683,683,683,683,683,683,684,684,684,684,684,684,684,684,684,
1368684,684,684,684,684,684,684,684,684,684,684,684,684,684,684,684,684,684,684,684,684,684,684,684,684,684,684,684,684,684,684,684,
1369684,684,684,684,684,684,685,685,685,685,685,685,685,685,685,685,685,685,685,685,685,685,685,685,685,685,685,685,685,685,685,685,
1370685,685,685,685,685,685,685,685,685,685,685,685,685,685,685,685,685,685,685,685,685,686,686,686,686,686,686,686,686,686,686,686,
1371686,686,686,686,686,686,686,686,686,686,686,686,686,686,686,686,686,686,686,686,686,686,686,686,686,686,686,686,686,686,686,686,
1372686,686,686,686,687,687,687,687,687,687,687,687,687,687,687,687,687,687,687,687,687,687,687,687,687,687,687,687,687,687,687,687,
1373687,687,687,687,687,687,687,687,687,687,687,687,687,687,687,687,687,687,687,688,688,688,688,688,688,688,688,688,688,688,688,688,
1374688,688,688,688,688,688,688,688,688,688,688,688,688,688,688,688,688,688,688,688,688,688,688,688,688,688,688,688,688,688,688,688,
1375688,688,689,689,689,689,689,689,689,689,689,689,689,689,689,689,689,689,689,689,689,689,689,689,689,689,689,689,689,689,689,689,
1376689,689,689,689,689,689,689,689,689,689,689,689,689,689,689,689,689,690,690,690,690,690,690,690,690,690,690,690,690,690,690,690,
1377690,690,690,690,690,690,690,690,690,690,690,690,690,690,690,690,690,690,690,690,690,690,690,690,690,690,690,690,690,690,690,690,
1378691,691,691,691,691,691,691,691,691,691,691,691,691,691,691,691,691,691,691,691,691,691,691,691,691,691,691,691,691,691,691,691,
1379691,691,691,691,691,691,691,691,691,691,691,691,691,691,691,691,692,692,692,692,692,692,692,692,692,692,692,692,692,692,692,692,
1380692,692,692,692,692,692,692,692,692,692,692,692,692,692,692,692,692,692,692,692,692,692,692,692,692,692,692,692,692,692,692,693,
1381693,693,693,693,693,693,693,693,693,693,693,693,693,693,693,693,693,693,693,693,693,693,693,693,693,693,693,693,693,693,693,693,
1382693,693,693,693,693,693,693,693,693,693,693,693,693,693,694,694,694,694,694,694,694,694,694,694,694,694,694,694,694,694,694,694,
1383694,694,694,694,694,694,694,694,694,694,694,694,694,694,694,694,694,694,694,694,694,694,694,694,694,694,694,694,694,695,695,695,
1384695,695,695,695,695,695,695,695,695,695,695,695,695,695,695,695,695,695,695,695,695,695,695,695,695,695,695,695,695,695,695,695,
1385695,695,695,695,695,695,695,695,695,695,695,695,696,696,696,696,696,696,696,696,696,696,696,696,696,696,696,696,696,696,696,696,
1386696,696,696,696,696,696,696,696,696,696,696,696,696,696,696,696,696,696,696,696,696,696,696,696,696,696,696,696,697,697,697,697,
1387697,697,697,697,697,697,697,697,697,697,697,697,697,697,697,697,697,697,697,697,697,697,697,697,697,697,697,697,697,697,697,697,
1388697,697,697,697,697,697,697,697,697,697,697,698,698,698,698,698,698,698,698,698,698,698,698,698,698,698,698,698,698,698,698,698,
1389698,698,698,698,698,698,698,698,698,698,698,698,698,698,698,698,698,698,698,698,698,698,698,698,698,698,699,699,699,699,699,699,
1390699,699,699,699,699,699,699,699,699,699,699,699,699,699,699,699,699,699,699,699,699,699,699,699,699,699,699,699,699,699,699,699,
1391699,699,699,699,699,699,699,699,699,699,700,700,700,700,700,700,700,700,700,700,700,700,700,700,700,700,700,700,700,700,700,700,
1392700,700,700,700,700,700,700,700,700,700,700,700,700,700,700,700,700,700,700,700,700,700,700,700,700,701,701,701,701,701,701,701,
1393701,701,701,701,701,701,701,701,701,701,701,701,701,701,701,701,701,701,701,701,701,701,701,701,701,701,701,701,701,701,701,701,
1394701,701,701,701,701,701,701,701,702,702,702,702,702,702,702,702,702,702,702,702,702,702,702,702,702,702,702,702,702,702,702,702,
1395702,702,702,702,702,702,702,702,702,702,702,702,702,702,702,702,702,702,702,702,702,702,702,702,703,703,703,703,703,703,703,703,
1396703,703,703,703,703,703,703,703,703,703,703,703,703,703,703,703,703,703,703,703,703,703,703,703,703,703,703,703,703,703,703,703,
1397703,703,703,703,703,703,703,704,704,704,704,704,704,704,704,704,704,704,704,704,704,704,704,704,704,704,704,704,704,704,704,704,
1398704,704,704,704,704,704,704,704,704,704,704,704,704,704,704,704,704,704,704,704,704,704,704,705,705,705,705,705,705,705,705,705,
1399705,705,705,705,705,705,705,705,705,705,705,705,705,705,705,705,705,705,705,705,705,705,705,705,705,705,705,705,705,705,705,705,
1400705,705,705,705,705,705,706,706,706,706,706,706,706,706,706,706,706,706,706,706,706,706,706,706,706,706,706,706,706,706,706,706,
1401706,706,706,706,706,706,706,706,706,706,706,706,706,706,706,706,706,706,706,706,706,706,707,707,707,707,707,707,707,707,707,707,
1402707,707,707,707,707,707,707,707,707,707,707,707,707,707,707,707,707,707,707,707,707,707,707,707,707,707,707,707,707,707,707,707,
1403707,707,707,707,707,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,
1404708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,708,709,709,709,709,709,709,709,709,709,709,709,
1405709,709,709,709,709,709,709,709,709,709,709,709,709,709,709,709,709,709,709,709,709,709,709,709,709,709,709,709,709,709,709,709,
1406709,709,709,709,710,710,710,710,710,710,710,710,710,710,710,710,710,710,710,710,710,710,710,710,710,710,710,710,710,710,710,710,
1407710,710,710,710,710,710,710,710,710,710,710,710,710,710,710,710,710,710,710,710,711,711,711,711,711,711,711,711,711,711,711,711,
1408711,711,711,711,711,711,711,711,711,711,711,711,711,711,711,711,711,711,711,711,711,711,711,711,711,711,711,711,711,711,711,711,
1409711,711,711,712,712,712,712,712,712,712,712,712,712,712,712,712,712,712,712,712,712,712,712,712,712,712,712,712,712,712,712,712,
1410712,712,712,712,712,712,712,712,712,712,712,712,712,712,712,712,712,712,712,713,713,713,713,713,713,713,713,713,713,713,713,713,
1411713,713,713,713,713,713,713,713,713,713,713,713,713,713,713,713,713,713,713,713,713,713,713,713,713,713,713,713,713,713,713,713,
1412713,713,713,714,714,714,714,714,714,714,714,714,714,714,714,714,714,714,714,714,714,714,714,714,714,714,714,714,714,714,714,714,
1413714,714,714,714,714,714,714,714,714,714,714,714,714,714,714,714,714,714,715,715,715,715,715,715,715,715,715,715,715,715,715,715,
1414715,715,715,715,715,715,715,715,715,715,715,715,715,715,715,715,715,715,715,715,715,715,715,715,715,715,715,715,715,715,715,715,
1415715,715,716,716,716,716,716,716,716,716,716,716,716,716,716,716,716,716,716,716,716,716,716,716,716,716,716,716,716,716,716,716,
1416716,716,716,716,716,716,716,716,716,716,716,716,716,716,716,716,716,716,717,717,717,717,717,717,717,717,717,717,717,717,717,717,
1417717,717,717,717,717,717,717,717,717,717,717,717,717,717,717,717,717,717,717,717,717,717,717,717,717,717,717,717,717,717,717,717,
1418717,718,718,718,718,718,718,718,718,718,718,718,718,718,718,718,718,718,718,718,718,718,718,718,718,718,718,718,718,718,718,718,
1419718,718,718,718,718,718,718,718,718,718,718,718,718,718,718,718,718,719,719,719,719,719,719,719,719,719,719,719,719,719,719,719,
1420719,719,719,719,719,719,719,719,719,719,719,719,719,719,719,719,719,719,719,719,719,719,719,719,719,719,719,719,719,719,719,719,
1421719,720,720,720,720,720,720,720,720,720,720,720,720,720,720,720,720,720,720,720,720,720,720,720,720,720,720,720,720,720,720,720,
1422720,720,720,720,720,720,720,720,720,720,720,720,720,720,720,720,720,721,721,721,721,721,721,721,721,721,721,721,721,721,721,721,
1423721,721,721,721,721,721,721,721,721,721,721,721,721,721,721,721,721,721,721,721,721,721,721,721,721,721,721,721,721,721,721,721,
1424721,722,722,722,722,722,722,722,722,722,722,722,722,722,722,722,722,722,722,722,722,722,722,722,722,722,722,722,722,722,722,722,
1425722,722,722,722,722,722,722,722,722,722,722,722,722,722,722,722,722,723,723,723,723,723,723,723,723,723,723,723,723,723,723,723,
1426723,723,723,723,723,723,723,723,723,723,723,723,723,723,723,723,723,723,723,723,723,723,723,723,723,723,723,723,723,723,723,723,
1427724,724,724,724,724,724,724,724,724,724,724,724,724,724,724,724,724,724,724,724,724,724,724,724,724,724,724,724,724,724,724,724,
1428724,724,724,724,724,724,724,724,724,724,724,724,724,724,724,724,725,725,725,725,725,725,725,725,725,725,725,725,725,725,725,725,
1429725,725,725,725,725,725,725,725,725,725,725,725,725,725,725,725,725,725,725,725,725,725,725,725,725,725,725,725,725,725,725,725,
1430726,726,726,726,726,726,726,726,726,726,726,726,726,726,726,726,726,726,726,726,726,726,726,726,726,726,726,726,726,726,726,726,
1431726,726,726,726,726,726,726,726,726,726,726,726,726,726,726,726,727,727,727,727,727,727,727,727,727,727,727,727,727,727,727,727,
1432727,727,727,727,727,727,727,727,727,727,727,727,727,727,727,727,727,727,727,727,727,727,727,727,727,727,727,727,727,727,727,727,
1433728,728,728,728,728,728,728,728,728,728,728,728,728,728,728,728,728,728,728,728,728,728,728,728,728,728,728,728,728,728,728,728,
1434728,728,728,728,728,728,728,728,728,728,728,728,728,728,728,728,729,729,729,729,729,729,729,729,729,729,729,729,729,729,729,729,
1435729,729,729,729,729,729,729,729,729,729,729,729,729,729,729,729,729,729,729,729,729,729,729,729,729,729,729,729,729,729,729,729,
1436730,730,730,730,730,730,730,730,730,730,730,730,730,730,730,730,730,730,730,730,730,730,730,730,730,730,730,730,730,730,730,730,
1437730,730,730,730,730,730,730,730,730,730,730,730,730,730,730,730,731,731,731,731,731,731,731,731,731,731,731,731,731,731,731,731,
1438731,731,731,731,731,731,731,731,731,731,731,731,731,731,731,731,731,731,731,731,731,731,731,731,731,731,731,731,731,731,731,731,
1439732,732,732,732,732,732,732,732,732,732,732,732,732,732,732,732,732,732,732,732,732,732,732,732,732,732,732,732,732,732,732,732,
1440732,732,732,732,732,732,732,732,732,732,732,732,732,732,732,732,733,733,733,733,733,733,733,733,733,733,733,733,733,733,733,733,
1441733,733,733,733,733,733,733,733,733,733,733,733,733,733,733,733,733,733,733,733,733,733,733,733,733,733,733,733,733,733,733,733,
1442734,734,734,734,734,734,734,734,734,734,734,734,734,734,734,734,734,734,734,734,734,734,734,734,734,734,734,734,734,734,734,734,
1443734,734,734,734,734,734,734,734,734,734,734,734,734,734,734,734,735,735,735,735,735,735,735,735,735,735,735,735,735,735,735,735,
1444735,735,735,735,735,735,735,735,735,735,735,735,735,735,735,735,735,735,735,735,735,735,735,735,735,735,735,735,735,735,735,735,
1445735,736,736,736,736,736,736,736,736,736,736,736,736,736,736,736,736,736,736,736,736,736,736,736,736,736,736,736,736,736,736,736,
1446736,736,736,736,736,736,736,736,736,736,736,736,736,736,736,736,736,737,737,737,737,737,737,737,737,737,737,737,737,737,737,737,
1447737,737,737,737,737,737,737,737,737,737,737,737,737,737,737,737,737,737,737,737,737,737,737,737,737,737,737,737,737,737,737,737,
1448737,738,738,738,738,738,738,738,738,738,738,738,738,738,738,738,738,738,738,738,738,738,738,738,738,738,738,738,738,738,738,738,
1449738,738,738,738,738,738,738,738,738,738,738,738,738,738,738,738,738,739,739,739,739,739,739,739,739,739,739,739,739,739,739,739,
1450739,739,739,739,739,739,739,739,739,739,739,739,739,739,739,739,739,739,739,739,739,739,739,739,739,739,739,739,739,739,739,739,
1451739,740,740,740,740,740,740,740,740,740,740,740,740,740,740,740,740,740,740,740,740,740,740,740,740,740,740,740,740,740,740,740,
1452740,740,740,740,740,740,740,740,740,740,740,740,740,740,740,740,740,740,741,741,741,741,741,741,741,741,741,741,741,741,741,741,
1453741,741,741,741,741,741,741,741,741,741,741,741,741,741,741,741,741,741,741,741,741,741,741,741,741,741,741,741,741,741,741,741,
1454741,741,742,742,742,742,742,742,742,742,742,742,742,742,742,742,742,742,742,742,742,742,742,742,742,742,742,742,742,742,742,742,
1455742,742,742,742,742,742,742,742,742,742,742,742,742,742,742,742,742,742,743,743,743,743,743,743,743,743,743,743,743,743,743,743,
1456743,743,743,743,743,743,743,743,743,743,743,743,743,743,743,743,743,743,743,743,743,743,743,743,743,743,743,743,743,743,743,743,
1457743,743,744,744,744,744,744,744,744,744,744,744,744,744,744,744,744,744,744,744,744,744,744,744,744,744,744,744,744,744,744,744,
1458744,744,744,744,744,744,744,744,744,744,744,744,744,744,744,744,744,744,744,745,745,745,745,745,745,745,745,745,745,745,745,745,
1459745,745,745,745,745,745,745,745,745,745,745,745,745,745,745,745,745,745,745,745,745,745,745,745,745,745,745,745,745,745,745,745,
1460745,745,745,746,746,746,746,746,746,746,746,746,746,746,746,746,746,746,746,746,746,746,746,746,746,746,746,746,746,746,746,746,
1461746,746,746,746,746,746,746,746,746,746,746,746,746,746,746,746,746,746,746,747,747,747,747,747,747,747,747,747,747,747,747,747,
1462747,747,747,747,747,747,747,747,747,747,747,747,747,747,747,747,747,747,747,747,747,747,747,747,747,747,747,747,747,747,747,747,
1463747,747,747,747,748,748,748,748,748,748,748,748,748,748,748,748,748,748,748,748,748,748,748,748,748,748,748,748,748,748,748,748,
1464748,748,748,748,748,748,748,748,748,748,748,748,748,748,748,748,748,748,748,748,749,749,749,749,749,749,749,749,749,749,749,749,
1465749,749,749,749,749,749,749,749,749,749,749,749,749,749,749,749,749,749,749,749,749,749,749,749,749,749,749,749,749,749,749,749,
1466749,749,749,749,749,750,750,750,750,750,750,750,750,750,750,750,750,750,750,750,750,750,750,750,750,750,750,750,750,750,750,750,
1467750,750,750,750,750,750,750,750,750,750,750,750,750,750,750,750,750,750,750,750,750,751,751,751,751,751,751,751,751,751,751,751,
1468751,751,751,751,751,751,751,751,751,751,751,751,751,751,751,751,751,751,751,751,751,751,751,751,751,751,751,751,751,751,751,751,
1469751,751,751,751,751,751,752,752,752,752,752,752,752,752,752,752,752,752,752,752,752,752,752,752,752,752,752,752,752,752,752,752,
1470752,752,752,752,752,752,752,752,752,752,752,752,752,752,752,752,752,752,752,752,752,752,753,753,753,753,753,753,753,753,753,753,
1471753,753,753,753,753,753,753,753,753,753,753,753,753,753,753,753,753,753,753,753,753,753,753,753,753,753,753,753,753,753,753,753,
1472753,753,753,753,753,753,753,754,754,754,754,754,754,754,754,754,754,754,754,754,754,754,754,754,754,754,754,754,754,754,754,754,
1473754,754,754,754,754,754,754,754,754,754,754,754,754,754,754,754,754,754,754,754,754,754,754,755,755,755,755,755,755,755,755,755,
1474755,755,755,755,755,755,755,755,755,755,755,755,755,755,755,755,755,755,755,755,755,755,755,755,755,755,755,755,755,755,755,755,
1475755,755,755,755,755,755,755,755,756,756,756,756,756,756,756,756,756,756,756,756,756,756,756,756,756,756,756,756,756,756,756,756,
1476756,756,756,756,756,756,756,756,756,756,756,756,756,756,756,756,756,756,756,756,756,756,756,756,757,757,757,757,757,757,757,757,
1477757,757,757,757,757,757,757,757,757,757,757,757,757,757,757,757,757,757,757,757,757,757,757,757,757,757,757,757,757,757,757,757,
1478757,757,757,757,757,757,757,757,757,758,758,758,758,758,758,758,758,758,758,758,758,758,758,758,758,758,758,758,758,758,758,758,
1479758,758,758,758,758,758,758,758,758,758,758,758,758,758,758,758,758,758,758,758,758,758,758,758,758,758,759,759,759,759,759,759,
1480759,759,759,759,759,759,759,759,759,759,759,759,759,759,759,759,759,759,759,759,759,759,759,759,759,759,759,759,759,759,759,759,
1481759,759,759,759,759,759,759,759,759,759,760,760,760,760,760,760,760,760,760,760,760,760,760,760,760,760,760,760,760,760,760,760,
1482760,760,760,760,760,760,760,760,760,760,760,760,760,760,760,760,760,760,760,760,760,760,760,760,760,760,760,761,761,761,761,761,
1483761,761,761,761,761,761,761,761,761,761,761,761,761,761,761,761,761,761,761,761,761,761,761,761,761,761,761,761,761,761,761,761,
1484761,761,761,761,761,761,761,761,761,761,761,761,762,762,762,762,762,762,762,762,762,762,762,762,762,762,762,762,762,762,762,762,
1485762,762,762,762,762,762,762,762,762,762,762,762,762,762,762,762,762,762,762,762,762,762,762,762,762,762,762,762,763,763,763,763,
1486763,763,763,763,763,763,763,763,763,763,763,763,763,763,763,763,763,763,763,763,763,763,763,763,763,763,763,763,763,763,763,763,
1487763,763,763,763,763,763,763,763,763,763,763,763,763,764,764,764,764,764,764,764,764,764,764,764,764,764,764,764,764,764,764,764,
1488764,764,764,764,764,764,764,764,764,764,764,764,764,764,764,764,764,764,764,764,764,764,764,764,764,764,764,764,764,764,765,765,
1489765,765,765,765,765,765,765,765,765,765,765,765,765,765,765,765,765,765,765,765,765,765,765,765,765,765,765,765,765,765,765,765,
1490765,765,765,765,765,765,765,765,765,765,765,765,765,765,765,766,766,766,766,766,766,766,766,766,766,766,766,766,766,766,766,766,
1491766,766,766,766,766,766,766,766,766,766,766,766,766,766,766,766,766,766,766,766,766,766,766,766,766,766,766,766,766,766,766,767,
1492767,767,767,767,767,767,767,767,767,767,767,767,767,767,767,767,767,767,767,767,767,767,767,767,767,767,767,767,767,767,767,767,
1493767,767,767,767,767,767,767,767,767,767,767,767,767,767,767,767,768,768,768,768,768,768,768,768,768,768,768,768,768,768,768,768,
1494768,768,768,768,768,768,768,768,768,768,768,768,768,768,768,768,768,768,768,768,768,768,768,768,768,768,768,768,768,768,768,768,
1495768,769,769,769,769,769,769,769,769,769,769,769,769,769,769,769,769,769,769,769,769,769,769,769,769,769,769,769,769,769,769,769,
1496769,769,769,769,769,769,769,769,769,769,769,769,769,769,769,769,769,769,770,770,770,770,770,770,770,770,770,770,770,770,770,770,
1497770,770,770,770,770,770,770,770,770,770,770,770,770,770,770,770,770,770,770,770,770,770,770,770,770,770,770,770,770,770,770,770,
1498770,770,770,771,771,771,771,771,771,771,771,771,771,771,771,771,771,771,771,771,771,771,771,771,771,771,771,771,771,771,771,771,
1499771,771,771,771,771,771,771,771,771,771,771,771,771,771,771,771,771,771,771,771,772,772,772,772,772,772,772,772,772,772,772,772,
1500772,772,772,772,772,772,772,772,772,772,772,772,772,772,772,772,772,772,772,772,772,772,772,772,772,772,772,772,772,772,772,772,
1501772,772,772,772,772,773,773,773,773,773,773,773,773,773,773,773,773,773,773,773,773,773,773,773,773,773,773,773,773,773,773,773,
1502773,773,773,773,773,773,773,773,773,773,773,773,773,773,773,773,773,773,773,773,773,773,774,774,774,774,774,774,774,774,774,774,
1503774,774,774,774,774,774,774,774,774,774,774,774,774,774,774,774,774,774,774,774,774,774,774,774,774,774,774,774,774,774,774,774,
1504774,774,774,774,774,774,774,775,775,775,775,775,775,775,775,775,775,775,775,775,775,775,775,775,775,775,775,775,775,775,775,775,
1505775,775,775,775,775,775,775,775,775,775,775,775,775,775,775,775,775,775,775,775,775,775,775,775,776,776,776,776,776,776,776,776,
1506776,776,776,776,776,776,776,776,776,776,776,776,776,776,776,776,776,776,776,776,776,776,776,776,776,776,776,776,776,776,776,776,
1507776,776,776,776,776,776,776,776,776,777,777,777,777,777,777,777,777,777,777,777,777,777,777,777,777,777,777,777,777,777,777,777,
1508777,777,777,777,777,777,777,777,777,777,777,777,777,777,777,777,777,777,777,777,777,777,777,777,777,777,778,778,778,778,778,778,
1509778,778,778,778,778,778,778,778,778,778,778,778,778,778,778,778,778,778,778,778,778,778,778,778,778,778,778,778,778,778,778,778,
1510778,778,778,778,778,778,778,778,778,778,778,779,779,779,779,779,779,779,779,779,779,779,779,779,779,779,779,779,779,779,779,779,
1511779,779,779,779,779,779,779,779,779,779,779,779,779,779,779,779,779,779,779,779,779,779,779,779,779,779,779,779,780,780,780,780,
1512780,780,780,780,780,780,780,780,780,780,780,780,780,780,780,780,780,780,780,780,780,780,780,780,780,780,780,780,780,780,780,780,
1513780,780,780,780,780,780,780,780,780,780,780,780,780,781,781,781,781,781,781,781,781,781,781,781,781,781,781,781,781,781,781,781,
1514781,781,781,781,781,781,781,781,781,781,781,781,781,781,781,781,781,781,781,781,781,781,781,781,781,781,781,781,781,781,782,782,
1515782,782,782,782,782,782,782,782,782,782,782,782,782,782,782,782,782,782,782,782,782,782,782,782,782,782,782,782,782,782,782,782,
1516782,782,782,782,782,782,782,782,782,782,782,782,782,782,782,783,783,783,783,783,783,783,783,783,783,783,783,783,783,783,783,783,
1517783,783,783,783,783,783,783,783,783,783,783,783,783,783,783,783,783,783,783,783,783,783,783,783,783,783,783,783,783,783,783,783,
1518784,784,784,784,784,784,784,784,784,784,784,784,784,784,784,784,784,784,784,784,784,784,784,784,784,784,784,784,784,784,784,784,
1519784,784,784,784,784,784,784,784,784,784,784,784,784,784,784,784,784,785,785,785,785,785,785,785,785,785,785,785,785,785,785,785,
1520785,785,785,785,785,785,785,785,785,785,785,785,785,785,785,785,785,785,785,785,785,785,785,785,785,785,785,785,785,785,785,785,
1521785,785,785,786,786,786,786,786,786,786,786,786,786,786,786,786,786,786,786,786,786,786,786,786,786,786,786,786,786,786,786,786,
1522786,786,786,786,786,786,786,786,786,786,786,786,786,786,786,786,786,786,786,786,787,787,787,787,787,787,787,787,787,787,787,787,
1523787,787,787,787,787,787,787,787,787,787,787,787,787,787,787,787,787,787,787,787,787,787,787,787,787,787,787,787,787,787,787,787,
1524787,787,787,787,787,788,788,788,788,788,788,788,788,788,788,788,788,788,788,788,788,788,788,788,788,788,788,788,788,788,788,788,
1525788,788,788,788,788,788,788,788,788,788,788,788,788,788,788,788,788,788,788,788,788,788,789,789,789,789,789,789,789,789,789,789,
1526789,789,789,789,789,789,789,789,789,789,789,789,789,789,789,789,789,789,789,789,789,789,789,789,789,789,789,789,789,789,789,789,
1527789,789,789,789,789,789,789,789,790,790,790,790,790,790,790,790,790,790,790,790,790,790,790,790,790,790,790,790,790,790,790,790,
1528790,790,790,790,790,790,790,790,790,790,790,790,790,790,790,790,790,790,790,790,790,790,790,790,790,791,791,791,791,791,791,791,
1529791,791,791,791,791,791,791,791,791,791,791,791,791,791,791,791,791,791,791,791,791,791,791,791,791,791,791,791,791,791,791,791,
1530791,791,791,791,791,791,791,791,791,791,792,792,792,792,792,792,792,792,792,792,792,792,792,792,792,792,792,792,792,792,792,792,
1531792,792,792,792,792,792,792,792,792,792,792,792,792,792,792,792,792,792,792,792,792,792,792,792,792,792,792,792,793,793,793,793,
1532793,793,793,793,793,793,793,793,793,793,793,793,793,793,793,793,793,793,793,793,793,793,793,793,793,793,793,793,793,793,793,793,
1533793,793,793,793,793,793,793,793,793,793,793,793,793,794,794,794,794,794,794,794,794,794,794,794,794,794,794,794,794,794,794,794,
1534794,794,794,794,794,794,794,794,794,794,794,794,794,794,794,794,794,794,794,794,794,794,794,794,794,794,794,794,794,794,795,795,
1535795,795,795,795,795,795,795,795,795,795,795,795,795,795,795,795,795,795,795,795,795,795,795,795,795,795,795,795,795,795,795,795,
1536795,795,795,795,795,795,795,795,795,795,795,795,795,795,795,795,796,796,796,796,796,796,796,796,796,796,796,796,796,796,796,796,
1537796,796,796,796,796,796,796,796,796,796,796,796,796,796,796,796,796,796,796,796,796,796,796,796,796,796,796,796,796,796,796,796,
1538796,797,797,797,797,797,797,797,797,797,797,797,797,797,797,797,797,797,797,797,797,797,797,797,797,797,797,797,797,797,797,797,
1539797,797,797,797,797,797,797,797,797,797,797,797,797,797,797,797,797,797,797,798,798,798,798,798,798,798,798,798,798,798,798,798,
1540798,798,798,798,798,798,798,798,798,798,798,798,798,798,798,798,798,798,798,798,798,798,798,798,798,798,798,798,798,798,798,798,
1541798,798,798,798,799,799,799,799,799,799,799,799,799,799,799,799,799,799,799,799,799,799,799,799,799,799,799,799,799,799,799,799,
1542799,799,799,799,799,799,799,799,799,799,799,799,799,799,799,799,799,799,799,799,799,799,800,800,800,800,800,800,800,800,800,800,
1543800,800,800,800,800,800,800,800,800,800,800,800,800,800,800,800,800,800,800,800,800,800,800,800,800,800,800,800,800,800,800,800,
1544800,800,800,800,800,800,800,801,801,801,801,801,801,801,801,801,801,801,801,801,801,801,801,801,801,801,801,801,801,801,801,801,
1545801,801,801,801,801,801,801,801,801,801,801,801,801,801,801,801,801,801,801,801,801,801,801,801,801,802,802,802,802,802,802,802,
1546802,802,802,802,802,802,802,802,802,802,802,802,802,802,802,802,802,802,802,802,802,802,802,802,802,802,802,802,802,802,802,802,
1547802,802,802,802,802,802,802,802,802,802,803,803,803,803,803,803,803,803,803,803,803,803,803,803,803,803,803,803,803,803,803,803,
1548803,803,803,803,803,803,803,803,803,803,803,803,803,803,803,803,803,803,803,803,803,803,803,803,803,803,803,803,804,804,804,804,
1549804,804,804,804,804,804,804,804,804,804,804,804,804,804,804,804,804,804,804,804,804,804,804,804,804,804,804,804,804,804,804,804,
1550804,804,804,804,804,804,804,804,804,804,804,804,804,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,
1551805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,805,806,
1552806,806,806,806,806,806,806,806,806,806,806,806,806,806,806,806,806,806,806,806,806,806,806,806,806,806,806,806,806,806,806,806,
1553806,806,806,806,806,806,806,806,806,806,806,806,806,806,806,806,806,807,807,807,807,807,807,807,807,807,807,807,807,807,807,807,
1554807,807,807,807,807,807,807,807,807,807,807,807,807,807,807,807,807,807,807,807,807,807,807,807,807,807,807,807,807,807,807,807,
1555807,807,808,808,808,808,808,808,808,808,808,808,808,808,808,808,808,808,808,808,808,808,808,808,808,808,808,808,808,808,808,808,
1556808,808,808,808,808,808,808,808,808,808,808,808,808,808,808,808,808,808,808,808,809,809,809,809,809,809,809,809,809,809,809,809,
1557809,809,809,809,809,809,809,809,809,809,809,809,809,809,809,809,809,809,809,809,809,809,809,809,809,809,809,809,809,809,809,809,
1558809,809,809,809,809,809,810,810,810,810,810,810,810,810,810,810,810,810,810,810,810,810,810,810,810,810,810,810,810,810,810,810,
1559810,810,810,810,810,810,810,810,810,810,810,810,810,810,810,810,810,810,810,810,810,810,810,811,811,811,811,811,811,811,811,811,
1560811,811,811,811,811,811,811,811,811,811,811,811,811,811,811,811,811,811,811,811,811,811,811,811,811,811,811,811,811,811,811,811,
1561811,811,811,811,811,811,811,811,811,812,812,812,812,812,812,812,812,812,812,812,812,812,812,812,812,812,812,812,812,812,812,812,
1562812,812,812,812,812,812,812,812,812,812,812,812,812,812,812,812,812,812,812,812,812,812,812,812,812,812,812,813,813,813,813,813,
1563813,813,813,813,813,813,813,813,813,813,813,813,813,813,813,813,813,813,813,813,813,813,813,813,813,813,813,813,813,813,813,813,
1564813,813,813,813,813,813,813,813,813,813,813,813,813,814,814,814,814,814,814,814,814,814,814,814,814,814,814,814,814,814,814,814,
1565814,814,814,814,814,814,814,814,814,814,814,814,814,814,814,814,814,814,814,814,814,814,814,814,814,814,814,814,814,814,815,815,
1566815,815,815,815,815,815,815,815,815,815,815,815,815,815,815,815,815,815,815,815,815,815,815,815,815,815,815,815,815,815,815,815,
1567815,815,815,815,815,815,815,815,815,815,815,815,815,815,815,815,816,816,816,816,816,816,816,816,816,816,816,816,816,816,816,816,
1568816,816,816,816,816,816,816,816,816,816,816,816,816,816,816,816,816,816,816,816,816,816,816,816,816,816,816,816,816,816,816,816,
1569816,816,817,817,817,817,817,817,817,817,817,817,817,817,817,817,817,817,817,817,817,817,817,817,817,817,817,817,817,817,817,817,
1570817,817,817,817,817,817,817,817,817,817,817,817,817,817,817,817,817,817,817,817,818,818,818,818,818,818,818,818,818,818,818,818,
1571818,818,818,818,818,818,818,818,818,818,818,818,818,818,818,818,818,818,818,818,818,818,818,818,818,818,818,818,818,818,818,818,
1572818,818,818,818,818,818,819,819,819,819,819,819,819,819,819,819,819,819,819,819,819,819,819,819,819,819,819,819,819,819,819,819,
1573819,819,819,819,819,819,819,819,819,819,819,819,819,819,819,819,819,819,819,819,819,819,819,819,820,820,820,820,820,820,820,820,
1574820,820,820,820,820,820,820,820,820,820,820,820,820,820,820,820,820,820,820,820,820,820,820,820,820,820,820,820,820,820,820,820,
1575820,820,820,820,820,820,820,820,820,820,821,821,821,821,821,821,821,821,821,821,821,821,821,821,821,821,821,821,821,821,821,821,
1576821,821,821,821,821,821,821,821,821,821,821,821,821,821,821,821,821,821,821,821,821,821,821,821,821,821,821,821,822,822,822,822,
1577822,822,822,822,822,822,822,822,822,822,822,822,822,822,822,822,822,822,822,822,822,822,822,822,822,822,822,822,822,822,822,822,
1578822,822,822,822,822,822,822,822,822,822,822,822,822,822,823,823,823,823,823,823,823,823,823,823,823,823,823,823,823,823,823,823,
1579823,823,823,823,823,823,823,823,823,823,823,823,823,823,823,823,823,823,823,823,823,823,823,823,823,823,823,823,823,823,823,823,
1580824,824,824,824,824,824,824,824,824,824,824,824,824,824,824,824,824,824,824,824,824,824,824,824,824,824,824,824,824,824,824,824,
1581824,824,824,824,824,824,824,824,824,824,824,824,824,824,824,824,824,824,825,825,825,825,825,825,825,825,825,825,825,825,825,825,
1582825,825,825,825,825,825,825,825,825,825,825,825,825,825,825,825,825,825,825,825,825,825,825,825,825,825,825,825,825,825,825,825,
1583825,825,825,825,826,826,826,826,826,826,826,826,826,826,826,826,826,826,826,826,826,826,826,826,826,826,826,826,826,826,826,826,
1584826,826,826,826,826,826,826,826,826,826,826,826,826,826,826,826,826,826,826,826,826,826,827,827,827,827,827,827,827,827,827,827,
1585827,827,827,827,827,827,827,827,827,827,827,827,827,827,827,827,827,827,827,827,827,827,827,827,827,827,827,827,827,827,827,827,
1586827,827,827,827,827,827,827,827,828,828,828,828,828,828,828,828,828,828,828,828,828,828,828,828,828,828,828,828,828,828,828,828,
1587828,828,828,828,828,828,828,828,828,828,828,828,828,828,828,828,828,828,828,828,828,828,828,828,828,828,829,829,829,829,829,829,
1588829,829,829,829,829,829,829,829,829,829,829,829,829,829,829,829,829,829,829,829,829,829,829,829,829,829,829,829,829,829,829,829,
1589829,829,829,829,829,829,829,829,829,829,829,829,830,830,830,830,830,830,830,830,830,830,830,830,830,830,830,830,830,830,830,830,
1590830,830,830,830,830,830,830,830,830,830,830,830,830,830,830,830,830,830,830,830,830,830,830,830,830,830,830,830,830,830,831,831,
1591831,831,831,831,831,831,831,831,831,831,831,831,831,831,831,831,831,831,831,831,831,831,831,831,831,831,831,831,831,831,831,831,
1592831,831,831,831,831,831,831,831,831,831,831,831,831,831,831,831,832,832,832,832,832,832,832,832,832,832,832,832,832,832,832,832,
1593832,832,832,832,832,832,832,832,832,832,832,832,832,832,832,832,832,832,832,832,832,832,832,832,832,832,832,832,832,832,832,832,
1594832,832,833,833,833,833,833,833,833,833,833,833,833,833,833,833,833,833,833,833,833,833,833,833,833,833,833,833,833,833,833,833,
1595833,833,833,833,833,833,833,833,833,833,833,833,833,833,833,833,833,833,833,833,834,834,834,834,834,834,834,834,834,834,834,834,
1596834,834,834,834,834,834,834,834,834,834,834,834,834,834,834,834,834,834,834,834,834,834,834,834,834,834,834,834,834,834,834,834,
1597834,834,834,834,834,834,834,835,835,835,835,835,835,835,835,835,835,835,835,835,835,835,835,835,835,835,835,835,835,835,835,835,
1598835,835,835,835,835,835,835,835,835,835,835,835,835,835,835,835,835,835,835,835,835,835,835,835,835,836,836,836,836,836,836,836,
1599836,836,836,836,836,836,836,836,836,836,836,836,836,836,836,836,836,836,836,836,836,836,836,836,836,836,836,836,836,836,836,836,
1600836,836,836,836,836,836,836,836,836,836,836,837,837,837,837,837,837,837,837,837,837,837,837,837,837,837,837,837,837,837,837,837,
1601837,837,837,837,837,837,837,837,837,837,837,837,837,837,837,837,837,837,837,837,837,837,837,837,837,837,837,837,837,838,838,838,
1602838,838,838,838,838,838,838,838,838,838,838,838,838,838,838,838,838,838,838,838,838,838,838,838,838,838,838,838,838,838,838,838,
1603838,838,838,838,838,838,838,838,838,838,838,838,838,838,838,838,839,839,839,839,839,839,839,839,839,839,839,839,839,839,839,839,
1604839,839,839,839,839,839,839,839,839,839,839,839,839,839,839,839,839,839,839,839,839,839,839,839,839,839,839,839,839,839,839,839,
1605839,839,840,840,840,840,840,840,840,840,840,840,840,840,840,840,840,840,840,840,840,840,840,840,840,840,840,840,840,840,840,840,
1606840,840,840,840,840,840,840,840,840,840,840,840,840,840,840,840,840,840,840,840,841,841,841,841,841,841,841,841,841,841,841,841,
1607841,841,841,841,841,841,841,841,841,841,841,841,841,841,841,841,841,841,841,841,841,841,841,841,841,841,841,841,841,841,841,841,
1608841,841,841,841,841,841,841,842,842,842,842,842,842,842,842,842,842,842,842,842,842,842,842,842,842,842,842,842,842,842,842,842,
1609842,842,842,842,842,842,842,842,842,842,842,842,842,842,842,842,842,842,842,842,842,842,842,842,842,843,843,843,843,843,843,843,
1610843,843,843,843,843,843,843,843,843,843,843,843,843,843,843,843,843,843,843,843,843,843,843,843,843,843,843,843,843,843,843,843,
1611843,843,843,843,843,843,843,843,843,843,843,844,844,844,844,844,844,844,844,844,844,844,844,844,844,844,844,844,844,844,844,844,
1612844,844,844,844,844,844,844,844,844,844,844,844,844,844,844,844,844,844,844,844,844,844,844,844,844,844,844,844,844,844,845,845,
1613845,845,845,845,845,845,845,845,845,845,845,845,845,845,845,845,845,845,845,845,845,845,845,845,845,845,845,845,845,845,845,845,
1614845,845,845,845,845,845,845,845,845,845,845,845,845,845,845,845,846,846,846,846,846,846,846,846,846,846,846,846,846,846,846,846,
1615846,846,846,846,846,846,846,846,846,846,846,846,846,846,846,846,846,846,846,846,846,846,846,846,846,846,846,846,846,846,846,846,
1616846,846,846,847,847,847,847,847,847,847,847,847,847,847,847,847,847,847,847,847,847,847,847,847,847,847,847,847,847,847,847,847,
1617847,847,847,847,847,847,847,847,847,847,847,847,847,847,847,847,847,847,847,847,847,848,848,848,848,848,848,848,848,848,848,848,
1618848,848,848,848,848,848,848,848,848,848,848,848,848,848,848,848,848,848,848,848,848,848,848,848,848,848,848,848,848,848,848,848,
1619848,848,848,848,848,848,848,848,849,849,849,849,849,849,849,849,849,849,849,849,849,849,849,849,849,849,849,849,849,849,849,849,
1620849,849,849,849,849,849,849,849,849,849,849,849,849,849,849,849,849,849,849,849,849,849,849,849,849,849,850,850,850,850,850,850,
1621850,850,850,850,850,850,850,850,850,850,850,850,850,850,850,850,850,850,850,850,850,850,850,850,850,850,850,850,850,850,850,850,
1622850,850,850,850,850,850,850,850,850,850,850,850,850,851,851,851,851,851,851,851,851,851,851,851,851,851,851,851,851,851,851,851,
1623851,851,851,851,851,851,851,851,851,851,851,851,851,851,851,851,851,851,851,851,851,851,851,851,851,851,851,851,851,851,851,852,
1624852,852,852,852,852,852,852,852,852,852,852,852,852,852,852,852,852,852,852,852,852,852,852,852,852,852,852,852,852,852,852,852,
1625852,852,852,852,852,852,852,852,852,852,852,852,852,852,852,852,852,852,853,853,853,853,853,853,853,853,853,853,853,853,853,853,
1626853,853,853,853,853,853,853,853,853,853,853,853,853,853,853,853,853,853,853,853,853,853,853,853,853,853,853,853,853,853,853,853,
1627853,853,853,853,854,854,854,854,854,854,854,854,854,854,854,854,854,854,854,854,854,854,854,854,854,854,854,854,854,854,854,854,
1628854,854,854,854,854,854,854,854,854,854,854,854,854,854,854,854,854,854,854,854,854,854,854,855,855,855,855,855,855,855,855,855,
1629855,855,855,855,855,855,855,855,855,855,855,855,855,855,855,855,855,855,855,855,855,855,855,855,855,855,855,855,855,855,855,855,
1630855,855,855,855,855,855,855,855,855,855,856,856,856,856,856,856,856,856,856,856,856,856,856,856,856,856,856,856,856,856,856,856,
1631856,856,856,856,856,856,856,856,856,856,856,856,856,856,856,856,856,856,856,856,856,856,856,856,856,856,856,856,857,857,857,857,
1632857,857,857,857,857,857,857,857,857,857,857,857,857,857,857,857,857,857,857,857,857,857,857,857,857,857,857,857,857,857,857,857,
1633857,857,857,857,857,857,857,857,857,857,857,857,857,857,857,858,858,858,858,858,858,858,858,858,858,858,858,858,858,858,858,858,
1634858,858,858,858,858,858,858,858,858,858,858,858,858,858,858,858,858,858,858,858,858,858,858,858,858,858,858,858,858,858,858,858,
1635858,858,859,859,859,859,859,859,859,859,859,859,859,859,859,859,859,859,859,859,859,859,859,859,859,859,859,859,859,859,859,859,
1636859,859,859,859,859,859,859,859,859,859,859,859,859,859,859,859,859,859,859,859,860,860,860,860,860,860,860,860,860,860,860,860,
1637860,860,860,860,860,860,860,860,860,860,860,860,860,860,860,860,860,860,860,860,860,860,860,860,860,860,860,860,860,860,860,860,
1638860,860,860,860,860,860,860,861,861,861,861,861,861,861,861,861,861,861,861,861,861,861,861,861,861,861,861,861,861,861,861,861 };
1639 838
1640/* forward declarations */ 839/* forward declarations */
1641void encodeSideInfo( side_info_t si[2][2] ); 840int HuffmanCode( short *ix, int *xr, uint32 begin, uint32 end, int table);
1642void Huffmancodebits( uint16 *ix, int *xr, side_info_t *gi ); 841int HuffmanCod1( short *ix, int *xr, uint32 begin, uint32 end, int table);
1643int HuffmanCode(int table_select, uint16 *ix, int *xr);
1644int HuffmanCount1(unsigned tbl, uint16 *ix, int *xr );
1645int new_choose_table( uint16 ix[SAMP_PER_FRAME2], uint32 begin, uint32 end );
1646void putbits(uint32 val, uint32 nbit); 842void putbits(uint32 val, uint32 nbit);
1647int count_bit(uint16 ix[SAMP_PER_FRAME2], uint32 start, uint32 end, uint32 table ); 843int find_best_2( short *ix, uint32 start, uint32 end, const uint32 *table,
1648int bigv_bitcount(uint16 ix[SAMP_PER_FRAME2], side_info_t *gi); 844 uint32 len, int *bits);
1649void bigv_tab_select( uint16 ix[SAMP_PER_FRAME2], side_info_t *cod_info ); 845int find_best_3( short *ix, uint32 start, uint32 end, const uint32 *table,
1650void subdivide(side_info_t *cod_info); 846 uint32 len, int *bits);
1651void mdct_sub_int(int sb_sample[2][3][18][SBLIMIT], int (*mdct_freq)[2][SAMP_PER_FRAME2]); 847int count_bit1 ( short *ix, uint32 start, uint32 end, int *bits );
1652void filter_subband(int s[SBLIMIT], int off, int k); 848int count_bigv ( short *ix, uint32 start, uint32 end, int table0, int table1,
1653 849 int *bits);
1654void putbits(uint32 val, uint32 nbit)
1655{
1656 int new_bitpos = CodedData.bitpos + nbit;
1657 int ptrpos = CodedData.bitpos >> 5;
1658
1659 val = val & (0xffffffff >> (32 - nbit));
1660
1661 /* data fit in one uint32 */
1662 if(((new_bitpos - 1) >> 5) == ptrpos)
1663 CodedData.bbuf[ptrpos] |= val << ((32 - new_bitpos) & 31);
1664 else
1665 {
1666 CodedData.bbuf[ptrpos ] |= val >> ((new_bitpos - 32) & 31);
1667 CodedData.bbuf[ptrpos+1] = val << ((32 - new_bitpos) & 31);
1668 }
1669
1670 CodedData.bitpos = new_bitpos;
1671}
1672
1673/* This is called after a frame of audio has been quantized and coded.
1674 It will write the encoded audio to the bitstream. Note that from a
1675 layer3 encoder's perspective the bit stream is primarily a series
1676 of main_data() blocks, with header and side information inserted at
1677 the proper locations to maintain framing. See Figure A.7 in the IS */
1678void format_bitstream( uint16 enc[2][2][SAMP_PER_FRAME2],
1679 side_info_t side[2][2], int (*xr)[2][SAMP_PER_FRAME2] )
1680{
1681 int gr, ch;
1682
1683 encodeSideInfo( side );
1684 850
1685 for(gr=0; gr<2; gr++)
1686 for(ch=0; ch<cfg.channels; ch++)
1687 Huffmancodebits( &enc[gr][ch][0], &xr[gr][ch][0], &side[gr][ch] );
1688}
1689 851
1690void encodeSideInfo( side_info_t si[2][2] ) 852void encodeSideInfo( side_info_t si[2][2] )
1691{ 853{
1692 int gr, ch, header; 854 int gr, ch, header;
855 uint32 cc=0, sz=0;
1693 856
1694 header = 0xfff00000; 857 header = 0xfff00000;
1695 header |= cfg.mpg.type << 19; /* mp3 type: 1 */ 858 header |= cfg.mpg.type << 19; /* mp3 type: 1 */
1696 header |= 1 << 17; /* mp3 layer: 1 */ 859 header |= 1 << 17; /* mp3 layer: 1 */
1697 header |= 1 << 16; /* mp3 crc: 1 */ 860 header |= 1 << 16; /* mp3 crc: 0 */
1698 header |= cfg.mpg.bitrate_index << 12; 861 header |= cfg.mpg.bitr_id << 12;
1699 header |= cfg.mpg.smprate_index << 10; 862 header |= cfg.mpg.smpl_id << 10;
1700 header |= cfg.mpg.padding << 9; 863 header |= cfg.mpg.padding << 9;
1701 header |= cfg.mpg.mode << 6; 864 header |= cfg.mpg.mode << 6;
1702 header |= 1 << 2; /* mp3 original: 1 */ 865 header |= 1 << 2; /* mp3 original: 1 */
1703
1704 putbits( header, 32 ); 866 putbits( header, 32 );
1705 putbits( 0, cfg.channels == 2 ? 20 : 18 );
1706 867
1707 for(gr=0; gr<2; gr++) 868 if(cfg.mpg.type)
869 { /* MPEG1 */
870 if(cfg.channels == 2) { putlong( 0, 20); }
871 else { putlong( 0, 18); }
872
873 for(gr=0; gr<cfg.granules; gr++)
874 for(ch=0; ch<cfg.channels; ch++)
875 {
876 side_info_t *gi = &si[gr][ch];
877
878 putlong( gi->part2_3_length, 12 );
879 putlong( gi->address3>>1, 9 );
880 putlong( gi->global_gain, 8 );
881 putlong( gi->table_select[0], 10 );
882 putlong( gi->table_select[1], 5 );
883 putlong( gi->table_select[2], 5 );
884 putlong( gi->region_0_1, 7 );
885 putlong( gi->table_select[3], 3 );
886 }
887 }
888 else
889 { /* MPEG2 */
890 if(cfg.channels == 2) { putlong( 0, 10); }
891 else { putlong( 0, 9); }
892
1708 for(ch=0; ch<cfg.channels; ch++) 893 for(ch=0; ch<cfg.channels; ch++)
1709 { 894 {
1710 side_info_t *gi = &si[gr][ch]; 895 side_info_t *gi = &si[0][ch];
1711 896
1712 putbits( gi->part2_3_length, 12 ); 897 putlong( gi->part2_3_length, 12);
1713 putbits( gi->big_values, 9 ); 898 putlong( gi->address3>>1, 9);
1714 putbits( gi->global_gain, 8 ); 899 putlong( gi->global_gain, 8);
1715 putbits( gi->table_select[0], 10 ); 900 putlong( gi->table_select[0], 15);
1716 putbits( gi->table_select[1], 5 ); 901 putlong( gi->table_select[1], 5);
1717 putbits( gi->table_select[2], 5 ); 902 putlong( gi->table_select[2], 5);
1718 putbits( gi->region0_count, 4 ); 903 putlong( gi->region_0_1, 7);
1719 putbits( gi->region1_count, 3 ); 904 putlong( gi->table_select[3], 2);
1720 putbits( gi->table_select[3], 3 );
1721 } 905 }
906 }
907 /* flush remaining bits */
908 putbits(cc, sz);
1722} 909}
1723 910
1724/* Note the discussion of huffmancodebits() on pages 28 and 29 of the IS, 911/* Note the discussion of huffmancodebits() on pages 28 and 29 of the IS,
1725 as well as the definitions of the side information on pages 26 and 27. */ 912 as well as the definitions of the side information on pages 26 and 27. */
1726void Huffmancodebits( uint16 *ix, int *xr, side_info_t *gi ) 913void Huffmancodebits( short *ix, int *xr, side_info_t *gi )
1727{ 914{
1728 int region1Start; 915 int region1 = gi->address1;
1729 int region2Start; 916 int region2 = gi->address2;
1730 int i, bigvalues, count1End; 917 int bigvals = gi->address3;
1731 int stuffingBits; 918 int count1 = bigvals + (gi->count1 << 2);
1732 int bitsWritten = 0; 919 int stuffBits = 0;
1733 uint32 scalefac_index; 920 int bits = 0;
1734 921
1735 /* 1: Write the bigvalues */ 922 if(region1 > 0)
1736 bigvalues = gi->big_values << 1; 923 bits += HuffmanCode(ix, xr, 0 , region1, gi->table_select[0]);
1737 scalefac_index = gi->region0_count + 1; 924
1738 region1Start = scalefac[ scalefac_index ]; 925 if(region2 > region1)
1739 scalefac_index += gi->region1_count + 1; 926 bits += HuffmanCode(ix, xr, region1, region2, gi->table_select[1]);
1740 region2Start = scalefac[ scalefac_index ]; 927
1741 928 if(bigvals > region2)
1742 for(i=0; i<region1Start; i+=2) 929 bits += HuffmanCode(ix, xr, region2, bigvals, gi->table_select[2]);
1743 bitsWritten += HuffmanCode(gi->table_select[0], ix+i, xr+i); 930
1744 931 if(count1 > bigvals)
1745 for( ; i<region2Start; i+=2) 932 bits += HuffmanCod1(ix, xr, bigvals, count1, gi->table_select[3]);
1746 bitsWritten += HuffmanCode(gi->table_select[1], ix+i, xr+i); 933
1747 934 if((stuffBits = gi->part2_3_length - bits) > 0)
1748 for( ; i<bigvalues; i+=2)
1749 bitsWritten += HuffmanCode(gi->table_select[2], ix+i, xr+i);
1750
1751 /* 2: Write count1 area */
1752 count1End = bigvalues + (gi->count1 << 2);
1753 for(i=bigvalues; i<count1End; i+=4)
1754 bitsWritten += HuffmanCount1(gi->table_select[3], ix+i, xr+i);
1755
1756 if((stuffingBits = gi->part2_3_length - bitsWritten) != 0)
1757 { 935 {
1758 int stuffingWords = stuffingBits / 32; 936 int stuffWords = stuffBits >> 5;
1759 int remainingBits = stuffingBits % 32; 937 int remainBits = stuffBits & 31;
1760 938
1761 if( remainingBits ) 939 if( remainBits )
1762 putbits( ~0, remainingBits ); 940 putbits( ~0, remainBits );
1763 941
1764 /* Due to the nature of the Huffman code tables, we will pad with ones */ 942 while( stuffWords-- )
1765 while( stuffingWords-- ) 943 putbits( ~0, 32 ); /* Huffman code tables leed to padding ones */
1766 putbits( ~0, 32 );
1767
1768 bitsWritten += stuffingBits;
1769 } 944 }
1770} 945}
1771 946
1772int HuffmanCount1(unsigned tbl, uint16 *ix, int *xr) 947int HuffmanCod1( short *ix, int *xr, uint32 begin, uint32 end, int tbl)
1773{ 948{
1774 uint32 dat, p, s; 949 uint32 cc=0, sz=0;
1775 int len, v, w, x, y; 950 uint32 i, d, p;
1776 #define signv (xr[0] < 0 ? 1 : 0) 951 int sumbit=0, s=0, l=0, v, w, x, y;
1777 #define signw (xr[1] < 0 ? 1 : 0) 952 #define sgnv (xr[i+0] < 0 ? 1 : 0)
1778 #define signx (xr[2] < 0 ? 1 : 0) 953 #define sgnw (xr[i+1] < 0 ? 1 : 0)
1779 #define signy (xr[3] < 0 ? 1 : 0) 954 #define sgnx (xr[i+2] < 0 ? 1 : 0)
1780 955 #define sgny (xr[i+3] < 0 ? 1 : 0)
1781 v = ix[0]; 956
1782 w = ix[1]; 957 for(i=begin; i<end; i+=4)
1783 x = ix[2];
1784 y = ix[3];
1785 p = v + (w << 1) + (x << 2) + (y << 3);
1786
1787 switch(p)
1788 { 958 {
1789 default: len = 0; s = 0; break; 959 v = ix[i+0];
1790 case 1: len = 1; s = signv; break; 960 w = ix[i+1];
1791 case 2: len = 1; s = signw; break; 961 x = ix[i+2];
1792 case 3: len = 2; s = (signv << 1) + signw; break; 962 y = ix[i+3];
1793 case 4: len = 1; s = signx; break; 963 p = (v << 3) + (w << 2) + (x << 1) + y;
1794 case 5: len = 2; s = (signv << 1) + signx; break; 964
1795 case 6: len = 2; s = (signw << 1) + signx; break; 965 switch(p)
1796 case 7: len = 3; s = (signv << 2) + (signw << 1) + signx; break; 966 {
1797 case 8: len = 1; s = signy; break; 967 case 0: l=0; s = 0; break;
1798 case 9: len = 2; s = (signv << 1) + signy; break; 968 case 1: l=1; s = sgnv; break;
1799 case 10: len = 2; s = (signw << 1) + signy; break; 969 case 2: l=1; s = sgnw; break;
1800 case 11: len = 3; s = (signv << 2) + (signw << 1) + signy; break; 970 case 3: l=2; s = (sgnv << 1) + sgnw; break;
1801 case 12: len = 2; s = (signx << 1) + signy; break; 971 case 4: l=1; s = sgnx; break;
1802 case 13: len = 3; s = (signv << 2) + (signx << 1) + signy; break; 972 case 5: l=2; s = (sgnv << 1) + sgnx; break;
1803 case 14: len = 3; s = (signw << 2) + (signx << 1) + signy; break; 973 case 6: l=2; s = (sgnw << 1) + sgnx; break;
1804 case 15: len = 4; s = (signv << 3) + (signw << 2) + (signx << 1) + signy; break; 974 case 7: l=3; s = (sgnv << 2) + (sgnw << 1) + sgnx; break;
975 case 8: l=1; s = sgny; break;
976 case 9: l=2; s = (sgnv << 1) + sgny; break;
977 case 10: l=2; s = (sgnw << 1) + sgny; break;
978 case 11: l=3; s = (sgnv << 2) + (sgnw << 1) + sgny; break;
979 case 12: l=2; s = (sgnx << 1) + sgny; break;
980 case 13: l=3; s = (sgnv << 2) + (sgnx << 1) + sgny; break;
981 case 14: l=3; s = (sgnw << 2) + (sgnx << 1) + sgny; break;
982 case 15: l=4; s = (sgnv << 3) + (sgnw << 2) + (sgnx << 1) + sgny; break;
983 }
984
985 d = (ht_count[tbl][0][p] << l) + s;
986 l = ht_count[tbl][1][p];
987 putlong( d, l );
988 sumbit += l;
1805 } 989 }
1806 990
1807 dat = (ht_count1[tbl][0][p] << len) + s; 991 /* flush remaining bits */
1808 len = ht_count1[tbl][1][p]; 992 putbits(cc, sz);
1809 putbits( dat, len );
1810 993
1811 return len; 994 return sumbit;
1812} 995}
1813 996
1814/* Implements the pseudocode of page 98 of the IS */ 997/* Implements the pseudocode of page 98 of the IS */
1815int HuffmanCode(int table_select, uint16 *ix, int *xr) 998int HuffmanCode( short *ix, int *xr, uint32 begin, uint32 end, int table)
1816{ 999{
1817 unsigned int linbitsx, linbitsy, linbits, idx; 1000 uint32 cc=0, sz=0, code;
1818 const struct huffcodetab *h; 1001 uint32 i, xl=0, yl=0, idx;
1819 int x, y, bit; 1002 int x, y, bit, sumbit=0;
1820 uint32 code; 1003 #define sign_x (xr[i+0] < 0 ? 1 : 0)
1821 #define sign_x (xr[0] < 0 ? 1 : 0) 1004 #define sign_y (xr[i+1] < 0 ? 1 : 0)
1822 #define sign_y (xr[1] < 0 ? 1 : 0)
1823
1824 if(table_select == 0)
1825 return 0;
1826 1005
1827 x = ix[0]; 1006 if(table == 0)
1828 y = ix[1]; 1007 return 0;
1829 h = &ht[table_select];
1830 linbits = h->linbits;
1831 linbitsx = linbitsy = 0;
1832 1008
1833 if( table_select > 15 ) 1009 if( table > 15 )
1834 { /* ESC-table is used */ 1010 { /* ESC-table is used */
1835 if(x > 14) { linbitsx = x - 15; x = 15; } 1011 uint32 linbits = ht_big[table-16].linbits;
1836 if(y > 14) { linbitsy = y - 15; y = 15; } 1012 uint16 *hffcode = table < 24 ? t16HB : t24HB;
1837 1013 uint8 *hlen = table < 24 ? t16l : t24l;
1838 idx = (x * h->ylen) + y;
1839 code = h->table[idx];
1840 bit = h->hlen [idx];
1841 1014
1842 if(x) 1015 for(i=begin; i<end; i+=2)
1843 { 1016 {
1844 if(x > 14) 1017 x = ix[ i ];
1018 y = ix[i+1];
1019
1020 if(x > 14) { xl = x - 15; x = 15; }
1021 if(y > 14) { yl = y - 15; y = 15; }
1022
1023 idx = x * 16 + y;
1024 code = hffcode[idx];
1025 bit = hlen [idx];
1026
1027 if(x)
1845 { 1028 {
1846 code = (code << linbits) | linbitsx; 1029 if(x > 14)
1847 bit += linbits; 1030 {
1848 } 1031 code = (code << linbits) | xl;
1032 bit += linbits;
1033 }
1849 1034
1850 code = (code << 1) | sign_x; 1035 code = (code << 1) | sign_x;
1851 bit += 1; 1036 bit += 1;
1852 } 1037 }
1853 1038
1854 if(y) 1039 if(y)
1855 {
1856 if(y > 14)
1857 { 1040 {
1858 code = (code << linbits) | linbitsy; 1041 if(y > 14)
1859 bit += linbits; 1042 {
1043 code = (code << linbits) | yl;
1044 bit += linbits;
1045 }
1046
1047 code = (code << 1) | sign_y;
1048 bit += 1;
1860 } 1049 }
1861 1050
1862 code = (code << 1) | sign_y; 1051 putlong( code, bit );
1863 bit += 1; 1052 sumbit += bit;
1864 } 1053 }
1865 } 1054 }
1866 else 1055 else
1867 { /* No ESC-words */ 1056 { /* No ESC-words */
1868 idx = (x * h->ylen) + y; 1057 const struct huffcodetab *h = &ht[table];
1869 code = h->table[idx];
1870 bit = h->hlen [idx];
1871 1058
1872 if(x) 1059 for(i=begin; i<end; i+=2)
1873 { 1060 {
1874 code = (code << 1) | sign_x; 1061 x = ix[i];
1875 bit += 1; 1062 y = ix[i+1];
1876 }
1877 1063
1878 if(y) 1064 idx = x * h->len + y;
1879 { 1065 code = h->table[idx];
1880 code = (code << 1) | sign_y; 1066 bit = h->hlen [idx];
1881 bit += 1; 1067
1068 if(x)
1069 {
1070 code = (code << 1) | sign_x;
1071 bit += 1;
1072 }
1073
1074 if(y)
1075 {
1076 code = (code << 1) | sign_y;
1077 bit += 1;
1078 }
1079
1080 putlong( code, bit );
1081 sumbit += bit;
1882 } 1082 }
1883 } 1083 }
1884 1084
1885 putbits( code, bit ); 1085 /* flush remaining bits */
1886 1086 putbits(cc, sz);
1887 return bit; 1087
1088 return sumbit;
1089}
1090
1091void putbits(uint32 val, uint32 nbit)
1092{
1093 int new_bitpos = CodedData.bitpos + nbit;
1094 int ptrpos = CodedData.bitpos >> 5;
1095
1096 val = val & (0xffffffff >> (32 - nbit));
1097
1098 /* data fit in one uint32 */
1099 if(((new_bitpos - 1) >> 5) == ptrpos)
1100 CodedData.bbuf[ptrpos] |= val << ((32 - new_bitpos) & 31);
1101 else
1102 {
1103 CodedData.bbuf[ptrpos ] |= val >> ((new_bitpos - 32) & 31);
1104 CodedData.bbuf[ptrpos+1] |= val << ((32 - new_bitpos) & 31);
1105 }
1106
1107 CodedData.bitpos = new_bitpos;
1888} 1108}
1889 1109
1890/***************************************************************************/ 1110/***************************************************************************/
@@ -1894,173 +1114,160 @@ int HuffmanCode(int table_select, uint16 *ix, int *xr)
1894/* of the Huffman tables as defined in the IS (Table B.7), and will not */ 1114/* of the Huffman tables as defined in the IS (Table B.7), and will not */
1895/* work with any arbitrary tables. */ 1115/* work with any arbitrary tables. */
1896/***************************************************************************/ 1116/***************************************************************************/
1897int new_choose_table( uint16 ix[SAMP_PER_FRAME2], uint32 begin, uint32 end ) 1117int choose_table( short *ix, uint32 begin, uint32 end, int *bits )
1898{ 1118{
1899 uint32 i; 1119 uint32 i;
1900 int max, sum0, sum1, table0, table1; 1120 int max, table0, table1;
1901 1121
1902 for(i=begin,max=0; i<end; i++) 1122 for(i=begin,max=0; i<end; i++)
1903 if(ix[i] > max) 1123 if(ix[i] > max)
1904 max = ix[i]; 1124 max = ix[i];
1905 1125
1906 if(!max) 1126 if(max < 16)
1907 return 0;
1908
1909 table0 = 0;
1910 table1 = 0;
1911
1912 if(max <= 15)
1913 { 1127 {
1914 /* try tables with no linbits */ 1128 /* tables without linbits */
1915 /* indx: 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 */ 1129 /* indx: 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 */
1916 /* xlen: 0, 2, 3, 3, 0, 4, 4, 6, 6, 6, 8, 8, 8, 16, 0, 16 */ 1130 /* len: 0, 2, 3, 3, 0, 4, 4, 6, 6, 6, 8, 8, 8, 16, 0, 16 */
1917 for(table0=0; table0<14; table0++) 1131 switch(max)
1918 if(ht[table0].xlen > max)
1919 break;
1920
1921 sum0 = count_bit(ix, begin, end, table0);
1922
1923 switch( table0 )
1924 { 1132 {
1925 case 2: sum1 = count_bit( ix, begin, end, 3 ); 1133 case 0: return 0;
1926 if(sum1 <= sum0) table0 = 3; break; 1134 case 1: return count_bit1(ix, begin, end, bits);
1927 1135 case 2: return 2 + find_best_2(ix, begin, end, tab23, 3, bits);
1928 case 5: sum1 = count_bit( ix, begin, end, 6 ); 1136 case 3: return 5 + find_best_2(ix, begin, end, tab56, 4, bits);
1929 if(sum1 <= sum0) table0 = 6; break; 1137 case 4:
1930 1138 case 5: return 7 + find_best_3(ix, begin, end, tab789, 6, bits);
1931 case 7: sum1 = count_bit( ix, begin, end, 8 ); 1139 case 6:
1932 if(sum1 <= sum0) { table0 = 8; sum0 = sum1; } 1140 case 7: return 10 + find_best_3(ix, begin, end, tabABC, 8, bits);
1933 sum1 = count_bit( ix, begin, end, 9 ); 1141 default: return 13 + find_best_2(ix, begin, end, tab1315, 16, bits) * 2;
1934 if(sum1 <= sum0) table0 = 9; break;
1935
1936 case 10: sum1 = count_bit( ix, begin, end, 11 );
1937 if(sum1 <= sum0) { table0 =11; sum0 = sum1; }
1938 sum1 = count_bit( ix, begin, end, 12);
1939 if(sum1 <= sum0) table0 = 12; break;
1940
1941 case 13: sum1 = count_bit( ix, begin, end, 15 );
1942 if(sum1 <= sum0) table0 = 15; break;
1943 } 1142 }
1944 } 1143 }
1945 else 1144 else
1946 { 1145 {
1947 /* try tables with linbits */ 1146 /* tables with linbits */
1948 max -= 15; 1147 max -= 15;
1949 1148
1950 /* index : 15 16 17 18 19 20 21 22 23 */ 1149 for(table0=0; table0<8; table0++)
1951 /* linmax: 0 1 3 7 15 63 255 1023 8191 */ 1150 if(ht_big[table0].linmax >= max)
1952 for(table0=15; table0<24; table0++)
1953 if(ht[table0].linmax >= max)
1954 break; 1151 break;
1955 1152
1956 /* index : 24 25 26 27 28 29 30 31 */ 1153 for(table1=8; table1<16; table1++)
1957 /* linmax: 15 31 63 127 255 511 2047 8191 */ 1154 if(ht_big[table1].linmax >= max)
1958 for(table1=24; table1<32; table1++)
1959 if(ht[table1].linmax >= max)
1960 break; 1155 break;
1961 1156
1962 sum0 = count_bit(ix, begin, end, table0); 1157 return 16 + count_bigv(ix, begin, end, table0, table1, bits);
1963 sum1 = count_bit(ix, begin, end, table1);
1964
1965 if(sum1 < sum0)
1966 table0 = table1;
1967 } 1158 }
1968 return table0;
1969} 1159}
1970 1160
1971/*************************************************************************/ 1161int find_best_2(short *ix, uint32 start, uint32 end, const uint32 *table,
1972/* Function: Count the number of bits necessary to code the subregion. */ 1162 uint32 len, int *bits)
1973/*************************************************************************/
1974int count_bit(uint16 ix[SAMP_PER_FRAME2], uint32 start, uint32 end, uint32 table)
1975{ 1163{
1976 uint32 i; 1164 uint32 i, sum = 0;
1977 int sum;
1978 int x, y;
1979 unsigned linbits, ylen;
1980 const struct huffcodetab *h;
1981
1982 h = &ht[table];
1983 sum = 0;
1984 ylen = h->ylen;
1985
1986 if(table > 15)
1987 { // ESC-table is used
1988 linbits = h->linbits;
1989 for(i=start; i<end; i+=2)
1990 {
1991 x = ix[i];
1992 y = ix[i+1];
1993 1165
1994 if(x) 1166 for(i=start; i<end; i+=2)
1995 { 1167 sum += table[ix[i] * len + ix[i+1]];
1996 if(x > 14) { x = 15; sum += linbits; }
1997 sum++;
1998 }
1999 1168
2000 if(y) 1169 if((sum & 0xffff) <= (sum >> 16))
2001 { 1170 {
2002 if(y > 14) { y = 15; sum += linbits; } 1171 *bits = (sum & 0xffff);
2003 sum++; 1172 return 1;
2004 }
2005
2006 sum += h->hlen[(x * ylen) + y];
2007 }
2008 } 1173 }
2009 else 1174 else
2010 { /* No ESC-words */ 1175 {
2011 for(i=start; i<end; i+=2) 1176 *bits = sum >> 16;
2012 { 1177 return 0;
2013 x = ix[i]; 1178 }
2014 y = ix[i+1]; 1179}
2015 1180
2016 sum += h->hlen[(x * ylen) + y]; 1181int find_best_3(short *ix, uint32 start, uint32 end, const uint32 *table,
1182 uint32 len, int *bits)
1183{
1184 uint32 i, j, sum = 0;
1185 int sum1 = 0;
1186 int sum2 = 0;
1187 int sum3 = 0;
2017 1188
2018 if(x) sum++; 1189 /* avoid overflow in packed additions: 78*13 < 1024 */
2019 if(y) sum++; 1190 for(i=start; i<end; )
2020 } 1191 {
1192 j = i + 2*78 > end ? end : i + 2*78;
1193
1194 for(sum=0; i<j; i+=2)
1195 sum += table[ix[i] * len + ix[i+1]];
1196
1197 sum1 += (sum >> 20);
1198 sum2 += (sum >> 10) & 0x3ff;
1199 sum3 += (sum >> 0) & 0x3ff;
2021 } 1200 }
2022 1201
2023 return sum; 1202 i = 0;
1203 if(sum1 > sum2) { sum1 = sum2; i = 1; }
1204 if(sum1 > sum3) { sum1 = sum3; i = 2; }
1205
1206 *bits = sum1;
1207
1208 return i;
2024} 1209}
2025 1210
2026/*************************************************************************/ 1211/*************************************************************************/
2027/* Function: Quantization of the vector xr ( -> ix) */ 1212/* Function: Count the number of bits necessary to code the subregion. */
2028/*************************************************************************/ 1213/*************************************************************************/
2029int quantize_int(int xr[SAMP_PER_FRAME2], uint16 ix[SAMP_PER_FRAME2], side_info_t *cod_info) 1214int count_bit1(short *ix, uint32 start, uint32 end, int *bits )
2030{ 1215{
2031 uint32 i, ind, step, frac_pow[] = { 0x80000, 0x6ba28, 0x5a828, 0x4c1c0 }; 1216 uint32 i, sum = 0;
1217
1218 for(i=start; i<end; i+=2)
1219 sum += t1l[4 + ix[i] * 2 + ix[i+1]];
2032 1220
2033 step = frac_pow[cod_info->quantizerStepSize & 3] >> cod_info->quantizerStepSize / 4; 1221 *bits = sum;
1222
1223 return 1; /* this is table1 */
1224}
2034 1225
2035 for(i=SAMP_PER_FRAME2; i--; ) 1226int count_bigv(short *ix, uint32 start, uint32 end, int table0,
1227 int table1, int *bits )
1228{
1229 uint32 i, sum0, sum1, sum=0, bigv=0, x, y;
1230
1231 /* ESC-table is used */
1232 for(i=start; i<end; i+=2)
2036 { 1233 {
2037 ind = (abs(xr[i]) * step + 32768) >> 16; 1234 x = ix[i];
1235 y = ix[i+1];
2038 1236
2039 if(ind < 5000) 1237 if(x > 14) { x = 15; bigv++; }
2040 ix[i] = int2idx[ind]; 1238 if(y > 14) { y = 15; bigv++; }
2041 else 1239
2042 if(ind < 32768) 1240 sum += tab1624[x * 16 + y];
2043 ix[i] = int3idx[ind];
2044 else
2045 return 0;
2046 } 1241 }
2047 1242
2048 return 1; 1243 sum0 = (sum >> 16) + bigv * ht_big[table0].linbits;
1244 sum1 = (sum & 0xffff) + bigv * ht_big[table1].linbits;
1245
1246 if(sum0 <= sum1)
1247 {
1248 *bits = sum0;
1249 return table0;
1250 }
1251 else
1252 {
1253 *bits = sum1;
1254 return table1;
1255 }
2049} 1256}
2050 1257
2051/*************************************************************************/ 1258/*************************************************************************/
2052/* Function: Calculation of rzero, count1, big_values */ 1259/* Function: Calculation of rzero, count1, address3 */
2053/* (Partitions ix into big values, quadruples and zeros). */ 1260/* (Partitions ix into big values, quadruples and zeros). */
2054/*************************************************************************/ 1261/*************************************************************************/
2055int calc_runlen( uint16 ix[SAMP_PER_FRAME2], side_info_t *cod_info ) 1262int calc_runlen( short *ix, side_info_t *si )
2056{ 1263{
2057 int p, i, sum0 = 0, sum1 = 0; 1264 int p, i, sum = 0;
2058 1265
2059 for(i=SAMP_PER_FRAME2; i-=2; ) 1266 for(i=SAMPL2; i-=2; )
2060 if(ix[i-1] | ix[i-2]) 1267 if(*(uint32*)&ix[i-2]) /* !!!! short *ix; !!!!! */
2061 break; 1268 break;
2062 1269
2063 cod_info->count1 = 0; 1270 si->count1 = 0;
2064 1271
2065 for( ; i>3; i-=4) 1272 for( ; i>3; i-=4)
2066 { 1273 {
@@ -2071,668 +1278,766 @@ int calc_runlen( uint16 ix[SAMP_PER_FRAME2], side_info_t *cod_info )
2071 1278
2072 if((v | w | x | y) <= 1) 1279 if((v | w | x | y) <= 1)
2073 { 1280 {
2074 p = (y) + (x<<1) + (w<<2) + (v<<3); 1281 p = (y<<3) + (x<<2) + (w<<1) + (v);
2075 1282
2076 sum0 += ht_count1[0][1][p]; /* add table0 hlength */ 1283 sum += tab01[p];
2077 sum1 += ht_count1[1][1][p]; /* add table1 hlength */
2078 1284
2079 cod_info->count1++; 1285 si->count1++;
2080 } 1286 }
2081 else break; 1287 else break;
2082 } 1288 }
2083 1289
2084 cod_info->big_values = i >> 1; 1290 si->address3 = i;
2085 1291
2086 if(sum0 < sum1) 1292 if((sum >> 16) < (sum & 0xffff))
2087 { 1293 {
2088 cod_info->table_select[3] = 0; 1294 si->table_select[3] = 0;
2089 return sum0; 1295 return sum >> 16;
2090 } 1296 }
2091 else 1297 else
2092 { 1298 {
2093 cod_info->table_select[3] = 1; 1299 si->table_select[3] = 1;
2094 return sum1; 1300 return sum & 0xffff;
2095 } 1301 }
2096} 1302}
2097 1303
1304
2098/*************************************************************************/ 1305/*************************************************************************/
2099/* presumable subdivides the bigvalue region which will use separate Huffman tables */ 1306/* Function: Quantization of the vector xr ( -> ix) */
2100/*************************************************************************/ 1307/*************************************************************************/
2101void subdivide(side_info_t *cod_info) 1308int quantize_int(int *xr, short *ix, side_info_t *si)
2102{ 1309{
2103 int scfb_anz = 0; 1310 int i, s, frac_pow[] = { 0x10000, 0xd745, 0xb505, 0x9838 };
2104 int bigvalues_region; 1311
2105 int thiscount, index; 1312 s = frac_pow[si->quantStep & 3] >> si->quantStep / 4;
2106 1313
2107 if( !cod_info->big_values ) 1314 /* check for integer overflow */
2108 { /* no big_values region */ 1315 if(((si->max_val + 256) >> 8) * s >= (1622 << 8))
2109 cod_info->region0_count = 0; 1316 return 0;
2110 cod_info->region1_count = 0; 1317
2111 } 1318 for(i=SAMPL2; i--; )
2112 else 1319 ix[i] = int2idx[(abs(xr[i]) * s + 0x8000) >> 16];
2113 { 1320
2114 bigvalues_region = 2 * cod_info->big_values; 1321 return 1;
2115
2116 /* Calculate scfb_anz */
2117 while( scalefac[scfb_anz] < bigvalues_region )
2118 scfb_anz++;
2119
2120 cod_info->region0_count = subdv_table[scfb_anz].region0_count;
2121 thiscount = cod_info->region0_count;
2122 index = thiscount + 1;
2123 while(thiscount && (scalefac[index] > bigvalues_region))
2124 {
2125 thiscount--;
2126 index--;
2127 }
2128 cod_info->region0_count = thiscount;
2129 cod_info->region1_count = subdv_table[scfb_anz].region1_count;
2130 index = cod_info->region0_count + cod_info->region1_count + 2;
2131 thiscount = cod_info->region1_count;
2132 while(thiscount && (scalefac[index] > bigvalues_region))
2133 {
2134 thiscount--;
2135 index--;
2136 }
2137 cod_info->region1_count = thiscount;
2138 cod_info->address1 = scalefac[cod_info->region0_count+1];
2139 cod_info->address2 = scalefac[cod_info->region0_count+cod_info->region1_count+2];
2140 cod_info->address3 = bigvalues_region;
2141 }
2142} 1322}
2143 1323
2144/*************************************************************************/ 1324/*************************************************************************/
2145/* Function: Select huffman code tables for bigvalues regions */ 1325/* subdivides the bigvalue region which will use separate Huffman tables */
2146/*************************************************************************/ 1326/*************************************************************************/
2147void bigv_tab_select( uint16 ix[SAMP_PER_FRAME2], side_info_t *cod_info ) 1327void subdivide(side_info_t *si)
2148{ 1328{
2149 cod_info->table_select[0] = 0; 1329 int scfb, count0, count1;
2150 cod_info->table_select[1] = 0;
2151 cod_info->table_select[2] = 0;
2152 1330
2153 if( cod_info->address1 > 0 ) 1331 if( !si->address3 )
2154 cod_info->table_select[0] = new_choose_table(ix, 0 , cod_info->address1); 1332 { /* no bigvalue region */
2155 1333 si->region_0_1 = 0;
2156 if( cod_info->address2 > cod_info->address1 ) 1334 si->address1 = 0;
2157 cod_info->table_select[1] = new_choose_table(ix, cod_info->address1, cod_info->address2); 1335 si->address2 = 0;
2158 1336 }
2159 if( cod_info->big_values<<1 > cod_info->address2 ) 1337 else
2160 cod_info->table_select[2] = new_choose_table(ix, cod_info->address2, cod_info->big_values<<1); 1338 {
1339 /* Calculate scale factor band index */
1340 for(scfb=0; scalefac[scfb] < si->address3; )
1341 scfb++;
1342
1343 count0 = subdv_table[scfb].region0_cnt;
1344 count1 = subdv_table[scfb].region1_cnt;
1345
1346 si->region_0_1 = (count0 << 3) | count1;
1347 si->address1 = scalefac[count0 + 1];
1348 si->address2 = scalefac[count0 + 1 + count1 + 1];
1349 }
2161} 1350}
2162 1351
2163/*************************************************************************/ 1352/*******************************************************************/
2164/* Function: Count the number of bits necessary to code the bigvalues region */ 1353/* Count the number of bits necessary to code the bigvalues region */
2165/*************************************************************************/ 1354/*******************************************************************/
2166int bigv_bitcount(uint16 ix[SAMP_PER_FRAME2], side_info_t *gi) 1355int bigv_bitcount(short *ix, side_info_t *gi)
2167{ 1356{
2168 int bits = 0; 1357 int b1=0, b2=0, b3=0;
2169 uint32 table;
2170 1358
2171 if((table=gi->table_select[0])) /* region0 */ 1359 /* Select huffman code tables for bigvalues regions */
2172 bits += count_bit(ix, 0 , gi->address1, table); 1360 gi->table_select[0] = 0;
1361 gi->table_select[1] = 0;
1362 gi->table_select[2] = 0;
2173 1363
2174 if((table=gi->table_select[1])) /* region1 */ 1364 if( gi->address1 > 0 ) /* region0 */
2175 bits += count_bit(ix, gi->address1, gi->address2, table); 1365 gi->table_select[0] = choose_table(ix, 0 , gi->address1, &b1);
2176 1366
2177 if((table=gi->table_select[2])) /* region2 */ 1367 if( gi->address2 > gi->address1 ) /* region1 */
2178 bits += count_bit(ix, gi->address2, gi->address3, table); 1368 gi->table_select[1] = choose_table(ix, gi->address1, gi->address2, &b2);
2179 1369
2180 return bits; 1370 if( gi->address3 > gi->address2 ) /* region2 */
2181} 1371 gi->table_select[2] = choose_table(ix, gi->address2, gi->address3, &b3);
2182 1372
2183int quantcnt; 1373 return b1+b2+b3;
1374}
2184 1375
2185/* Speed up the outer_loop code which is called by iteration_loop. 1376int quantize_and_count_bits(int *xr, short *ix, side_info_t *si)
2186 The outer_loop function precedes the call to the function inner_loop
2187 with a call to bin_search gain defined below,
2188 which returns a good starting quantizerStepSize. */
2189int quantize_and_count_bits(int xr[SAMP_PER_FRAME2], uint16 ix[SAMP_PER_FRAME2], side_info_t *cod_info)
2190{ 1377{
2191 int bits = 10000; 1378 int bits = 10000;
2192 1379
2193 quantcnt++; 1380 if(quantize_int(xr, ix, si))
2194
2195 if(quantize_int(xr, ix, cod_info))
2196 { 1381 {
2197 bits = calc_runlen(ix, cod_info); /* rzero,count1,big_values*/ 1382 bits = calc_runlen(ix, si); /* rzero,count1,address3 */
2198 subdivide(cod_info); /* bigvalues sfb division */ 1383 subdivide(si); /* bigvalues sfb division */
2199 bigv_tab_select(ix,cod_info); /* codebook selection*/ 1384 bits += bigv_bitcount(ix,si); /* bit count */
2200 bits += bigv_bitcount(ix,cod_info); /* bit count */
2201 } 1385 }
2202 1386
2203 return bits; 1387 return bits;
2204} 1388}
2205 1389
2206/******************************************************************************/ 1390/***********************************************************************/
2207/* The code selects the best quantizerStepSize for a particular set of scalefacs */ 1391/* The code selects the best quantStep for a particular set of scalefacs */
2208/******************************************************************************/ 1392/***********************************************************************/
2209int inner_loop_int(int xr[2][2][SAMP_PER_FRAME2], int max_bits, side_info_t *cod_info, int gr, int ch ) 1393int inner_loop(int *xr, int max_bits, side_info_t *si)
2210{ 1394{
2211 int *xrs; /* int[SAMP_PER_FRAME2] *xr; */ 1395 int bits;
2212 uint16 *ix; /* int[SAMP_PER_FRAME2] *ix; */
2213 int bits;
2214 1396
2215 xrs = &xr[gr][ch][0]; 1397 while((bits=quantize_and_count_bits(xr, enc_data, si)) < max_bits-64)
2216 ix = enc_data[gr][ch];
2217
2218 while((bits=quantize_and_count_bits(xrs, ix, cod_info)) < max_bits-64)
2219 { 1398 {
2220 if(cod_info->quantizerStepSize == 0) 1399 if(si->quantStep == 0)
2221 break; 1400 break;
2222 1401
2223 if(cod_info->quantizerStepSize <= 2) 1402 if(si->quantStep <= 2)
2224 cod_info->quantizerStepSize = 0; 1403 si->quantStep = 0;
2225 else 1404 else
2226 cod_info->quantizerStepSize -= 2; 1405 si->quantStep -= 2;
2227 } 1406 }
2228 1407
2229 while(bits > max_bits) 1408 while(bits > max_bits)
2230 { 1409 {
2231 cod_info->quantizerStepSize++; 1410 si->quantStep++;
2232 bits = quantize_and_count_bits(xrs, ix, cod_info); 1411 bits = quantize_and_count_bits(xr, enc_data, si);
2233 } 1412 }
2234 1413
2235 return bits; 1414 return bits;
2236} 1415}
2237 1416
2238/************************************************************************/ 1417void iteration_loop(int *xr, side_info_t *si, int gr_cnt)
2239/* iteration_loop() */
2240/************************************************************************/
2241void iteration_loop(int mdct_freq_org[2][2][SAMP_PER_FRAME2], side_info_t cod_info[2][2], int mean_bits)
2242{ 1418{
2243 int max_bits; 1419 int remain, tar_bits, max_bits = cfg.mean_bits;
2244 int ch, gr; 1420
2245 int ResvSize = 0; /* Layer3 bit reservoir: Described in C.1.5.4.2.2 of the IS */ 1421 /* distribute reserved bits to remaining granules */
2246 1422 tar_bits = max_bits + (cfg.ResvSize / gr_cnt & ~7);
2247 for(gr=2; gr--; ) 1423 if(tar_bits > max_bits + max_bits/2)
1424 tar_bits = max_bits + max_bits/2;
1425
1426 si->part2_3_length = inner_loop(xr, tar_bits, si);
1427 si->global_gain = si->quantStep + 142 - si->additStep;
1428
1429 /* unused bits of the reservoir can be used for remaining granules */
1430 cfg.ResvSize += max_bits - si->part2_3_length;
1431
1432 /* end: distribute the reserved bits to one or two granules */
1433 if(gr_cnt == 1)
2248 { 1434 {
2249 for(ch=cfg.channels; ch--; ) 1435 si->part2_3_length += cfg.ResvSize;
1436 /* mp3 format allows max 12bits for granule length */
1437 if(si->part2_3_length > 4092)
2250 { 1438 {
2251 /* calculation of number of available bit( per granule ) */ 1439 remain = (si->part2_3_length - 4092 + 31) >> 5;
2252 max_bits = mean_bits / cfg.channels; 1440 si->part2_3_length -= remain << 5;
2253 1441 si[-1].part2_3_length += remain << 5;
2254 cod_info[gr][ch].big_values = 0; 1442
2255 cod_info[gr][ch].count1 = 0; 1443 while(remain--)
2256 cod_info[gr][ch].table_select[0] = 0; 1444 putbits(~0, 32);
2257 cod_info[gr][ch].table_select[1] = 0;
2258 cod_info[gr][ch].table_select[2] = 0;
2259 cod_info[gr][ch].region0_count = 0;
2260 cod_info[gr][ch].region1_count = 0;
2261 cod_info[gr][ch].table_select[3] = 0;
2262 cod_info[gr][ch].part2_3_length = inner_loop_int(mdct_freq_org, max_bits, &cod_info[gr][ch], gr, ch);
2263 cod_info[gr][ch].global_gain = cod_info[gr][ch].quantizerStepSize + 210 - 0x40;
2264
2265 /* Readjusts the size of the reservoir to reflect the granule's usage */
2266 ResvSize += max_bits - cod_info[gr][ch].part2_3_length;
2267 } 1445 }
2268 } 1446 }
2269
2270/* Makes sure that the reservoir size is within limits, possibly by adding
2271 stuffing bits. Note that stuffing bits are added by increasing a granule's
2272 part2_3_length */
2273 cod_info[0][0].part2_3_length += ResvSize;
2274} 1447}
2275 1448
2276/*-------------------------------------------------------------------*/
2277/* Function: Calculation of the MDCT */
2278/* In the case of long blocks ( block_type 0,1,3 ) there are */
2279/* 36 coefficents in the time domain and 18 in the frequency */
2280/* domain. */
2281/*-------------------------------------------------------------------*/
2282 1449
2283/* TODO: This MDCT implementation is very crude, and should be replaced by 1450/* returns sum_j=0^31 a[j]*cos(PI*j*(k+1/2)/32), 0<=k<32 */
2284 a completely different algorithm. */ 1451void window_subband1(short *wk, int sb0[SBLIMIT], int sb1[SBLIMIT]) ICODE_ATTR;
2285void mdct_int( int *in, int *out ) 1452void window_subband1(short *wk, int sb0[SBLIMIT], int sb1[SBLIMIT])
2286{ 1453{
2287 int m, tmp=0; 1454 int k, i, u, v;
2288 1455 short *wp, *x1, *x2;
2289 for(m=18; m--; ) 1456
2290 {
2291#ifdef CPU_COLDFIRE 1457#ifdef CPU_COLDFIRE
2292 { int *wint = win_int[m]; 1458 int s0, s1, t0, t1;
2293 int *indat = in; 1459
1460 for(k=0; k<18; k++, wk+=64, sb0+=SBLIMIT, sb1+=SBLIMIT)
1461 {
1462 wp = enwindow;
1463 x1 = wk;
1464 x2 = x1 - 124;
2294 1465
1466 for(i=-15; i<0; i++)
1467 {
2295 asm volatile( 1468 asm volatile(
2296 "movem.l (%[indat]), %%d0-%%d7\n" 1469 "move.l (-224*4,%[x2]), %%d4\n" /* d4 = x2[-224] */
2297 "move.l (%[wint])+, %%a5\n" 1470 "movem.l (%[wp]), %%d0-%%d3\n" /* load 8 values */
2298 "mac.l %%d0, %%a5, (%[wint])+, %%a5, %%acc0\n" 1471 "mac.w %%d0u, %%d4u, %%acc0\n"
2299 "mac.l %%d1, %%a5, (%[wint])+, %%a5, %%acc0\n" 1472 "mac.w %%d0u, %%d4l, (-160*4,%[x2]), %%d4, %%acc1\n"
2300 "mac.l %%d2, %%a5, (%[wint])+, %%a5, %%acc0\n" 1473 "mac.w %%d0l, %%d4u, %%acc0\n"
2301 "mac.l %%d3, %%a5, (%[wint])+, %%a5, %%acc0\n" 1474 "mac.w %%d0l, %%d4l, ( -96*4,%[x2]), %%d4, %%acc1\n"
2302 "mac.l %%d4, %%a5, (%[wint])+, %%a5, %%acc0\n" 1475 "mac.w %%d1u, %%d4u, %%acc0\n"
2303 "mac.l %%d5, %%a5, (%[wint])+, %%a5, %%acc0\n" 1476 "mac.w %%d1u, %%d4l, ( -32*4,%[x2]), %%d4, %%acc1\n"
2304 "mac.l %%d6, %%a5, (%[wint])+, %%a5, %%acc0\n" 1477 "mac.w %%d1l, %%d4u, %%acc0\n"
2305 "mac.l %%d7, %%a5, (%[wint])+, %%a5, %%acc0\n" 1478 "mac.w %%d1l, %%d4l, ( 32*4,%[x2]), %%d4, %%acc1\n"
2306 "movem.l (32,%[indat]), %%d0-%%d7\n" 1479 "mac.w %%d2u, %%d4u, %%acc0\n"
2307 "mac.l %%d0, %%a5, (%[wint])+, %%a5, %%acc0\n" 1480 "mac.w %%d2u, %%d4l, ( 96*4,%[x2]), %%d4, %%acc1\n"
2308 "mac.l %%d1, %%a5, (%[wint])+, %%a5, %%acc0\n" 1481 "mac.w %%d2l, %%d4u, %%acc0\n"
2309 "mac.l %%d2, %%a5, (%[wint])+, %%a5, %%acc0\n" 1482 "mac.w %%d2l, %%d4l, ( 160*4,%[x2]), %%d4, %%acc1\n"
2310 "mac.l %%d3, %%a5, (%[wint])+, %%a5, %%acc0\n" 1483 "mac.w %%d3u, %%d4u, %%acc0\n"
2311 "mac.l %%d4, %%a5, (%[wint])+, %%a5, %%acc0\n" 1484 "mac.w %%d3u, %%d4l, ( 224*4,%[x2]), %%d4, %%acc1\n"
2312 "mac.l %%d5, %%a5, (%[wint])+, %%a5, %%acc0\n" 1485 "mac.w %%d3l, %%d4u, %%acc0\n"
2313 "mac.l %%d6, %%a5, (%[wint])+, %%a5, %%acc0\n" 1486 "mac.w %%d3l, %%d4l, (-256*4,%[x1]), %%d4, %%acc1\n"
2314 "mac.l %%d7, %%a5, (%[wint])+, %%a5, %%acc0\n" 1487 "movem.l (16,%[wp]), %%d0-%%d3\n" /* load 8 values */
2315 "movem.l (64,%[indat]), %%d0-%%d7\n" 1488 "mac.w %%d0u, %%d4u, %%acc0\n"
2316 "mac.l %%d0, %%a5, (%[wint])+, %%a5, %%acc0\n" 1489 "mac.w %%d0u, %%d4l, (-192*4,%[x1]), %%d4, %%acc1\n"
2317 "mac.l %%d1, %%a5, (%[wint])+, %%a5, %%acc0\n" 1490 "mac.w %%d0l, %%d4u, %%acc0\n"
2318 "mac.l %%d2, %%a5, (%[wint])+, %%a5, %%acc0\n" 1491 "mac.w %%d0l, %%d4l, (-128*4,%[x1]), %%d4, %%acc1\n"
2319 "mac.l %%d3, %%a5, (%[wint])+, %%a5, %%acc0\n" 1492 "mac.w %%d1u, %%d4u, %%acc0\n"
2320 "mac.l %%d4, %%a5, (%[wint])+, %%a5, %%acc0\n" 1493 "mac.w %%d1u, %%d4l, ( -64*4,%[x1]), %%d4, %%acc1\n"
2321 "mac.l %%d5, %%a5, (%[wint])+, %%a5, %%acc0\n" 1494 "mac.w %%d1l, %%d4u, %%acc0\n"
2322 "mac.l %%d6, %%a5, (%[wint])+, %%a5, %%acc0\n" 1495 "mac.w %%d1l, %%d4l, ( 0*4,%[x1]), %%d4, %%acc1\n"
2323 "mac.l %%d7, %%a5, (%[wint])+, %%a5, %%acc0\n" 1496 "mac.w %%d2u, %%d4u, %%acc0\n"
2324 "movem.l (96,%[indat]), %%d0-%%d7\n" 1497 "mac.w %%d2u, %%d4l, ( 64*4,%[x1]), %%d4, %%acc1\n"
2325 "mac.l %%d0, %%a5, (%[wint])+, %%a5, %%acc0\n" 1498 "mac.w %%d2l, %%d4u, %%acc0\n"
2326 "mac.l %%d1, %%a5, (%[wint])+, %%a5, %%acc0\n" 1499 "mac.w %%d2l, %%d4l, ( 128*4,%[x1]), %%d4, %%acc1\n"
2327 "mac.l %%d2, %%a5, (%[wint])+, %%a5, %%acc0\n" 1500 "mac.w %%d3u, %%d4u, %%acc0\n"
2328 "mac.l %%d3, %%a5, (%[wint])+, %%a5, %%acc0\n" 1501 "mac.w %%d3u, %%d4l, ( 192*4,%[x1]), %%d4, %%acc1\n"
2329 "mac.l %%d4, %%a5, (%[wint])+, %%a5, %%acc0\n" 1502 "mac.w %%d3l, %%d4u, %%acc0\n"
2330 "mac.l %%d5, %%a5, (%[wint])+, %%a5, %%acc0\n" 1503 "mac.w %%d3l, %%d4l, ( 224*4,%[x1]), %%d4, %%acc1\n"
2331 "mac.l %%d6, %%a5, (%[wint])+, %%a5, %%acc0\n" 1504 "movclr.l %%acc0, %%d0\n"
2332 "mac.l %%d7, %%a5, (%[wint])+, %%a5, %%acc0\n" 1505 "move.l %%d0, %[s0]\n"
2333 "movem.l (128,%[indat]), %%d0-%%d3\n" 1506 "movclr.l %%acc1, %%d0\n"
2334 "mac.l %%d0, %%a5, (%[wint])+, %%a5, %%acc0\n" 1507 "move.l %%d0, %[s1]\n"
2335 "mac.l %%d1, %%a5, (%[wint])+, %%a5, %%acc0\n" 1508
2336 "mac.l %%d2, %%a5, (%[wint])+, %%a5, %%acc0\n" 1509 "movem.l (%[wp]), %%d0-%%d3\n" /* load 8 values */
2337 "mac.l %%d3, %%a5, %%acc0\n" 1510 "mac.w %%d0u, %%d4u, %%acc0\n"
2338 "movclr.l %%acc0, %[tmp]" 1511 "mac.w %%d0u, %%d4l, ( 160*4,%[x1]), %%d4, %%acc1\n"
2339 : [wint] "+a" (wint), [tmp] "+r" (tmp) : [indat] "a" (indat) 1512 "mac.w %%d0l, %%d4u, %%acc0\n"
2340 : "d0", "d1", "d2", "d3", "d4", "d5", "d6", "d7", "a5"); 1513 "mac.w %%d0l, %%d4l, ( 96*4,%[x1]), %%d4, %%acc1\n"
1514 "mac.w %%d1u, %%d4u, %%acc0\n"
1515 "mac.w %%d1u, %%d4l, ( 32*4,%[x1]), %%d4, %%acc1\n"
1516 "mac.w %%d1l, %%d4u, %%acc0\n"
1517 "mac.w %%d1l, %%d4l, ( -32*4,%[x1]), %%d4, %%acc1\n"
1518 "mac.w %%d2u, %%d4u, %%acc0\n"
1519 "mac.w %%d2u, %%d4l, ( -96*4,%[x1]), %%d4, %%acc1\n"
1520 "mac.w %%d2l, %%d4u, %%acc0\n"
1521 "mac.w %%d2l, %%d4l, (-160*4,%[x1]), %%d4, %%acc1\n"
1522 "mac.w %%d3u, %%d4u, %%acc0\n"
1523 "mac.w %%d3u, %%d4l, (-224*4,%[x1]), %%d4, %%acc1\n"
1524 "mac.w %%d3l, %%d4u, %%acc0\n"
1525 "mac.w %%d3l, %%d4l, ( 256*4,%[x2]), %%d4, %%acc1\n"
1526 "movem.l (32,%[wp]), %%d0-%%d3\n" /* load 8 values */
1527 "mac.w %%d0u, %%d4u, %%acc0\n"
1528 "mac.w %%d0u, %%d4l, ( 192*4,%[x2]), %%d4, %%acc1\n"
1529 "mac.w %%d0l, %%d4u, %%acc0\n"
1530 "mac.w %%d0l, %%d4l, ( 128*4,%[x2]), %%d4, %%acc1\n"
1531 "mac.w %%d1u, %%d4u, %%acc0\n"
1532 "mac.w %%d1u, %%d4l, ( 64*4,%[x2]), %%d4, %%acc1\n"
1533 "mac.w %%d1l, %%d4u, %%acc0\n"
1534 "mac.w %%d1l, %%d4l, ( 0*4,%[x2]), %%d4, %%acc1\n"
1535 "mac.w %%d2u, %%d4u, %%acc0\n"
1536 "mac.w %%d2u, %%d4l, ( -64*4,%[x2]), %%d4, %%acc1\n"
1537 "mac.w %%d2l, %%d4u, %%acc0\n"
1538 "mac.w %%d2l, %%d4l, (-128*4,%[x2]), %%d4, %%acc1\n"
1539 "mac.w %%d3u, %%d4u, %%acc0\n"
1540 "mac.w %%d3u, %%d4l, (-192*4,%[x2]), %%d4, %%acc1\n"
1541 "mac.w %%d3l, %%d4u, %%acc0\n"
1542 "mac.w %%d3l, %%d4l, %%acc1\n"
1543 "movclr.l %%acc0, %%d0\n"
1544 "move.l %%d0, %[t0]\n"
1545 "movclr.l %%acc1, %%d0\n"
1546 "move.l %%d0, %[t1]\n"
1547
1548 : [x1] "+a" (x1), [x2] "+a" (x2), [s0] "+m" (s0), [t0] "+m" (t0),
1549 [s1] "+m" (s1), [t1] "+m" (t1)
1550 : [wp] "a" (wp) : "d0", "d1", "d2", "d3", "d4");
1551
1552 sb0[30+i*2] = shft4(t0) + shft13(s0) * wp[24];
1553 sb0[31+i*2] = shft13(t0) * wp[25] - shft13(s0) * wp[26];
1554 sb1[30+i*2] = shft4(t1) + shft13(s1) * wp[24];
1555 sb1[31+i*2] = shft13(t1) * wp[25] - shft13(s1) * wp[26];
1556 wp += 27;
1557 x1 -= 2;
1558 x2 += 2;
2341 } 1559 }
2342#else
2343 int k;
2344 for(k=36,tmp=0; k--; )
2345 tmp += in[k] * win_int[m][k];
2346#endif
2347 out[m] = (tmp + 16384) >> 15;
2348 }
2349}
2350 1560
1561 asm volatile(
1562 "move.l ( -32*4,%[x1]), %%d4\n" /* d4 = x1[-32] */
1563 "movem.l (%[wp]), %%d0-%%d3\n" /* load 8 values */
1564
1565 "mac.w %%d0u, %%d4u, %%acc0\n"
1566 "mac.w %%d0u, %%d4l, ( -96*4,%[x1]), %%d4, %%acc1\n"
1567 "mac.w %%d0l, %%d4u, %%acc0\n"
1568 "mac.w %%d0l, %%d4l, (-160*4,%[x1]), %%d4, %%acc1\n"
1569 "mac.w %%d1u, %%d4u, %%acc0\n"
1570 "mac.w %%d1u, %%d4l, (-224*4,%[x1]), %%d4, %%acc1\n"
1571 "mac.w %%d1l, %%d4u, %%acc0\n"
1572 "mac.w %%d1l, %%d4l, ( 32*4,%[x1]), %%d4, %%acc1\n"
1573 "mac.w %%d2u, %%d4u, %%acc0\n"
1574 "mac.w %%d2u, %%d4l, ( 96*4,%[x1]), %%d4, %%acc1\n"
1575 "mac.w %%d2l, %%d4u, %%acc0\n"
1576 "mac.w %%d2l, %%d4l, ( 160*4,%[x1]), %%d4, %%acc1\n"
1577 "mac.w %%d3u, %%d4u, %%acc0\n"
1578 "mac.w %%d3u, %%d4l, ( 224*4,%[x1]), %%d4, %%acc1\n"
1579 "mac.w %%d3l, %%d4u, %%acc0\n"
1580 "mac.w %%d3l, %%d4l, ( -16*4,%[x1]), %%d4, %%acc1\n"
1581 "movclr.l %%acc0, %%d0\n"
1582 "move.l %%d0, %[s0]\n"
1583 "movclr.l %%acc1, %%d0\n"
1584 "move.l %%d0, %[s1]\n"
1585
1586 "movem.l (16,%[wp]), %%d0-%%d3\n" /* load 8 values */
1587 "mac.w %%d0u, %%d4u, %%acc0\n"
1588 "mac.w %%d0u, %%d4l, ( -48*4,%[x1]), %%d4, %%acc1\n"
1589 "mac.w %%d1u, %%d4u, %%acc0\n"
1590 "mac.w %%d1u, %%d4l, ( 16*4,%[x1]), %%d4, %%acc1\n"
1591 "mac.w %%d1l, %%d4u, %%acc0\n"
1592 "mac.w %%d1l, %%d4l, ( -80*4,%[x1]), %%d4, %%acc1\n"
1593 "mac.w %%d2u, %%d4u, %%acc0\n"
1594 "mac.w %%d2u, %%d4l, ( 48*4,%[x1]), %%d4, %%acc1\n"
1595 "mac.w %%d2u, %%d4u, %%acc0\n"
1596 "mac.w %%d2u, %%d4l, (-112*4,%[x1]), %%d4, %%acc1\n"
1597 "mac.w %%d3u, %%d4u, %%acc0\n"
1598 "mac.w %%d3u, %%d4l, ( 80*4,%[x1]), %%d4, %%acc1\n"
1599 "mac.w %%d3l, %%d4u, %%acc0\n"
1600 "mac.w %%d3l, %%d4l, (-144*4,%[x1]), %%d4, %%acc1\n"
1601 "movem.l (32,%[wp]), %%d0-%%d3\n" /* load 8 values */
1602 "mac.w %%d0u, %%d4u, %%acc0\n"
1603 "mac.w %%d0u, %%d4l, ( 112*4,%[x1]), %%d4, %%acc1\n"
1604 "mac.w %%d0u, %%d4u, %%acc0\n"
1605 "mac.w %%d0u, %%d4l, (-176*4,%[x1]), %%d4, %%acc1\n"
1606 "mac.w %%d1u, %%d4u, %%acc0\n"
1607 "mac.w %%d1u, %%d4l, ( 144*4,%[x1]), %%d4, %%acc1\n"
1608 "mac.w %%d1l, %%d4u, %%acc0\n"
1609 "mac.w %%d1l, %%d4l, (-208*4,%[x1]), %%d4, %%acc1\n"
1610 "mac.w %%d2u, %%d4u, %%acc0\n"
1611 "mac.w %%d2u, %%d4l, ( 176*4,%[x1]), %%d4, %%acc1\n"
1612 "mac.w %%d2u, %%d4u, %%acc0\n"
1613 "mac.w %%d2u, %%d4l, (-240*4,%[x1]), %%d4, %%acc1\n"
1614 "mac.w %%d3u, %%d4u, %%acc0\n"
1615 "mac.w %%d3u, %%d4l, ( 208*4,%[x1]), %%d4, %%acc1\n"
1616 "mac.w %%d3l, %%d4u, %%acc0\n"
1617 "mac.w %%d3l, %%d4l, %%acc1\n"
1618 "movclr.l %%acc0, %%d0\n"
1619 "move.l %%d0, %[t0]\n"
1620 "movclr.l %%acc1, %%d0\n"
1621 "move.l %%d0, %[t1]\n"
1622
1623 : [x1] "+a" (x1), [s0] "+m" (s0), [t0] "+m" (t0),
1624 [s1] "+m" (s1), [t1] "+m" (t1)
1625 : [wp] "a" (wp) : "d0", "d1", "d2", "d3", "d4");
1626
1627 u = shft4(s0 - t0);
1628 v = shft4(s0 + t0);
1629 t0 = sb0[14];
1630 s0 = sb0[15] - t0;
1631
1632 sb0[31] = v + t0; /* A0 */
1633 sb0[30] = u + s0; /* A1 */
1634 sb0[15] = u - s0; /* A2 */
1635 sb0[14] = v - t0; /* A3 */
1636
1637 u = shft4(s1 - t1);
1638 v = shft4(s1 + t1);
1639 t1 = sb1[14];
1640 s1 = sb1[15] - t1;
1641
1642 sb1[31] = v + t1; /* A0 */
1643 sb1[30] = u + s1; /* A1 */
1644 sb1[15] = u - s1; /* A2 */
1645 sb1[14] = v - t1; /* A3 */
1646 }
1647#else
1648 int ch, s, t, *a;
2351 1649
2352void mdct_sub_int(int sb_sample[2][3][18][SBLIMIT], int (*mdct_freq)[2][SAMP_PER_FRAME2]) 1650 for(ch=0; ch<cfg.channels; ch++)
2353{ 1651 {
2354 int (*mdct_enc)[2][32][18] = (int (*)[2][32][18]) mdct_freq; 1652 a = ch ? sb1 : sb0;
2355 int ch, gr, band, k, bu, bd; 1653 for(k=0; k<18; k++, wk+=64, a+=SBLIMIT)
2356
2357 for(gr=0; gr<2; gr++)
2358 for(ch=cfg.channels; ch--; )
2359 { 1654 {
2360 /* 576=4*16*9: Compensate for inversion in the analysis filter */ 1655 wp = enwindow;
2361 for(band=33; (band-=2)>0; ) 1656 x1 = wk;
2362 for(k=19; (k-=2)>0; ) 1657 x2 = x1 - 124;
2363 sb_sample[ch][gr+1][k][band] = -sb_sample[ch][gr+1][k][band];
2364 1658
2365 /* 82944=4*32*648: Perform imdct of 18 previous subband samples + 18 current subband samples */ 1659 /* x1[-572] .... x1[448] = 1022 */
2366 for(band=32; band--; ) 1660 /* 18*4*16*32 */
1661 for(i=-15; i<0; i++)
2367 { 1662 {
2368 for(k=18; k--; ) 1663 s = (int)x2[-224*2] * wp[ 0]; t = (int)x1[ 224*2] * wp[ 0];
2369 { 1664 s += (int)x2[-160*2] * wp[ 1]; t += (int)x1[ 160*2] * wp[ 1];
2370 mdct_in[k] = sb_sample[ch][ gr ][k][band]; 1665 s += (int)x2[- 96*2] * wp[ 2]; t += (int)x1[ 96*2] * wp[ 2];
2371 mdct_in[k+18] = sb_sample[ch][gr+1][k][band]; 1666 s += (int)x2[- 32*2] * wp[ 3]; t += (int)x1[ 32*2] * wp[ 3];
2372 } 1667 s += (int)x2[ 32*2] * wp[ 4]; t += (int)x1[- 32*2] * wp[ 4];
2373 1668 s += (int)x2[ 96*2] * wp[ 5]; t += (int)x1[- 96*2] * wp[ 5];
2374 mdct_int(mdct_in, &mdct_enc[gr][ch][band][0]); 1669 s += (int)x2[ 160*2] * wp[ 6]; t += (int)x1[-160*2] * wp[ 6];
1670 s += (int)x2[ 224*2] * wp[ 7]; t += (int)x1[-224*2] * wp[ 7];
1671 s += (int)x1[-256*2] * wp[ 8]; t += (int)x2[ 256*2] * wp[16];
1672 s += (int)x1[-192*2] * wp[ 9]; t += (int)x2[ 192*2] * wp[17];
1673 s += (int)x1[-128*2] * wp[10]; t += (int)x2[ 128*2] * wp[18];
1674 s += (int)x1[- 64*2] * wp[11]; t += (int)x2[ 64*2] * wp[19];
1675 s += (int)x1[ 0*2] * wp[12]; t += (int)x2[ 0*2] * wp[20];
1676 s += (int)x1[ 64*2] * wp[13]; t += (int)x2[- 64*2] * wp[21];
1677 s += (int)x1[ 128*2] * wp[14]; t += (int)x2[-128*2] * wp[22];
1678 s += (int)x1[ 192*2] * wp[15]; t += (int)x2[-192*2] * wp[23];
1679
1680 a[30+i*2] = shft4(t) + shft13(s) * wp[24];
1681 a[31+i*2] = shft13(t) * wp[25] - shft13(s) * wp[26];
1682 wp += 27;
1683 x1 -= 2;
1684 x2 += 2;
2375 } 1685 }
2376 1686
2377 /* 1024=4*256: Perform aliasing reduction butterfly*/ 1687 t = (int)x1[- 16*2] * wp[ 8]; s = (int)x1[ -32*2] * wp[0];
2378 for(band=31; band--; ) 1688 t += ((int)x1[- 48*2]-x1[ 16*2]) * wp[10]; s += (int)x1[ -96*2] * wp[1];
2379 for(k=8; k--; ) 1689 t += ((int)x1[- 80*2]+x1[ 48*2]) * wp[12]; s += (int)x1[-160*2] * wp[2];
2380 { 1690 t += ((int)x1[-112*2]-x1[ 80*2]) * wp[14]; s += (int)x1[-224*2] * wp[3];
2381 bu = mdct_enc[gr][ch][band][17-k] * cs_int[k] + mdct_enc[gr][ch][band+1][k] * ca_int[k]; 1691 t += ((int)x1[-144*2]+x1[112*2]) * wp[16]; s += (int)x1[ 32*2] * wp[4];
2382 bd = mdct_enc[gr][ch][band+1][k] * cs_int[k] - mdct_enc[gr][ch][band][17-k] * ca_int[k]; 1692 t += ((int)x1[-176*2]-x1[144*2]) * wp[18]; s += (int)x1[ 96*2] * wp[5];
2383 mdct_enc[gr][ch][band][17-k] = (bu + 16384) >> 15; 1693 t += ((int)x1[-208*2]+x1[176*2]) * wp[20]; s += (int)x1[ 160*2] * wp[6];
2384 mdct_enc[gr][ch][band+1][k] = (bd + 16384) >> 15; 1694 t += ((int)x1[-240*2]-x1[208*2]) * wp[22]; s += (int)x1[ 224*2] * wp[7];
2385 } 1695
1696 u = shft4(s - t);
1697 v = shft4(s + t);
1698 t = a[14];
1699 s = a[15] - t;
1700
1701 a[31] = v + t; /* A0 */
1702 a[30] = u + s; /* A1 */
1703 a[15] = u - s; /* A2 */
1704 a[14] = v - t; /* A3 */
2386 } 1705 }
2387 1706 wk -= 18 * 64 - 1; /* rewind wk (to next channel start) */
2388 /* Save latest granule's subband samples to be used in the next mdct call */ 1707 }
2389 for(ch=cfg.channels ;ch--; ) 1708#endif
2390 memcpy(sb_sample[ch][0], sb_sample[ch][2], 18 * 32 * sizeof(int));
2391} 1709}
2392 1710
2393void fill_subband(long *buffer, int off) 1711void window_subband2(short *x1, int a[SBLIMIT]) ICODE_ATTR;
1712void window_subband2(short *x1, int a[SBLIMIT])
2394{ 1713{
2395 long i, t; 1714 int xr;
2396 1715 short *wp = enwindow;
2397 /* replace 32 oldest left/right samples with 32 new samples */ 1716 short *x2 = x1 - 124;
2398 if(enc_channels == 2) 1717
2399 { 1718 wp += 27 * 15;
2400 for(i=32; i--; ) 1719 x1 -= 2 * 15;
2401 { 1720 x2 += 2 * 15;
2402 t = *buffer++; 1721
2403 x_int0[i+off] = (short)(t >> 16); 1722 xr = a[28] - a[0]; a[0] += a[28]; a[28] = shft9(xr) * wp[-2*27+25];
2404 x_int1[i+off] = (short)t; 1723 xr = a[29] - a[1]; a[1] += a[29]; a[29] = shft9(xr) * wp[-2*27+25];
2405 } 1724 xr = a[26] - a[2]; a[2] += a[26]; a[26] = shft9(xr) * wp[-4*27+25];
2406 } 1725 xr = a[27] - a[3]; a[3] += a[27]; a[27] = shft9(xr) * wp[-4*27+25];
2407 else 1726 xr = a[24] - a[4]; a[4] += a[24]; a[24] = shft9(xr) * wp[-6*27+25];
2408 { 1727 xr = a[25] - a[5]; a[5] += a[25]; a[25] = shft9(xr) * wp[-6*27+25];
2409 for(i=32; i--; ) 1728 xr = a[22] - a[6]; a[6] += a[22]; a[22] = shft9(xr) * SQRT ;
2410 { 1729 xr = a[23] - a[7]; a[7] += a[23]; a[23] = shft9(xr) * SQRT - a[7];
2411 t = *buffer++; 1730 a[ 7] -= a[ 6];
2412 x_int0[i+off] = (short)((((t<<16)>>16) + (t>>16)) >> 1); 1731 a[22] -= a[ 7];
2413 } 1732 a[23] -= a[22];
2414 } 1733
1734 xr = a[ 6]; a[ 6] = a[31] - xr; a[31] = a[31] + xr;
1735 xr = a[ 7]; a[ 7] = a[30] - xr; a[30] = a[30] + xr;
1736 xr = a[22]; a[22] = a[15] - xr; a[15] = a[15] + xr;
1737 xr = a[23]; a[23] = a[14] - xr; a[14] = a[14] + xr;
1738
1739 xr = a[20] - a[ 8]; a[ 8] += a[20]; a[20] = shft9(xr) * wp[-10*27+25];
1740 xr = a[21] - a[ 9]; a[ 9] += a[21]; a[21] = shft9(xr) * wp[-10*27+25];
1741 xr = a[18] - a[10]; a[10] += a[18]; a[18] = shft9(xr) * wp[-12*27+25];
1742 xr = a[19] - a[11]; a[11] += a[19]; a[19] = shft9(xr) * wp[-12*27+25];
1743 xr = a[16] - a[12]; a[12] += a[16]; a[16] = shft9(xr) * wp[-14*27+25];
1744 xr = a[17] - a[13]; a[13] += a[17]; a[17] = shft9(xr) * wp[-14*27+25];
1745 xr =-a[20] + a[24]; a[20] += a[24]; a[24] = shft9(xr) * wp[-12*27+25];
1746 xr =-a[21] + a[25]; a[21] += a[25]; a[25] = shft9(xr) * wp[-12*27+25];
1747 xr = a[ 4] - a[ 8]; a[ 4] += a[ 8]; a[ 8] = shft9(xr) * wp[-12*27+25];
1748 xr = a[ 5] - a[ 9]; a[ 5] += a[ 9]; a[ 9] = shft9(xr) * wp[-12*27+25];
1749 xr = a[ 0] - a[12]; a[ 0] += a[12]; a[12] = shft9(xr) * wp[ -4*27+25];
1750 xr = a[ 1] - a[13]; a[ 1] += a[13]; a[13] = shft9(xr) * wp[ -4*27+25];
1751 xr = a[16] - a[28]; a[16] += a[28]; a[28] = shft9(xr) * wp[ -4*27+25];
1752 xr =-a[17] + a[29]; a[17] += a[29]; a[29] = shft9(xr) * wp[ -4*27+25];
1753
1754 xr = SQRT * shft9(a[ 2] - a[10]); a[ 2] += a[10]; a[10] = xr;
1755 xr = SQRT * shft9(a[ 3] - a[11]); a[ 3] += a[11]; a[11] = xr;
1756 xr = SQRT * shft9(a[26] - a[18]); a[18] += a[26]; a[26] = xr - a[18];
1757 xr = SQRT * shft9(a[27] - a[19]); a[19] += a[27]; a[27] = xr - a[19];
1758
1759 xr = a[ 2]; a[19] -= a[ 3]; a[ 3] -= xr; a[ 2] = a[31] - xr; a[31] += xr;
1760 xr = a[ 3]; a[11] -= a[19]; a[18] -= xr; a[ 3] = a[30] - xr; a[30] += xr;
1761 xr = a[18]; a[27] -= a[11]; a[19] -= xr; a[18] = a[15] - xr; a[15] += xr;
1762
1763 xr = a[19]; a[10] -= xr; a[19] = a[14] - xr; a[14] += xr;
1764 xr = a[10]; a[11] -= xr; a[10] = a[23] - xr; a[23] += xr;
1765 xr = a[11]; a[26] -= xr; a[11] = a[22] - xr; a[22] += xr;
1766 xr = a[26]; a[27] -= xr; a[26] = a[ 7] - xr; a[ 7] += xr;
1767
1768 xr = a[27]; a[27] = a[6] - xr; a[6] += xr;
1769
1770 xr = SQRT * shft9(a[ 0] - a[ 4]); a[ 0] += a[ 4]; a[ 4] = xr;
1771 xr = SQRT * shft9(a[ 1] - a[ 5]); a[ 1] += a[ 5]; a[ 5] = xr;
1772 xr = SQRT * shft9(a[16] - a[20]); a[16] += a[20]; a[20] = xr;
1773 xr = SQRT * shft9(a[17] - a[21]); a[17] += a[21]; a[21] = xr;
1774 xr =-SQRT * shft9(a[ 8] - a[12]); a[ 8] += a[12]; a[12] = xr - a[ 8];
1775 xr =-SQRT * shft9(a[ 9] - a[13]); a[ 9] += a[13]; a[13] = xr - a[ 9];
1776 xr =-SQRT * shft9(a[25] - a[29]); a[25] += a[29]; a[29] = xr - a[25];
1777 xr =-SQRT * shft9(a[24] + a[28]); a[24] -= a[28]; a[28] = xr - a[24];
1778
1779 xr = a[24] - a[16]; a[24] = xr;
1780 xr = a[20] - xr; a[20] = xr;
1781 xr = a[28] - xr; a[28] = xr;
1782
1783 xr = a[25] - a[17]; a[25] = xr;
1784 xr = a[21] - xr; a[21] = xr;
1785 xr = a[29] - xr; a[29] = xr;
1786
1787 xr = a[17] - a[1]; a[17] = xr;
1788 xr = a[ 9] - xr; a[ 9] = xr;
1789 xr = a[25] - xr; a[25] = xr;
1790 xr = a[ 5] - xr; a[ 5] = xr;
1791 xr = a[21] - xr; a[21] = xr;
1792 xr = a[13] - xr; a[13] = xr;
1793 xr = a[29] - xr; a[29] = xr;
1794
1795 xr = a[ 1] - a[0]; a[ 1] = xr;
1796 xr = a[16] - xr; a[16] = xr;
1797 xr = a[17] - xr; a[17] = xr;
1798 xr = a[ 8] - xr; a[ 8] = xr;
1799 xr = a[ 9] - xr; a[ 9] = xr;
1800 xr = a[24] - xr; a[24] = xr;
1801 xr = a[25] - xr; a[25] = xr;
1802 xr = a[ 4] - xr; a[ 4] = xr;
1803 xr = a[ 5] - xr; a[ 5] = xr;
1804 xr = a[20] - xr; a[20] = xr;
1805 xr = a[21] - xr; a[21] = xr;
1806 xr = a[12] - xr; a[12] = xr;
1807 xr = a[13] - xr; a[13] = xr;
1808 xr = a[28] - xr; a[28] = xr;
1809 xr = a[29] - xr; a[29] = xr;
1810
1811 xr = a[ 0]; a[ 0] += a[31]; a[31] -= xr;
1812 xr = a[ 1]; a[ 1] += a[30]; a[30] -= xr;
1813 xr = a[16]; a[16] += a[15]; a[15] -= xr;
1814 xr = a[17]; a[17] += a[14]; a[14] -= xr;
1815 xr = a[ 8]; a[ 8] += a[23]; a[23] -= xr;
1816 xr = a[ 9]; a[ 9] += a[22]; a[22] -= xr;
1817 xr = a[24]; a[24] += a[ 7]; a[ 7] -= xr;
1818 xr = a[25]; a[25] += a[ 6]; a[ 6] -= xr;
1819 xr = a[ 4]; a[ 4] += a[27]; a[27] -= xr;
1820 xr = a[ 5]; a[ 5] += a[26]; a[26] -= xr;
1821 xr = a[20]; a[20] += a[11]; a[11] -= xr;
1822 xr = a[21]; a[21] += a[10]; a[10] -= xr;
1823 xr = a[12]; a[12] += a[19]; a[19] -= xr;
1824 xr = a[13]; a[13] += a[18]; a[18] -= xr;
1825 xr = a[28]; a[28] += a[ 3]; a[ 3] -= xr;
1826 xr = a[29]; a[29] += a[ 2]; a[ 2] -= xr;
2415} 1827}
2416 1828
2417void filter_subband(int s[SBLIMIT], int off, int k) 1829void mdct_long(int *out, int *in) ICODE_ATTR;
1830void mdct_long(int *out, int *in)
2418{ 1831{
2419 short *enwindow = enwindow_int; 1832 int ct,st;
2420 int i, tmp = 0; 1833 int tc1, tc2, tc3, tc4, ts5, ts6, ts7, ts8;
2421#ifdef CPU_COLDFIRE 1834 int ts1, ts2, ts3, ts4, tc5, tc6, tc7, tc8;
2422 short *yint = y_int; 1835
2423#endif 1836 /* 1,2, 5,6, 9,10, 13,14, 17 */
2424 1837 tc1 = in[17] - in[ 9];
2425 1838 tc3 = in[15] - in[11];
2426 /* 36864=72*512: shift samples into proper window positions */ 1839 tc4 = in[14] - in[12];
2427#ifdef CPU_COLDFIRE 1840 ts5 = in[ 0] + in[ 8];
2428 { short *xint = &x_int[k][off]; 1841 ts6 = in[ 1] + in[ 7];
2429 1842 ts7 = in[ 2] + in[ 6];
2430 asm volatile( 1843 ts8 = in[ 3] + in[ 5];
2431 "moveq.l #32, %%d0\n" 1844
2432 "move.l %%d0, %[i]\n" /* set loop counter */ 1845 out[17] = (ts5 + ts7 - ts8) * cx[8] - (ts6 - in[4]) * cx[8];
2433 "move.l %[xint], %%d0\n" /* d0 = x_int[k] */ 1846 st = (ts5 + ts7 - ts8) * cx[7] + (ts6 - in[4]) * cx[8];
2434 "or.l #0x3ff, %%d0\n" 1847 ct = (tc1 - tc3 - tc4) * cx[6];
2435 "move.l %%d0, %%mask\n" /* set address mask */ 1848 out[5] = ct + st;
2436 "move.l (%[xint]), %%d4\n" /* d4 = x_int[k][off] */ 1849 out[6] = ct - st;
2437
2438 "loop_start:\n"
2439 "movem.l (%[enwindow]), %%d0-%%d3\n" /* load 4 values */
2440 "mac.w %%d0u, %%d4u, (0x080,%[xint])&, %%d5, %%acc0\n"
2441 "mac.w %%d0l, %%d5u, (0x100,%[xint])&, %%d6, %%acc0\n"
2442 "mac.w %%d1u, %%d6u, (0x180,%[xint])&, %%d7, %%acc0\n"
2443 "mac.w %%d1l, %%d7u, (0x200,%[xint])&, %%a2, %%acc0\n"
2444 "mac.w %%d2u, %%a2u, (0x280,%[xint])&, %%a3, %%acc0\n"
2445 "mac.w %%d2l, %%a3u, (0x300,%[xint])&, %%a4, %%acc0\n"
2446 "mac.w %%d3u, %%a4u, (0x380,%[xint])&, %%a5, %%acc0\n"
2447 "mac.w %%d3l, %%a5u, %%acc0\n"
2448
2449 "movem.l (16,%[enwindow]), %%d0-%%d3\n" /* load 8 values */
2450 "mac.w %%d0u, %%d4l, %%acc1\n"
2451 "mac.w %%d0l, %%d5l, %%acc1\n"
2452 "mac.w %%d1u, %%d6l, %%acc1\n"
2453 "mac.w %%d1l, %%d7l, %%acc1\n"
2454 "mac.w %%d2u, %%a2l, %%acc1\n"
2455 "mac.w %%d2l, %%a3l, %%acc1\n"
2456 "mac.w %%d3u, %%a4l, %%acc1\n"
2457 "addq.l #4, %[xint]\n" /* xint += 2 */
2458 "mac.w %%d3l, %%a5l, (%[xint])&, %%d4, %%acc1\n"
2459
2460 "movclr.l %%acc0, %%d5\n"
2461 "movclr.l %%acc1, %%d6\n"
2462 "move.l #262144, %%d7\n"
2463 "add.l %%d7, %%d5\n"
2464 "add.l %%d7, %%d6\n"
2465 "moveq.l #19, %%d7\n"
2466 "asr.l %%d7, %%d5\n"
2467 "asr.l %%d7, %%d6\n"
2468 "move.w %%d5, (%[yint])+\n"
2469 "move.w %%d6, (%[yint])+\n"
2470
2471 "add.l #32, %[enwindow]\n" /* enwindow += 16 */
2472
2473 "sub.l #1, %[i]\n"
2474 "jbne loop_start\n"
2475
2476 : [xint] "+a" (xint), [yint] "+a" (yint), [i] "+m" (i), [enwindow] "+a" (enwindow)
2477 :
2478 : "d0", "d1", "d2", "d3", "d4", "d5", "d6", "d7", "a2", "a3", "a4", "a5");
2479 }
2480#else
2481 for(i=0; i<64; i++)
2482 {
2483 for(j=0, tmp=0; j<512; j+=64)
2484 tmp += (int)x_int[k][(i+j+off)&(HAN_SIZE-1)] * (int)*(enwindow++);
2485 y_int[i] = (short)((tmp + (1<<18)) >> 19);
2486 }
2487#endif
2488
2489#ifdef CPU_COLDFIRE
2490 yint = y_int;
2491#endif
2492 1850
2493 /* 147456=72*2048 */ 1851 tc2 = (in[16] - in[10]) * cx[6];
2494 for(i=SBLIMIT; i--; ) // SBLIMIT: 32 1852 ts6 = ts6 * cx[7] + in[4] * cx[8];
2495 {
2496 short *filt = filter_int[i];
2497 1853
2498#ifdef CPU_COLDFIRE 1854 ct = tc1 * cx[0] + tc2 + tc3 * cx[1] + tc4 * cx[2];
2499 { 1855 st = -ts5 * cx[4] + ts6 - ts7 * cx[5] + ts8 * cx[3];
2500 asm volatile( 1856 out[1] = ct + st;
2501 "move.l (%[yint])+, %%a5\n" 1857 out[2] = ct - st;
2502 "movem.l (%[filt]), %%d0-%%d7\n" 1858
2503 "mac.w %%d0u, %%a5u, %%acc0\n" 1859 ct = tc1 * cx[1] - tc2 - tc3 * cx[2] + tc4 * cx[0];
2504 "mac.w %%d0l, %%a5l, (%[yint])+, %%a5, %%acc0\n" 1860 st = -ts5 * cx[5] + ts6 - ts7 * cx[3] + ts8 * cx[4];
2505 "mac.w %%d1u, %%a5u, %%acc0\n" 1861 out[ 9] = ct + st;
2506 "mac.w %%d1l, %%a5l, (%[yint])+, %%a5, %%acc0\n" 1862 out[10] = ct - st;
2507 "mac.w %%d2u, %%a5u, %%acc0\n" 1863
2508 "mac.w %%d2l, %%a5l, (%[yint])+, %%a5, %%acc0\n" 1864 ct = tc1 * cx[2] - tc2 + tc3 * cx[0] - tc4 * cx[1];
2509 "mac.w %%d3u, %%a5u, %%acc0\n" 1865 st = ts5 * cx[3] - ts6 + ts7 * cx[4] - ts8 * cx[5];
2510 "mac.w %%d3l, %%a5l, (%[yint])+, %%a5, %%acc0\n" 1866 out[13] = ct + st;
2511 "mac.w %%d4u, %%a5u, %%acc0\n" 1867 out[14] = ct - st;
2512 "mac.w %%d4l, %%a5l, (%[yint])+, %%a5, %%acc0\n" 1868
2513 "mac.w %%d5u, %%a5u, %%acc0\n" 1869 ts1 = in[ 8] - in[ 0];
2514 "mac.w %%d5l, %%a5l, (%[yint])+, %%a5, %%acc0\n" 1870 ts3 = in[ 6] - in[ 2];
2515 "mac.w %%d6u, %%a5u, %%acc0\n" 1871 ts4 = in[ 5] - in[ 3];
2516 "mac.w %%d6l, %%a5l, (%[yint])+, %%a5, %%acc0\n" 1872 tc5 = in[17] + in[ 9];
2517 "mac.w %%d7u, %%a5u, %%acc0\n" 1873 tc6 = in[16] + in[10];
2518 "mac.w %%d7l, %%a5l, (%[yint])+, %%a5, %%acc0\n" 1874 tc7 = in[15] + in[11];
2519 "movem.l (32,%[filt]), %%d0-%%d7\n" 1875 tc8 = in[14] + in[12];
2520 "mac.w %%d0u, %%a5u, %%acc0\n" 1876
2521 "mac.w %%d0l, %%a5l, (%[yint])+, %%a5, %%acc0\n" 1877 out[0] = (tc5 + tc7 + tc8) * cx[8] + (tc6 + in[13]) * cx[8];
2522 "mac.w %%d1u, %%a5u, %%acc0\n" 1878 ct = (tc5 + tc7 + tc8) * cx[7] - (tc6 + in[13]) * cx[8];
2523 "mac.w %%d1l, %%a5l, (%[yint])+, %%a5, %%acc0\n" 1879 st = (ts1 - ts3 + ts4) * cx[6];
2524 "mac.w %%d2u, %%a5u, %%acc0\n" 1880 out[11] = ct + st;
2525 "mac.w %%d2l, %%a5l, (%[yint])+, %%a5, %%acc0\n" 1881 out[12] = ct - st;
2526 "mac.w %%d3u, %%a5u, %%acc0\n" 1882
2527 "mac.w %%d3l, %%a5l, (%[yint])+, %%a5, %%acc0\n" 1883 ts2 = (in[7] - in[1]) * cx[6];
2528 "mac.w %%d4u, %%a5u, %%acc0\n" 1884 tc6 = in[13] * cx[8] - tc6 * cx[7];
2529 "mac.w %%d4l, %%a5l, (%[yint])+, %%a5, %%acc0\n" 1885
2530 "mac.w %%d5u, %%a5u, %%acc0\n" 1886 ct = tc5 * cx[3] - tc6 + tc7 * cx[4] + tc8 * cx[5];
2531 "mac.w %%d5l, %%a5l, (%[yint])+, %%a5, %%acc0\n" 1887 st = ts1 * cx[2] + ts2 + ts3 * cx[0] + ts4 * cx[1];
2532 "mac.w %%d6u, %%a5u, %%acc0\n" 1888 out[3] = ct + st;
2533 "mac.w %%d6l, %%a5l, (%[yint])+, %%a5, %%acc0\n" 1889 out[4] = ct - st;
2534 "mac.w %%d7u, %%a5u, %%acc0\n" 1890
2535 "mac.w %%d7l, %%a5l, (%[yint])+, %%a5, %%acc0\n" 1891 ct =-tc5 * cx[5] + tc6 - tc7 * cx[3] - tc8 * cx[4];
2536 "movem.l (64,%[filt]), %%d0-%%d7\n" 1892 st = ts1 * cx[1] + ts2 - ts3 * cx[2] - ts4 * cx[0];
2537 "mac.w %%d0u, %%a5u, %%acc0\n" 1893 out[7] = ct + st;
2538 "mac.w %%d0l, %%a5l, (%[yint])+, %%a5, %%acc0\n" 1894 out[8] = ct - st;
2539 "mac.w %%d1u, %%a5u, %%acc0\n" 1895
2540 "mac.w %%d1l, %%a5l, (%[yint])+, %%a5, %%acc0\n" 1896 ct =-tc5 * cx[4] + tc6 - tc7 * cx[5] - tc8 * cx[3];
2541 "mac.w %%d2u, %%a5u, %%acc0\n" 1897 st = ts1 * cx[0] - ts2 + ts3 * cx[1] - ts4 * cx[2];
2542 "mac.w %%d2l, %%a5l, (%[yint])+, %%a5, %%acc0\n" 1898 out[15] = ct + st;
2543 "mac.w %%d3u, %%a5u, %%acc0\n" 1899 out[16] = ct - st;
2544 "mac.w %%d3l, %%a5l, (%[yint])+, %%a5, %%acc0\n"
2545 "mac.w %%d4u, %%a5u, %%acc0\n"
2546 "mac.w %%d4l, %%a5l, (%[yint])+, %%a5, %%acc0\n"
2547 "mac.w %%d5u, %%a5u, %%acc0\n"
2548 "mac.w %%d5l, %%a5l, (%[yint])+, %%a5, %%acc0\n"
2549 "mac.w %%d6u, %%a5u, %%acc0\n"
2550 "mac.w %%d6l, %%a5l, (%[yint])+, %%a5, %%acc0\n"
2551 "mac.w %%d7u, %%a5u, %%acc0\n"
2552 "mac.w %%d7l, %%a5l, (%[yint])+, %%a5, %%acc0\n"
2553 "movem.l (96,%[filt]), %%d0-%%d7\n"
2554 "mac.w %%d0u, %%a5u, %%acc0\n"
2555 "mac.w %%d0l, %%a5l, (%[yint])+, %%a5, %%acc0\n"
2556 "mac.w %%d1u, %%a5u, %%acc0\n"
2557 "mac.w %%d1l, %%a5l, (%[yint])+, %%a5, %%acc0\n"
2558 "mac.w %%d2u, %%a5u, %%acc0\n"
2559 "mac.w %%d2l, %%a5l, (%[yint])+, %%a5, %%acc0\n"
2560 "mac.w %%d3u, %%a5u, %%acc0\n"
2561 "mac.w %%d3l, %%a5l, (%[yint])+, %%a5, %%acc0\n"
2562 "mac.w %%d4u, %%a5u, %%acc0\n"
2563 "mac.w %%d4l, %%a5l, (%[yint])+, %%a5, %%acc0\n"
2564 "mac.w %%d5u, %%a5u, %%acc0\n"
2565 "mac.w %%d5l, %%a5l, (%[yint])+, %%a5, %%acc0\n"
2566 "mac.w %%d6u, %%a5u, %%acc0\n"
2567 "mac.w %%d6l, %%a5l, (%[yint]) , %%a5, %%acc0\n"
2568 "mac.w %%d7u, %%a5u, %%acc0\n"
2569 "mac.w %%d7l, %%a5l, %%acc0\n"
2570 "lea.l (-31*4, %[yint]), %[yint]\n" /* wrap yint back to start */
2571 "movclr.l %%acc0, %[tmp]"
2572 : [tmp] "=r" (tmp), [yint] "+a" (yint)
2573 : [filt] "a" (filt)
2574 : "d0", "d1", "d2", "d3", "d4", "d5", "d6", "d7", "a5" );
2575 }
2576#else
2577 for(j=64, tmp=0; j--; )
2578 tmp += (long)filt[j] * (long)y_int[j];
2579#endif
2580 s[i] = (tmp + 16384) >> 15;
2581 }
2582} 1900}
2583 1901
2584static int find_bitrate_index(int bitrate) 1902static int find_bitrate_index(int type, int bitrate)
2585{ 1903{
2586 static long mpeg1[15] = {0,32,40,48,56,64,80,96,112,128,160,192,224,256,320}; 1904 int i;
2587 int i;
2588 1905
2589 for(i=0; i<15; i++) 1906 for(i=0;i<14;i++)
2590 if(bitrate == mpeg1[i]) 1907 if(bitrate == bitr_index[type][i])
2591 return i; 1908 break;
2592 1909
2593 return -1; 1910 return i;
2594} 1911}
2595 1912
2596static int find_samplerate_index(long freq) 1913static int find_samplerate_index(long freq, int *mp3_type)
2597{ 1914{ /* MPEG 2 */ /* MPEG 1 */
2598 static long mpeg1[3] = {44100, 48000, 32000}; 1915 static long mpeg[2][3] = { {22050, 24000, 16000}, {44100, 48000, 32000} };
2599 int i; 1916 int mpg, rate;
2600 1917
2601 for(i=0; i<3; i++) 1918 /* set default values: MPEG1 at 44100/s */
2602 if(freq == mpeg1[i]) 1919 *mp3_type = 1;
2603 return i;
2604 1920
2605 return -1; 1921 for(mpg=0; mpg<2; mpg++)
1922 for(rate=0; rate<3; rate++)
1923 if(freq == mpeg[mpg][rate])
1924 { *mp3_type = mpg; return rate; }
1925
1926 return 0;
2606} 1927}
2607 1928
2608void init_mp3_encoder_engine(bool stereo, int quality) 1929void init_mp3_encoder_engine(bool stereo, int quality, int sample_rate)
2609{ 1930{
2610 /* keep in sync with rec_quality_info_afmt in id3.h/.c */ 1931 /* keep in sync with rec_quality_info_afmt in id3.h/.c */
2611 static int bitr_s[9] = { 64, 96, 128, 160, 192, 224, 320, 64, 64 }; 1932 static int bitr_s[9] = { 64, 96, 128, 160, 192, 224, 320, 64, 64 };
2612 static int bitr_m[9] = { 64, 96, 128, 160, 160, 160, 160, 64, 64 }; 1933 static int bitr_m[9] = { 64, 96, 128, 160, 160, 160, 160, 64, 64 };
2613 uint32 avg_byte_per_frame; 1934 uint32 avg_byte_per_frame;
2614 1935
2615 cfg.byte_order = order_bigEndian; 1936 if(quality == 0 && stereo && sample_rate >= 32000)
2616 cfg.mpg.type = 1; 1937 { /* use MPEG2 format */
2617 cfg.samplerate = 44100; 1938 sample_rate >>= 1;
2618 cfg.channels = stereo ? 2 : 1; 1939 cfg.resample = 1;
2619 cfg.mpg.mode = stereo ? 0 : 3; /* 0=stereo, 3=mono */ 1940 cfg.granules = 1;
2620 cfg.mpg.bitrate = stereo ? bitr_s[quality] : bitr_m[quality]; 1941 }
2621 cfg.mpg.bitrate_index = find_bitrate_index(cfg.mpg.bitrate); 1942 else
2622 cfg.mpg.smprate_index = find_samplerate_index(cfg.samplerate); 1943 { /* use MPEG1 format */
2623 1944 cfg.resample = 0;
2624 memset(x_int0 , 0 , sizeof(x_int0 )); 1945 cfg.granules = 2;
2625 memset(x_int1 , 0 , sizeof(x_int1 )); 1946 }
2626 memset(y_int , 0 , sizeof(y_int )); 1947
2627 memset(mdct_freq , 0 , sizeof(mdct_freq )); 1948 cfg.byte_order = order_bigEndian;
2628 memset(enc_data , 0 , sizeof(enc_data )); 1949 cfg.samplerate = sample_rate;
2629 memset(mdct_in , 0 , sizeof(mdct_in )); 1950 cfg.channels = stereo ? 2 : 1;
2630 memset(sb_sample , 0 , sizeof(sb_sample )); 1951 cfg.mpg.mode = stereo ? 0 : 3; /* 0=stereo, 3=mono */
2631 memset(&CodedData , 0 , sizeof(CodedData )); 1952 cfg.mpg.bitrate = stereo ? bitr_s[quality] : bitr_m[quality];
2632 memcpy(scalefac, sfBand[cfg.mpg.smprate_index + 3*cfg.mpg.type], sizeof(scalefac)); 1953 cfg.mpg.smpl_id = find_samplerate_index(cfg.samplerate, &cfg.mpg.type);
2633 memcpy(ca_int , ca_int_const , sizeof(ca_int )); 1954 cfg.mpg.bitr_id = find_bitrate_index(cfg.mpg.type, cfg.mpg.bitrate);
2634 memcpy(cs_int , cs_int_const , sizeof(cs_int )); 1955 cfg.mpg.num_bands = num_bands[stereo ? cfg.mpg.type : 2][cfg.mpg.bitr_id];
2635 memcpy(win_int , win_int_const , sizeof(win_int )); 1956
2636 memcpy(filter_int , filter_int_const , sizeof(filter_int )); 1957 memcpy(scalefac, sfBand[cfg.mpg.smpl_id + 3*cfg.mpg.type], sizeof(scalefac));
2637 memcpy(enwindow_int, enwindow_int_const, sizeof(enwindow_int)); 1958 memset(mfbuf , 0 , sizeof(mfbuf ));
2638 memcpy(int2idx , int2idx_const , sizeof(int2idx )); 1959 memset(mdct_freq , 0 , sizeof(mdct_freq ));
2639 memcpy(ht_count1 , ht_count1_const , sizeof(ht_count1 )); 1960 memset(enc_data , 0 , sizeof(enc_data ));
2640 memcpy( t1HB , t1HB_const , sizeof(t1HB )); 1961 memset(sb_data , 0 , sizeof(sb_data ));
2641 memcpy( t2HB , t2HB_const , sizeof(t2HB )); 1962 memset(&CodedData, 0 , sizeof(CodedData ));
2642 memcpy( t3HB , t3HB_const , sizeof(t3HB )); 1963 memcpy(ca , ca_const , sizeof(ca ));
2643 memcpy( t5HB , t5HB_const , sizeof(t5HB )); 1964 memcpy(cs , cs_const , sizeof(cs ));
2644 memcpy( t6HB , t6HB_const , sizeof(t6HB )); 1965 memcpy(cx , cx_const , sizeof(cx ));
2645 memcpy( t7HB , t7HB_const , sizeof(t7HB )); 1966 memcpy(win , win_const , sizeof(win ));
2646 memcpy( t8HB , t8HB_const , sizeof(t8HB )); 1967 memcpy(enwindow , enwindow_const , sizeof(enwindow ));
2647 memcpy( t9HB , t9HB_const , sizeof(t9HB )); 1968 memcpy(int2idx , int2idx_const , sizeof(int2idx ));
2648 memcpy(t10HB , t10HB_const , sizeof(t10HB )); 1969 memcpy(ht_count , ht_count_const , sizeof(ht_count ));
2649 memcpy(t11HB , t11HB_const , sizeof(t11HB )); 1970 memcpy( tab01 , tab01_const , sizeof(tab01 ));
2650 memcpy(t12HB , t12HB_const , sizeof(t12HB )); 1971 memcpy( tab23 , tab23_const , sizeof(tab23 ));
2651 memcpy(t13HB , t13HB_const , sizeof(t13HB )); 1972 memcpy( tab56 , tab56_const , sizeof(tab56 ));
2652 memcpy(t15HB , t15HB_const , sizeof(t15HB )); 1973 memcpy( tab1315 , tab1315_const , sizeof(tab1315 ));
2653 memcpy(t16HB , t16HB_const , sizeof(t16HB )); 1974 memcpy( tab1624 , tab1624_const , sizeof(tab1624 ));
2654 memcpy(t24HB , t24HB_const , sizeof(t24HB )); 1975 memcpy( tab789 , tab789_const , sizeof(tab789 ));
2655 memcpy( t1l , t1l_const , sizeof(t1l )); 1976 memcpy( tabABC , tabABC_const , sizeof(tabABC ));
2656 memcpy( t2l , t2l_const , sizeof(t2l )); 1977 memcpy( t1HB , t1HB_const , sizeof(t1HB ));
2657 memcpy( t3l , t3l_const , sizeof(t3l )); 1978 memcpy( t2HB , t2HB_const , sizeof(t2HB ));
2658 memcpy( t5l , t5l_const , sizeof(t5l )); 1979 memcpy( t3HB , t3HB_const , sizeof(t3HB ));
2659 memcpy( t6l , t6l_const , sizeof(t6l )); 1980 memcpy( t5HB , t5HB_const , sizeof(t5HB ));
2660 memcpy( t7l , t7l_const , sizeof(t7l )); 1981 memcpy( t6HB , t6HB_const , sizeof(t6HB ));
2661 memcpy( t8l , t8l_const , sizeof(t8l )); 1982 memcpy( t7HB , t7HB_const , sizeof(t7HB ));
2662 memcpy( t9l , t9l_const , sizeof(t9l )); 1983 memcpy( t8HB , t8HB_const , sizeof(t8HB ));
2663 memcpy(t10l , t10l_const , sizeof(t10l )); 1984 memcpy( t9HB , t9HB_const , sizeof(t9HB ));
2664 memcpy(t11l , t11l_const , sizeof(t11l )); 1985 memcpy(t10HB , t10HB_const , sizeof(t10HB ));
2665 memcpy(t12l , t12l_const , sizeof(t12l )); 1986 memcpy(t11HB , t11HB_const , sizeof(t11HB ));
2666 memcpy(t13l , t13l_const , sizeof(t13l )); 1987 memcpy(t12HB , t12HB_const , sizeof(t12HB ));
2667 memcpy(t15l , t15l_const , sizeof(t15l )); 1988 memcpy(t13HB , t13HB_const , sizeof(t13HB ));
2668 memcpy(t16l , t16l_const , sizeof(t16l )); 1989 memcpy(t15HB , t15HB_const , sizeof(t15HB ));
2669 memcpy(t24l , t24l_const , sizeof(t24l )); 1990 memcpy(t16HB , t16HB_const , sizeof(t16HB ));
2670 memcpy(ht , ht_const , sizeof(ht )); 1991 memcpy(t24HB , t24HB_const , sizeof(t24HB ));
2671 1992 memcpy( t1l , t1l_const , sizeof(t1l ));
2672 /* I don't know, wether this is really necessary */ 1993 memcpy( t2l , t2l_const , sizeof(t2l ));
2673 ht[ 0].table = NULL; ht[ 0].hlen = NULL;// Apparently not used 1994 memcpy( t3l , t3l_const , sizeof(t3l ));
2674 ht[ 1].table = t1HB; ht[ 1].hlen = t1l; 1995 memcpy( t5l , t5l_const , sizeof(t5l ));
2675 ht[ 2].table = t2HB; ht[ 2].hlen = t2l; 1996 memcpy( t6l , t6l_const , sizeof(t6l ));
2676 ht[ 3].table = t3HB; ht[ 3].hlen = t3l; 1997 memcpy( t7l , t7l_const , sizeof(t7l ));
2677 ht[ 4].table = NULL; ht[ 4].hlen = NULL;// Apparently not used 1998 memcpy( t8l , t8l_const , sizeof(t8l ));
2678 ht[ 5].table = t5HB; ht[ 5].hlen = t5l; 1999 memcpy( t9l , t9l_const , sizeof(t9l ));
2679 ht[ 6].table = t6HB; ht[ 6].hlen = t6l; 2000 memcpy(t10l , t10l_const , sizeof(t10l ));
2680 ht[ 7].table = t7HB; ht[ 7].hlen = t7l; 2001 memcpy(t11l , t11l_const , sizeof(t11l ));
2681 ht[ 8].table = t8HB; ht[ 8].hlen = t8l; 2002 memcpy(t12l , t12l_const , sizeof(t12l ));
2682 ht[ 9].table = t9HB; ht[ 9].hlen = t9l; 2003 memcpy(t13l , t13l_const , sizeof(t13l ));
2683 ht[10].table = t10HB; ht[10].hlen = t10l; 2004 memcpy(t15l , t15l_const , sizeof(t15l ));
2684 ht[11].table = t11HB; ht[11].hlen = t11l; 2005 memcpy(t16l , t16l_const , sizeof(t16l ));
2685 ht[12].table = t12HB; ht[12].hlen = t12l; 2006 memcpy(t24l , t24l_const , sizeof(t24l ));
2686 ht[13].table = t13HB; ht[13].hlen = t13l; 2007 memcpy(ht , ht_const , sizeof(ht ));
2687 ht[14].table = NULL; ht[14].hlen = NULL;// Apparently not used 2008
2688 ht[15].table = t15HB; ht[15].hlen = t15l; 2009 ht[ 0].table = NULL; ht[ 0].hlen = NULL; /* Apparently not used */
2689 ht[16].table = t16HB; ht[16].hlen = t16l; 2010 ht[ 1].table = t1HB; ht[ 1].hlen = t1l;
2690 ht[17].table = t16HB; ht[17].hlen = t16l; 2011 ht[ 2].table = t2HB; ht[ 2].hlen = t2l;
2691 ht[18].table = t16HB; ht[18].hlen = t16l; 2012 ht[ 3].table = t3HB; ht[ 3].hlen = t3l;
2692 ht[19].table = t16HB; ht[19].hlen = t16l; 2013 ht[ 4].table = NULL; ht[ 4].hlen = NULL; /* Apparently not used */
2693 ht[20].table = t16HB; ht[20].hlen = t16l; 2014 ht[ 5].table = t5HB; ht[ 5].hlen = t5l;
2694 ht[21].table = t16HB; ht[21].hlen = t16l; 2015 ht[ 6].table = t6HB; ht[ 6].hlen = t6l;
2695 ht[22].table = t16HB; ht[22].hlen = t16l; 2016 ht[ 7].table = t7HB; ht[ 7].hlen = t7l;
2696 ht[23].table = t16HB; ht[23].hlen = t16l; 2017 ht[ 8].table = t8HB; ht[ 8].hlen = t8l;
2697 ht[24].table = t24HB; ht[24].hlen = t24l; 2018 ht[ 9].table = t9HB; ht[ 9].hlen = t9l;
2698 ht[25].table = t24HB; ht[25].hlen = t24l; 2019 ht[10].table = t10HB; ht[10].hlen = t10l;
2699 ht[26].table = t24HB; ht[26].hlen = t24l; 2020 ht[11].table = t11HB; ht[11].hlen = t11l;
2700 ht[27].table = t24HB; ht[27].hlen = t24l; 2021 ht[12].table = t12HB; ht[12].hlen = t12l;
2701 ht[28].table = t24HB; ht[28].hlen = t24l; 2022 ht[13].table = t13HB; ht[13].hlen = t13l;
2702 ht[29].table = t24HB; ht[29].hlen = t24l; 2023 ht[14].table = NULL; ht[14].hlen = NULL; /* Apparently not used */
2703 ht[30].table = t24HB; ht[30].hlen = t24l; 2024 ht[15].table = t15HB; ht[15].hlen = t15l;
2704 ht[31].table = t24HB; ht[31].hlen = t24l; 2025
2705 2026 /* Figure average number of 'bytes' per frame */
2706 x_int[0] = x_int0; 2027 avg_byte_per_frame = SAMPL2 * 16000 * cfg.mpg.bitrate / (2 - cfg.mpg.type);
2707 x_int[1] = x_int1; 2028 avg_byte_per_frame = avg_byte_per_frame / cfg.samplerate;
2708 2029 cfg.byte_per_frame = avg_byte_per_frame / 64;
2709#ifndef SIMULATOR 2030 cfg.frac_per_frame = avg_byte_per_frame & 63;
2710 if(((long)x_int0 | (long)x_int1) & 0x7ff) 2031 cfg.slot_lag = 0;
2711 return; /* both arrays must be aligned to 0x800 boundary */ 2032 cfg.sideinfo_len = 32 + (cfg.mpg.type ? (cfg.channels == 1 ? 136 : 256)
2712#endif 2033 : (cfg.channels == 1 ? 72 : 136));
2713
2714 if(cfg.channels == 1)
2715 cfg.sideinfo_len = 32 + 136;
2716 else
2717 cfg.sideinfo_len = 32 + 256;
2718
2719 /* Set initial step size */
2720 cfg.cod_info[0][0].quantizerStepSize = 0x10;
2721 cfg.cod_info[0][1].quantizerStepSize = 0x10;
2722 cfg.cod_info[1][0].quantizerStepSize = 0x10;
2723 cfg.cod_info[1][1].quantizerStepSize = 0x10;
2724
2725 /* Figure average number of 'byte' per frame. */
2726 avg_byte_per_frame = (uint32)(SAMP_PER_FRAME * 8000 * cfg.mpg.bitrate) / cfg.samplerate;
2727 cfg.byte_per_frame = avg_byte_per_frame / 64;
2728 cfg.frac_per_frame = avg_byte_per_frame % 64;
2729 cfg.slot_lag = 0;
2730} 2034}
2731 2035
2732/* this is the codec entry point */ 2036
2733enum codec_status codec_start(struct codec_api* api) 2037enum codec_status codec_start(struct codec_api* api)
2734{ 2038{
2735 int i, off=0, gr, channel; 2039 int i, ii, gr, k, ch, shift, gr_cnt;
2040 int max, min;
2736 long *buffer; 2041 long *buffer;
2737 int chunk_size, num_chunks; 2042 int chunk_size, num_chunks;
2738 int enc_buffer_size; 2043 int enc_buffer_size;
@@ -2743,6 +2048,11 @@ enum codec_status codec_start(struct codec_api* api)
2743 /* Generic codec initialisation */ 2048 /* Generic codec initialisation */
2744 ci = api; 2049 ci = api;
2745 2050
2051#ifdef USE_IRAM
2052 memcpy(iramstart, iramcopy, iramend - iramstart);
2053 memset(iedata, 0, iend - iedata);
2054#endif
2055
2746 if(ci->enc_get_inputs == NULL || 2056 if(ci->enc_get_inputs == NULL ||
2747 ci->enc_set_parameters == NULL || 2057 ci->enc_set_parameters == NULL ||
2748 ci->enc_alloc_chunk == NULL || 2058 ci->enc_alloc_chunk == NULL ||
@@ -2757,7 +2067,7 @@ enum codec_status codec_start(struct codec_api* api)
2757 *ci->enc_set_header_callback = NULL; 2067 *ci->enc_set_header_callback = NULL;
2758 ci->enc_get_inputs(&enc_buffer_size, &enc_channels, &enc_quality); 2068 ci->enc_get_inputs(&enc_buffer_size, &enc_channels, &enc_quality);
2759 2069
2760 init_mp3_encoder_engine(enc_channels == 2, enc_quality); 2070 init_mp3_encoder_engine(enc_channels == 2, enc_quality, 44100);
2761 2071
2762 /* must be 4byte aligned */ 2072 /* must be 4byte aligned */
2763 chunk_size = (sizeof(long) + cfg.byte_per_frame + 1 + 3) & ~3; 2073 chunk_size = (sizeof(long) + cfg.byte_per_frame + 1 + 3) & ~3;
@@ -2792,9 +2102,9 @@ enum codec_status codec_start(struct codec_api* api)
2792 } 2102 }
2793 2103
2794 /* encode one mp3 frame in this loop */ 2104 /* encode one mp3 frame in this loop */
2795 CodedData.bitpos = 0; 2105 CodedData.bitpos = 0;
2796 memset(CodedData.bbuf, 0, sizeof(CodedData.bbuf)); 2106 memset(CodedData.bbuf, 0, sizeof(CodedData.bbuf));
2797 2107
2798 if((cfg.slot_lag += cfg.frac_per_frame) >= 64) 2108 if((cfg.slot_lag += cfg.frac_per_frame) >= 64)
2799 { /* Padding for this frame */ 2109 { /* Padding for this frame */
2800 cfg.slot_lag -= 64; 2110 cfg.slot_lag -= 64;
@@ -2803,37 +2113,136 @@ enum codec_status codec_start(struct codec_api* api)
2803 else 2113 else
2804 cfg.mpg.padding = 0; 2114 cfg.mpg.padding = 0;
2805 2115
2806 cfg.mpg.bits_per_frame = 8 * (cfg.byte_per_frame + cfg.mpg.padding); 2116 cfg.mean_bits = (8 * cfg.byte_per_frame + 8 * cfg.mpg.padding
2807 cfg.mean_bits = (cfg.mpg.bits_per_frame - cfg.sideinfo_len) >> 1; 2117 - cfg.sideinfo_len) / cfg.granules / cfg.channels;
2808 2118
2809 /* polyphase filtering */ 2119 /* shift out old samples */
2810 for(gr=0; gr<2; gr++) 2120 memcpy(mfbuf, mfbuf + 2*cfg.granules*576, 4*512);
2121 /* read new samples to iram for further processing */
2122 memcpy((uint32*)(mfbuf + 2*512), buffer, 4*SAMP_PER_FRAME);
2123
2124 if(cfg.resample) /* downsample to half of original */
2125 for(i=2*512; i<2*512+2*SAMP_PER_FRAME; i+=4)
2126 {
2127 mfbuf[i/2+512] = (short)(((int)mfbuf[i+0] + mfbuf[i+2]) >> 1);
2128 mfbuf[i/2+513] = (short)(((int)mfbuf[i+1] + mfbuf[i+3]) >> 1);
2129 }
2130
2131 if(cfg.channels == 1) /* mix left and right channels to mono */
2132 for(i=2*512; i<2*512+2*SAMP_PER_FRAME; i+=2)
2133 mfbuf[i] = mfbuf[i+1] = (short)(((int)mfbuf[i] + mfbuf[i+1]) >> 1);
2134
2135 cfg.ResvSize = 0;
2136 gr_cnt = cfg.granules * cfg.channels;
2137 CodedData.bitpos = cfg.sideinfo_len; /* leave space for mp3 header */
2138
2139 for(gr=0; gr<cfg.granules; gr++)
2811 { 2140 {
2812 for(i=0; i<18; i++) 2141 short *wk = mfbuf + 2*286 + gr*1152;
2813 {
2814 fill_subband(buffer, off);
2815 2142
2816 for(channel=cfg.channels; channel--; ) 2143 /* 16bit packed wav data can be windowed efficiently on coldfire */
2817 filter_subband(&sb_sample[channel][gr+1][i][0], off, channel); 2144 window_subband1(wk, sb_data[0][1-gr][0], sb_data[1][1-gr][0]);
2818 2145
2819 buffer += 32; 2146 for(ch=0; ch<cfg.channels; ch++)
2820 off = (off + 480) & (HAN_SIZE-1); /* offset is modulo HAN_SIZE */ 2147 {
2148 int band;
2149 int *mdct;
2150
2151 wk = mfbuf + 2*286 + gr*1152 + ch;
2152
2153 /* 36864=4*18*16*32 */
2154 for(k=0; k<18; k++, wk+=64)
2155 {
2156 window_subband2(wk, sb_data[ch][1-gr][k]);
2157 /* Compensate for inversion in the analysis filter */
2158 if(k & 1)
2159 for(band=1; band<32; band+=2)
2160 sb_data[ch][1-gr][k][band] *= -1;
2821 } 2161 }
2822 }
2823 2162
2824 mdct_sub_int(sb_sample, mdct_freq); 2163 /* Perform imdct of 18 previous + 18 current subband samples */
2164 /* for integer precision do this loop twice (if neccessary) */
2165 shift = k = 14;
2166 for(ii=0; ii<2 && k; ii++)
2167 {
2168 mdct = mdct_freq;
2169 cfg.cod_info[gr][ch].additStep = 4 * (14 - shift);
2170 for(band=0; band<cfg.mpg.num_bands; band++, mdct+=18)
2171 {
2172 int *band0 = sb_data[ch][ gr][0] + order[band];
2173 int *band1 = sb_data[ch][1-gr][0] + order[band];
2174 int work[18];
2175
2176 /* 9216=4*32*9*8 */
2177 for(k=-9; k<0; k++)
2178 {
2179 int a = shft_n(band1[(k+9)*32], shift);
2180 int b = shft_n(band1[(8-k)*32], shift);
2181 int c = shft_n(band0[(k+9)*32], shift);
2182 int d = shft_n(band0[(8-k)*32], shift);
2183
2184 work[k+ 9] = shft16(a * win[k+ 9][0] + b * win[k+ 9][1]
2185 + c * win[k+ 9][2] + d * win[k+ 9][3]);
2186
2187 work[k+18] = shft16(c * win[k+18][0] + d * win[k+18][1]
2188 + a * win[k+18][2] + b * win[k+18][3]);
2189 }
2190
2191 /* 7200=4*18*100 */
2192 mdct_long(mdct, work);
2193
2194 /* Perform aliasing reduction butterfly */
2195 if(band != 0)
2196 for(k=7; k>=0; --k)
2197 {
2198 int bu, bd;
2199 bu = shft15(mdct[k]) * ca[k] + shft15(mdct[-1-k]) * cs[k];
2200 bd = shft15(mdct[k]) * cs[k] - shft15(mdct[-1-k]) * ca[k];
2201 mdct[-1-k] = bu;
2202 mdct[ k ] = bd;
2203 }
2204 }
2205
2206 max = min = 0;
2207 for(k=0; k<576; k++)
2208 {
2209 mdct_freq[k] = shft13(mdct_freq[k]);
2210 if(max < mdct_freq[k]) max = mdct_freq[k];
2211 if(min > mdct_freq[k]) min = mdct_freq[k];
2212 }
2213
2214 max = (max > -min) ? max : -min;
2215 cfg.cod_info[gr][ch].max_val = (long)max;
2216
2217 /* calc new shift for higher integer precision */
2218 for(k=0; max<(0x3c00>>k); k++);
2219 shift = 12 - k;
2220 }
2825 2221
2826 /* bit and noise allocation */ 2222 cfg.cod_info[gr][ch].quantStep += cfg.cod_info[gr][ch].additStep;
2827 iteration_loop(mdct_freq, cfg.cod_info, cfg.mean_bits);
2828 2223
2829 /* write the frame to the bitstream */ 2224 /* bit and noise allocation */
2830 format_bitstream(enc_data, cfg.cod_info, mdct_freq); 2225 iteration_loop(mdct_freq, &cfg.cod_info[gr][ch], gr_cnt--);
2226 /* write the frame to the bitstream */
2227 Huffmancodebits(enc_data, mdct_freq, &cfg.cod_info[gr][ch]);
2228
2229 cfg.cod_info[gr][ch].quantStep -= cfg.cod_info[gr][ch].additStep;
2230
2231 if(cfg.granules == 1)
2232 memcpy(sb_data[ch][0], sb_data[ch][1], sizeof(sb_data[ch][0]));
2233 }
2234 }
2831 2235
2832 /* allocate mp3 chunk, set chunk size, copy chunk to enc_buffer */
2833 mp3_chunk_ptr = (uint32*)ci->enc_alloc_chunk(); 2236 mp3_chunk_ptr = (uint32*)ci->enc_alloc_chunk();
2834 mp3_chunk_ptr[0] = (CodedData.bitpos + 7) >> 3; 2237 mp3_chunk_ptr[0] = cfg.byte_per_frame + cfg.mpg.padding; //(CodedData.bitpos + 7) >> 3;
2238 /* finish this chunk by adding sideinfo header data */
2239 CodedData.bitpos = 0;
2240 encodeSideInfo( cfg.cod_info );
2241
2242 /* allocate mp3 chunk, set chunk size, copy chunk to enc_buffer */
2835 memcpy(&mp3_chunk_ptr[1], CodedData.bbuf, mp3_chunk_ptr[0]); 2243 memcpy(&mp3_chunk_ptr[1], CodedData.bbuf, mp3_chunk_ptr[0]);
2836 ci->enc_free_chunk(); 2244 ci->enc_free_chunk();
2245
2837 ci->yield(); 2246 ci->yield();
2838 } 2247 }
2839 2248
@@ -2859,4 +2268,5 @@ enum codec_status codec_start(struct codec_api* api)
2859 2268
2860 return CODEC_OK; 2269 return CODEC_OK;
2861} 2270}
2271
2862#endif 2272#endif