xref: /haiku/src/add-ons/media/plugins/ffmpeg/gfx_conv_c_lookup.cpp (revision 1deede7388b04dbeec5af85cae7164735ea9e70d)
1 /*
2  * Copyright 2004, Marcus Overhagen. All rights reserved.
3  * Distributed under the terms of the MIT license.
4  */
5 
6 //! This file implements an image format conversion from
7 // planar YCbCr420 format to linear RGB32 format.
8 // Lookup tables are used to avoid doing multiplications
9 // or conditial if() checks inside the inner loop.
10 // These tables have been generated by gen_lookup.cpp
11 
12 
13 #include "gfx_conv_c.h"
14 
15 #include <strings.h>
16 #include <stdio.h>
17 
18 
19 extern const int32 Cr_Rtab[];
20 extern const int32 Cr_Gtab[];
21 extern const int32 Cb_Gtab[];
22 extern const int32 Cb_Btab[];
23 extern const int32 Ytab[];
24 extern const uint32* Rtab;
25 extern const uint32* Gtab;
26 extern const uint32* Btab;
27 
28 
29 void
30 gfx_conv_YCbCr420p_RGB32_c(AVFrame* in, AVFrame* out, int width, int height)
31 {
32 	uint32 poutInc = 2 * out->linesize[0];
33 	uint32* poutEven = (uint32*)out->data[0];
34 	uint32* poutOdd = (uint32*)(out->linesize[0] + (uint8*)poutEven);
35 
36 	uint32 pi1Inc = in->linesize[0];
37 	uint32 pi1Inc2 = 2 * pi1Inc;
38 	uint32 pi2Inc = in->linesize[1];
39 	uint32 pi3Inc = in->linesize[2];
40 
41 	uint8* pi1Base = (uint8*)in->data[0];
42 	uint8* pi2Base = (uint8*)in->data[1];
43 	uint8* pi3Base = (uint8*)in->data[2];
44 
45 	uint32 runs = height / 2;
46 	for (uint32 i = 0; i < runs; i++) {
47 
48 		uint16* pi1Even = (uint16*)(i * pi1Inc2 + pi1Base);
49 		uint16* pi1Odd = (uint16*)(pi1Inc + (uint8*)pi1Even);
50 		uint8* pi2 = i * pi2Inc + pi2Base;
51 		uint8* pi3 = i * pi3Inc + pi3Base;
52 
53 		for (uint32 j = 0; j < (uint32)width; j+= 2) {
54 
55 			int32 Cr_R, Cr_G, Cb_G, Cb_B;
56 			int32 Y0, Y1, R, G, B;
57 			uint32 temp;
58 
59 			temp = *(pi2++);
60 			Cb_G = Cb_Gtab[temp];
61 			Cb_B = Cb_Btab[temp];
62 			temp = *(pi3++);
63 			Cr_R = Cr_Rtab[temp];
64 			Cr_G = Cr_Gtab[temp];
65 
66 			temp = *(pi1Even++);
67 			Y0 = Ytab[temp & 0xff];
68 			Y1 = Ytab[temp >> 8];
69 
70 			R = (Y0 + Cr_R) >> 15;
71 			G = (Y0 + Cr_G + Cb_G) >> 15;
72 			B = (Y0 + Cb_B) >> 15;
73 			poutEven[j] = Rtab[R] | Gtab[G] | Btab[B];
74 
75 			R = (Y1 + Cr_R) >> 15;
76 			G = (Y1 + Cr_G + Cb_G) >> 15;
77 			B = (Y1 + Cb_B) >> 15;
78 			poutEven[j + 1] = Rtab[R] | Gtab[G] | Btab[B];
79 
80 			temp = *(pi1Odd++);
81 			Y0 = Ytab[temp & 0xff];
82 			Y1 = Ytab[temp >> 8];
83 
84 			R = (Y0 + Cr_R) >> 15;
85 			G = (Y0 + Cr_G + Cb_G) >> 15;
86 			B = (Y0 + Cb_B) >> 15;
87 			poutOdd[j] = Rtab[R] | Gtab[G] | Btab[B];
88 
89 			R = (Y1 + Cr_R) >> 15;
90 			G = (Y1 + Cr_G + Cb_G) >> 15;
91 			B = (Y1 + Cb_B) >> 15;
92 			poutOdd[j + 1] = Rtab[R] | Gtab[G] | Btab[B];
93 
94 		}
95 		poutEven = (uint32*)(poutInc + (uint8*)poutEven);
96 		poutOdd = (uint32*)(poutInc + (uint8*)poutOdd);
97 	}
98 	if (height & 1) {
99 		// XXX special case for last line if height not multiple of 2 goes here
100 		memset((height - 1) * out->linesize[0] + (uint8*)out->data[0], 0,
101 			width * 4);
102 	}
103 }
104 
105 const int32 Cb_Gtab[256] = {
106 	1644167, 1631322, 1618477, 1605632, 1592787, 1579942, 1567097, 1554252,
107 	1541407, 1528562, 1515717, 1502872, 1490026, 1477181, 1464336, 1451491,
108 	1438646, 1425801, 1412956, 1400111, 1387266, 1374421, 1361576, 1348731,
109 	1335886, 1323041, 1310196, 1297351, 1284506, 1271661, 1258815, 1245970,
110 	1233125, 1220280, 1207435, 1194590, 1181745, 1168900, 1156055, 1143210,
111 	1130365, 1117520, 1104675, 1091830, 1078985, 1066140, 1053295, 1040450,
112 	1027604, 1014759, 1001914, 989069, 976224, 963379, 950534, 937689, 924844,
113 	911999, 899154, 886309, 873464, 860619, 847774, 834929, 822084, 809239,
114 	796393, 783548, 770703, 757858, 745013, 732168, 719323, 706478, 693633,
115 	680788, 667943, 655098, 642253, 629408, 616563, 603718, 590873, 578028,
116 	565182, 552337, 539492, 526647, 513802, 500957, 488112, 475267, 462422,
117 	449577, 436732, 423887, 411042, 398197, 385352, 372507, 359662, 346817,
118 	333971, 321126, 308281, 295436, 282591, 269746, 256901, 244056, 231211,
119 	218366, 205521, 192676, 179831, 166986, 154141, 141296, 128451, 115606,
120 	102760, 89915, 77070, 64225, 51380, 38535, 25690, 12845, 0, -12844, -25689,
121 	-38534, -51379, -64224, -77069, -89914, -102759, -115605, -128450, -141295,
122 	-154140, -166985, -179830, -192675, -205520, -218365, -231210, -244055,
123 	-256900, -269745, -282590, -295435, -308280, -321125, -333970, -346816,
124 	-359661, -372506, -385351, -398196, -411041, -423886, -436731, -449576,
125 	-462421, -475266, -488111, -500956, -513801, -526646, -539491, -552336,
126 	-565181, -578027, -590872, -603717, -616562, -629407, -642252, -655097,
127 	-667942, -680787, -693632, -706477, -719322, -732167, -745012, -757857,
128 	-770702, -783547, -796392, -809238, -822083, -834928, -847773, -860618,
129 	-873463, -886308, -899153, -911998, -924843, -937688, -950533, -963378,
130 	-976223, -989068, -1001913, -1014758, -1027603, -1040449, -1053294,
131 	-1066139, -1078984, -1091829, -1104674, -1117519, -1130364, -1143209,
132 	-1156054, -1168899, -1181744, -1194589, -1207434, -1220279, -1233124,
133 	-1245969, -1258814, -1271660, -1284505, -1297350, -1310195, -1323040,
134 	-1335885, -1348730, -1361575, -1374420, -1387265, -1400110, -1412955,
135 	-1425800, -1438645, -1451490, -1464335, -1477180, -1490025, -1502871,
136 	-1515716, -1528561, -1541406, -1554251, -1567096, -1579941, -1592786,
137 	-1605631, -1618476, -1631321,
138 };
139 
140 const int32 Cb_Btab[256] = {
141 	-8459910, -8393817, -8327724, -8261631, -8195538, -8129445, -8063352,
142 	-7997259, -7931166, -7865073, -7798980, -7732887, -7666793, -7600700,
143 	-7534607, -7468514, -7402421, -7336328, -7270235, -7204142, -7138049,
144 	-7071956, -7005863, -6939770, -6873677, -6807584, -6741491, -6675398,
145 	-6609305, -6543212, -6477118, -6411025, -6344932, -6278839, -6212746,
146 	-6146653, -6080560, -6014467, -5948374, -5882281, -5816188, -5750095,
147 	-5684002, -5617909, -5551816, -5485723, -5419630, -5353537, -5287443,
148 	-5221350, -5155257, -5089164, -5023071, -4956978, -4890885, -4824792,
149 	-4758699, -4692606, -4626513, -4560420, -4494327, -4428234, -4362141,
150 	-4296048, -4229955, -4163862, -4097768, -4031675, -3965582, -3899489,
151 	-3833396, -3767303, -3701210, -3635117, -3569024, -3502931, -3436838,
152 	-3370745, -3304652, -3238559, -3172466, -3106373, -3040280, -2974187,
153 	-2908093, -2842000, -2775907, -2709814, -2643721, -2577628, -2511535,
154 	-2445442, -2379349, -2313256, -2247163, -2181070, -2114977, -2048884,
155 	-1982791, -1916698, -1850605, -1784512, -1718418, -1652325, -1586232,
156 	-1520139, -1454046, -1387953, -1321860, -1255767, -1189674, -1123581,
157 	-1057488, -991395, -925302, -859209, -793116, -727023, -660930, -594837,
158 	-528743, -462650, -396557, -330464, -264371, -198278, -132185, -66092, 0,
159 	66093, 132186, 198279, 264372, 330465, 396558, 462651, 528744, 594838,
160 	660931, 727024, 793117, 859210, 925303, 991396, 1057489, 1123582,
161 	1189675, 1255768, 1321861, 1387954, 1454047, 1520140, 1586233, 1652326,
162 	1718419, 1784513, 1850606, 1916699, 1982792, 2048885, 2114978, 2181071,
163 	2247164, 2313257, 2379350, 2445443, 2511536, 2577629, 2643722, 2709815,
164 	2775908, 2842001, 2908094, 2974188, 3040281, 3106374, 3172467, 3238560,
165 	3304653, 3370746, 3436839, 3502932, 3569025, 3635118, 3701211, 3767304,
166 	3833397, 3899490, 3965583, 4031676, 4097769, 4163863, 4229956, 4296049,
167 	4362142, 4428235, 4494328, 4560421, 4626514, 4692607, 4758700, 4824793,
168 	4890886, 4956979, 5023072, 5089165, 5155258, 5221351, 5287444, 5353538,
169 	5419631, 5485724, 5551817, 5617910, 5684003, 5750096, 5816189, 5882282,
170 	5948375, 6014468, 6080561, 6146654, 6212747, 6278840, 6344933, 6411026,
171 	6477119, 6543213, 6609306, 6675399, 6741492, 6807585, 6873678, 6939771,
172 	7005864, 7071957, 7138050, 7204143, 7270236, 7336329, 7402422, 7468515,
173 	7534608, 7600701, 7666794, 7732888, 7798981, 7865074, 7931167, 7997260,
174 	8063353, 8129446, 8195539, 8261632, 8327725, 8393818,
175 };
176 
177 const int32 Cr_Rtab[256] = {
178 	-6694108, -6641810, -6589513, -6537215, -6484917, -6432620, -6380322,
179 	-6328024, -6275726, -6223429, -6171131, -6118833, -6066535, -6014238,
180 	-5961940, -5909642, -5857345, -5805047, -5752749, -5700451, -5648154,
181 	-5595856, -5543558, -5491260, -5438963, -5386665, -5334367, -5282070,
182 	-5229772, -5177474, -5125176, -5072879, -5020581, -4968283, -4915985,
183 	-4863688, -4811390, -4759092, -4706795, -4654497, -4602199, -4549901,
184 	-4497604, -4445306, -4393008, -4340710, -4288413, -4236115, -4183817,
185 	-4131520, -4079222, -4026924, -3974626, -3922329, -3870031, -3817733,
186 	-3765435, -3713138, -3660840, -3608542, -3556245, -3503947, -3451649,
187 	-3399351, -3347054, -3294756, -3242458, -3190160, -3137863, -3085565,
188 	-3033267, -2980969, -2928672, -2876374, -2824076, -2771779, -2719481,
189 	-2667183, -2614885, -2562588, -2510290, -2457992, -2405694, -2353397,
190 	-2301099, -2248801, -2196504, -2144206, -2091908, -2039610, -1987313,
191 	-1935015, -1882717, -1830419, -1778122, -1725824, -1673526, -1621229,
192 	-1568931, -1516633, -1464335, -1412038, -1359740, -1307442, -1255144,
193 	-1202847, -1150549, -1098251, -1045954, -993656, -941358, -889060, -836763,
194 	-784465, -732167, -679869, -627572, -575274, -522976, -470679, -418381,
195 	-366083, -313785, -261488, -209190, -156892, -104594, -52297, 0, 52298,
196 	104595, 156893, 209191, 261489, 313786, 366084, 418382, 470680, 522977,
197 	575275, 627573, 679870, 732168, 784466, 836764, 889061, 941359, 993657,
198 	1045955, 1098252, 1150550, 1202848, 1255145, 1307443, 1359741, 1412039,
199 	1464336, 1516634, 1568932, 1621230, 1673527, 1725825, 1778123, 1830420,
200 	1882718, 1935016, 1987314, 2039611, 2091909, 2144207, 2196505, 2248802,
201 	2301100, 2353398, 2405695, 2457993, 2510291, 2562589, 2614886, 2667184,
202 	2719482, 2771780, 2824077, 2876375, 2928673, 2980970, 3033268, 3085566,
203 	3137864, 3190161, 3242459, 3294757, 3347055, 3399352, 3451650, 3503948,
204 	3556246, 3608543, 3660841, 3713139, 3765436, 3817734, 3870032, 3922330,
205 	3974627, 4026925, 4079223, 4131521, 4183818, 4236116, 4288414, 4340711,
206 	4393009, 4445307, 4497605, 4549902, 4602200, 4654498, 4706796, 4759093,
207 	4811391, 4863689, 4915986, 4968284, 5020582, 5072880, 5125177, 5177475,
208 	5229773, 5282071, 5334368, 5386666, 5438964, 5491261, 5543559, 5595857,
209 	5648155, 5700452, 5752750, 5805048, 5857346, 5909643, 5961941, 6014239,
210 	6066536, 6118834, 6171132, 6223430, 6275727, 6328025, 6380323, 6432621,
211 	6484918, 6537216, 6589514, 6641811,
212 };
213 
214 const int32 Cr_Gtab[256] = {
215 	3409969, 3383329, 3356688, 3330048, 3303408, 3276767, 3250127, 3223486,
216 	3196846, 3170206, 3143565, 3116925, 3090285, 3063644, 3037004, 3010363,
217 	2983723, 2957083, 2930442, 2903802, 2877161, 2850521, 2823881, 2797240,
218 	2770600, 2743960, 2717319, 2690679, 2664038, 2637398, 2610758, 2584117,
219 	2557477, 2530836, 2504196, 2477556, 2450915, 2424275, 2397635, 2370994,
220 	2344354, 2317713, 2291073, 2264433, 2237792, 2211152, 2184511, 2157871,
221 	2131231, 2104590, 2077950, 2051310, 2024669, 1998029, 1971388, 1944748,
222 	1918108, 1891467, 1864827, 1838186, 1811546, 1784906, 1758265, 1731625,
223 	1704985, 1678344, 1651704, 1625063, 1598423, 1571783, 1545142, 1518502,
224 	1491862, 1465221, 1438581, 1411940, 1385300, 1358660, 1332019, 1305379,
225 	1278738, 1252098, 1225458, 1198817, 1172177, 1145537, 1118896, 1092256,
226 	1065615, 1038975, 1012335, 985694, 959054, 932413, 905773, 879133, 852492,
227 	825852, 799212, 772571, 745931, 719290, 692650, 666010, 639369, 612729,
228 	586088, 559448, 532808, 506167, 479527, 452887, 426246, 399606, 372965,
229 	346325, 319685, 293044, 266404, 239763, 213123, 186483, 159842, 133202,
230 	106562, 79921, 53281, 26640, 0, -26639, -53280, -79920, -106561, -133201,
231 	-159841, -186482, -213122, -239762, -266403, -293043, -319684, -346324,
232 	-372964, -399605, -426245, -452886, -479526, -506166, -532807, -559447,
233 	-586087, -612728, -639368, -666009, -692649, -719289, -745930, -772570,
234 	-799211, -825851, -852491, -879132, -905772, -932412, -959053, -985693,
235 	-1012334, -1038974, -1065614, -1092255, -1118895, -1145536, -1172176,
236 	-1198816, -1225457, -1252097, -1278737, -1305378, -1332018, -1358659,
237 	-1385299, -1411939, -1438580, -1465220, -1491861, -1518501, -1545141,
238 	-1571782, -1598422, -1625062, -1651703, -1678343, -1704984, -1731624,
239 	-1758264, -1784905, -1811545, -1838185, -1864826, -1891466, -1918107,
240 	-1944747, -1971387, -1998028, -2024668, -2051309, -2077949, -2104589,
241 	-2131230, -2157870, -2184510, -2211151, -2237791, -2264432, -2291072,
242 	-2317712, -2344353, -2370993, -2397634, -2424274, -2450914, -2477555,
243 	-2504195, -2530835, -2557476, -2584116, -2610757, -2637397, -2664037,
244 	-2690678, -2717318, -2743959, -2770599, -2797239, -2823880, -2850520,
245 	-2877160, -2903801, -2930441, -2957082, -2983722, -3010362, -3037003,
246 	-3063643, -3090284, -3116924, -3143564, -3170205, -3196845, -3223485,
247 	-3250126, -3276766, -3303407, -3330047, -3356687, -3383328,
248 };
249 
250 const int32 Ytab[256] = {
251 	-610270, -572128, -533986, -495844, -457702, -419560, -381419, -343277,
252 	-305135, -266993, -228851, -190709, -152567, -114425, -76283, -38141, 0,
253 	38142, 76284, 114426, 152568, 190710, 228852, 266994, 305136, 343278,
254 	381420, 419561, 457703, 495845, 533987, 572129, 610271, 648413, 686555,
255 	724697, 762839, 800981, 839123, 877265, 915407, 953549, 991691, 1029833,
256 	1067975, 1106117, 1144259, 1182401, 1220542, 1258684, 1296826, 1334968,
257 	1373110, 1411252, 1449394, 1487536, 1525678, 1563820, 1601962, 1640104,
258 	1678246, 1716388, 1754530, 1792672, 1830814, 1868956, 1907098, 1945240,
259 	1983382, 2021523, 2059665, 2097807, 2135949, 2174091, 2212233, 2250375,
260 	2288517, 2326659, 2364801, 2402943, 2441085, 2479227, 2517369, 2555511,
261 	2593653, 2631795, 2669937, 2708079, 2746221, 2784362, 2822504, 2860646,
262 	2898788, 2936930, 2975072, 3013214, 3051356, 3089498, 3127640, 3165782,
263 	3203924, 3242066, 3280208, 3318350, 3356492, 3394634, 3432776, 3470918,
264 	3509060, 3547202, 3585343, 3623485, 3661627, 3699769, 3737911, 3776053,
265 	3814195, 3852337, 3890479, 3928621, 3966763, 4004905, 4043047, 4081189,
266 	4119331, 4157473, 4195615, 4233757, 4271899, 4310041, 4348183, 4386324,
267 	4424466, 4462608, 4500750, 4538892, 4577034, 4615176, 4653318, 4691460,
268 	4729602, 4767744, 4805886, 4844028, 4882170, 4920312, 4958454, 4996596,
269 	5034738, 5072880, 5111022, 5149164, 5187305, 5225447, 5263589, 5301731,
270 	5339873, 5378015, 5416157, 5454299, 5492441, 5530583, 5568725, 5606867,
271 	5645009, 5683151, 5721293, 5759435, 5797577, 5835719, 5873861, 5912003,
272 	5950145, 5988286, 6026428, 6064570, 6102712, 6140854, 6178996, 6217138,
273 	6255280, 6293422, 6331564, 6369706, 6407848, 6445990, 6484132, 6522274,
274 	6560416, 6598558, 6636700, 6674842, 6712984, 6751126, 6789267, 6827409,
275 	6865551, 6903693, 6941835, 6979977, 7018119, 7056261, 7094403, 7132545,
276 	7170687, 7208829, 7246971, 7285113, 7323255, 7361397, 7399539, 7437681,
277 	7475823, 7513965, 7552106, 7590248, 7628390, 7666532, 7704674, 7742816,
278 	7780958, 7819100, 7857242, 7895384, 7933526, 7971668, 8009810, 8047952,
279 	8086094, 8124236, 8162378, 8200520, 8238662, 8276804, 8314946, 8353087,
280 	8391229, 8429371, 8467513, 8505655, 8543797, 8581939, 8620081, 8658223,
281 	8696365, 8734507, 8772649, 8810791, 8848933, 8887075, 8925217, 8963359,
282 	9001501, 9039643, 9077785, 9115927,
283 };
284 
285 const uint32 Rsat[704] = {
286 	0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000,
287 	0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000,
288 	0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000,
289 	0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000,
290 	0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000,
291 	0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000,
292 	0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000,
293 	0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000,
294 	0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000,
295 	0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000,
296 	0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000,
297 	0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000,
298 	0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000,
299 	0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000,
300 	0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000,
301 	0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000,
302 	0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000,
303 	0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000,
304 	0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000,
305 	0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000,
306 	0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000,
307 	0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000,
308 	0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000,
309 	0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000,
310 	0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000,
311 	0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000,
312 	0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000,
313 	0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000,
314 	0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000,
315 	0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000,
316 	0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000,
317 	0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000,
318 	0x010000, 0x020000, 0x030000, 0x040000, 0x050000, 0x060000, 0x070000,
319 	0x080000, 0x090000, 0x0a0000, 0x0b0000, 0x0c0000, 0x0d0000, 0x0e0000,
320 	0x0f0000, 0x100000, 0x110000, 0x120000, 0x130000, 0x140000, 0x150000,
321 	0x160000, 0x170000, 0x180000, 0x190000, 0x1a0000, 0x1b0000, 0x1c0000,
322 	0x1d0000, 0x1e0000, 0x1f0000, 0x200000, 0x210000, 0x220000, 0x230000,
323 	0x240000, 0x250000, 0x260000, 0x270000, 0x280000, 0x290000, 0x2a0000,
324 	0x2b0000, 0x2c0000, 0x2d0000, 0x2e0000, 0x2f0000, 0x300000, 0x310000,
325 	0x320000, 0x330000, 0x340000, 0x350000, 0x360000, 0x370000, 0x380000,
326 	0x390000, 0x3a0000, 0x3b0000, 0x3c0000, 0x3d0000, 0x3e0000, 0x3f0000,
327 	0x400000, 0x410000, 0x420000, 0x430000, 0x440000, 0x450000, 0x460000,
328 	0x470000, 0x480000, 0x490000, 0x4a0000, 0x4b0000, 0x4c0000, 0x4d0000,
329 	0x4e0000, 0x4f0000, 0x500000, 0x510000, 0x520000, 0x530000, 0x540000,
330 	0x550000, 0x560000, 0x570000, 0x580000, 0x590000, 0x5a0000, 0x5b0000,
331 	0x5c0000, 0x5d0000, 0x5e0000, 0x5f0000, 0x600000, 0x610000, 0x620000,
332 	0x630000, 0x640000, 0x650000, 0x660000, 0x670000, 0x680000, 0x690000,
333 	0x6a0000, 0x6b0000, 0x6c0000, 0x6d0000, 0x6e0000, 0x6f0000, 0x700000,
334 	0x710000, 0x720000, 0x730000, 0x740000, 0x750000, 0x760000, 0x770000,
335 	0x780000, 0x790000, 0x7a0000, 0x7b0000, 0x7c0000, 0x7d0000, 0x7e0000,
336 	0x7f0000, 0x800000, 0x810000, 0x820000, 0x830000, 0x840000, 0x850000,
337 	0x860000, 0x870000, 0x880000, 0x890000, 0x8a0000, 0x8b0000, 0x8c0000,
338 	0x8d0000, 0x8e0000, 0x8f0000, 0x900000, 0x910000, 0x920000, 0x930000,
339 	0x940000, 0x950000, 0x960000, 0x970000, 0x980000, 0x990000, 0x9a0000,
340 	0x9b0000, 0x9c0000, 0x9d0000, 0x9e0000, 0x9f0000, 0xa00000, 0xa10000,
341 	0xa20000, 0xa30000, 0xa40000, 0xa50000, 0xa60000, 0xa70000, 0xa80000,
342 	0xa90000, 0xaa0000, 0xab0000, 0xac0000, 0xad0000, 0xae0000, 0xaf0000,
343 	0xb00000, 0xb10000, 0xb20000, 0xb30000, 0xb40000, 0xb50000, 0xb60000,
344 	0xb70000, 0xb80000, 0xb90000, 0xba0000, 0xbb0000, 0xbc0000, 0xbd0000,
345 	0xbe0000, 0xbf0000, 0xc00000, 0xc10000, 0xc20000, 0xc30000, 0xc40000,
346 	0xc50000, 0xc60000, 0xc70000, 0xc80000, 0xc90000, 0xca0000, 0xcb0000,
347 	0xcc0000, 0xcd0000, 0xce0000, 0xcf0000, 0xd00000, 0xd10000, 0xd20000,
348 	0xd30000, 0xd40000, 0xd50000, 0xd60000, 0xd70000, 0xd80000, 0xd90000,
349 	0xda0000, 0xdb0000, 0xdc0000, 0xdd0000, 0xde0000, 0xdf0000, 0xe00000,
350 	0xe10000, 0xe20000, 0xe30000, 0xe40000, 0xe50000, 0xe60000, 0xe70000,
351 	0xe80000, 0xe90000, 0xea0000, 0xeb0000, 0xec0000, 0xed0000, 0xee0000,
352 	0xef0000, 0xf00000, 0xf10000, 0xf20000, 0xf30000, 0xf40000, 0xf50000,
353 	0xf60000, 0xf70000, 0xf80000, 0xf90000, 0xfa0000, 0xfb0000, 0xfc0000,
354 	0xfd0000, 0xfe0000, 0xff0000, 0xff0000, 0xff0000, 0xff0000, 0xff0000,
355 	0xff0000, 0xff0000, 0xff0000, 0xff0000, 0xff0000, 0xff0000, 0xff0000,
356 	0xff0000, 0xff0000, 0xff0000, 0xff0000, 0xff0000, 0xff0000, 0xff0000,
357 	0xff0000, 0xff0000, 0xff0000, 0xff0000, 0xff0000, 0xff0000, 0xff0000,
358 	0xff0000, 0xff0000, 0xff0000, 0xff0000, 0xff0000, 0xff0000, 0xff0000,
359 	0xff0000, 0xff0000, 0xff0000, 0xff0000, 0xff0000, 0xff0000, 0xff0000,
360 	0xff0000, 0xff0000, 0xff0000, 0xff0000, 0xff0000, 0xff0000, 0xff0000,
361 	0xff0000, 0xff0000, 0xff0000, 0xff0000, 0xff0000, 0xff0000, 0xff0000,
362 	0xff0000, 0xff0000, 0xff0000, 0xff0000, 0xff0000, 0xff0000, 0xff0000,
363 	0xff0000, 0xff0000, 0xff0000, 0xff0000, 0xff0000, 0xff0000, 0xff0000,
364 	0xff0000, 0xff0000, 0xff0000, 0xff0000, 0xff0000, 0xff0000, 0xff0000,
365 	0xff0000, 0xff0000, 0xff0000, 0xff0000, 0xff0000, 0xff0000, 0xff0000,
366 	0xff0000, 0xff0000, 0xff0000, 0xff0000, 0xff0000, 0xff0000, 0xff0000,
367 	0xff0000, 0xff0000, 0xff0000, 0xff0000, 0xff0000, 0xff0000, 0xff0000,
368 	0xff0000, 0xff0000, 0xff0000, 0xff0000, 0xff0000, 0xff0000, 0xff0000,
369 	0xff0000, 0xff0000, 0xff0000, 0xff0000, 0xff0000, 0xff0000, 0xff0000,
370 	0xff0000, 0xff0000, 0xff0000, 0xff0000, 0xff0000, 0xff0000, 0xff0000,
371 	0xff0000, 0xff0000, 0xff0000, 0xff0000, 0xff0000, 0xff0000, 0xff0000,
372 	0xff0000, 0xff0000, 0xff0000, 0xff0000, 0xff0000, 0xff0000, 0xff0000,
373 	0xff0000, 0xff0000, 0xff0000, 0xff0000, 0xff0000, 0xff0000, 0xff0000,
374 	0xff0000, 0xff0000, 0xff0000, 0xff0000, 0xff0000, 0xff0000, 0xff0000,
375 	0xff0000, 0xff0000, 0xff0000, 0xff0000, 0xff0000, 0xff0000, 0xff0000,
376 	0xff0000, 0xff0000, 0xff0000, 0xff0000, 0xff0000, 0xff0000, 0xff0000,
377 	0xff0000, 0xff0000, 0xff0000, 0xff0000, 0xff0000, 0xff0000, 0xff0000,
378 	0xff0000, 0xff0000, 0xff0000, 0xff0000, 0xff0000, 0xff0000, 0xff0000,
379 	0xff0000, 0xff0000, 0xff0000, 0xff0000, 0xff0000, 0xff0000, 0xff0000,
380 	0xff0000, 0xff0000, 0xff0000, 0xff0000, 0xff0000, 0xff0000, 0xff0000,
381 	0xff0000, 0xff0000, 0xff0000, 0xff0000, 0xff0000, 0xff0000, 0xff0000,
382 	0xff0000, 0xff0000, 0xff0000, 0xff0000, 0xff0000, 0xff0000, 0xff0000,
383 	0xff0000, 0xff0000, 0xff0000, 0xff0000, 0xff0000, 0xff0000, 0xff0000,
384 	0xff0000, 0xff0000, 0xff0000, 0xff0000, 0xff0000, 0xff0000, 0xff0000,
385 	0xff0000, 0xff0000, 0xff0000, 0xff0000, 0xff0000, 0xff0000, 0xff0000,
386 	0xff0000, 0xff0000, 0xff0000, 0xff0000,
387 };
388 
389 const uint32* Rtab = &Rsat[223];
390 
391 const uint32 Gsat[605] = {
392 	0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000,
393 	0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000,
394 	0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000,
395 	0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000,
396 	0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000,
397 	0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000,
398 	0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000,
399 	0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000,
400 	0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000,
401 	0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000,
402 	0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000,
403 	0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000,
404 	0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000,
405 	0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000,
406 	0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000,
407 	0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000,
408 	0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000,
409 	0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000,
410 	0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000,
411 	0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000,
412 	0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000,
413 	0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000,
414 	0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000,
415 	0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000,
416 	0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000100, 0x000200,
417 	0x000300, 0x000400, 0x000500, 0x000600, 0x000700, 0x000800, 0x000900,
418 	0x000a00, 0x000b00, 0x000c00, 0x000d00, 0x000e00, 0x000f00, 0x001000,
419 	0x001100, 0x001200, 0x001300, 0x001400, 0x001500, 0x001600, 0x001700,
420 	0x001800, 0x001900, 0x001a00, 0x001b00, 0x001c00, 0x001d00, 0x001e00,
421 	0x001f00, 0x002000, 0x002100, 0x002200, 0x002300, 0x002400, 0x002500,
422 	0x002600, 0x002700, 0x002800, 0x002900, 0x002a00, 0x002b00, 0x002c00,
423 	0x002d00, 0x002e00, 0x002f00, 0x003000, 0x003100, 0x003200, 0x003300,
424 	0x003400, 0x003500, 0x003600, 0x003700, 0x003800, 0x003900, 0x003a00,
425 	0x003b00, 0x003c00, 0x003d00, 0x003e00, 0x003f00, 0x004000, 0x004100,
426 	0x004200, 0x004300, 0x004400, 0x004500, 0x004600, 0x004700, 0x004800,
427 	0x004900, 0x004a00, 0x004b00, 0x004c00, 0x004d00, 0x004e00, 0x004f00,
428 	0x005000, 0x005100, 0x005200, 0x005300, 0x005400, 0x005500, 0x005600,
429 	0x005700, 0x005800, 0x005900, 0x005a00, 0x005b00, 0x005c00, 0x005d00,
430 	0x005e00, 0x005f00, 0x006000, 0x006100, 0x006200, 0x006300, 0x006400,
431 	0x006500, 0x006600, 0x006700, 0x006800, 0x006900, 0x006a00, 0x006b00,
432 	0x006c00, 0x006d00, 0x006e00, 0x006f00, 0x007000, 0x007100, 0x007200,
433 	0x007300, 0x007400, 0x007500, 0x007600, 0x007700, 0x007800, 0x007900,
434 	0x007a00, 0x007b00, 0x007c00, 0x007d00, 0x007e00, 0x007f00, 0x008000,
435 	0x008100, 0x008200, 0x008300, 0x008400, 0x008500, 0x008600, 0x008700,
436 	0x008800, 0x008900, 0x008a00, 0x008b00, 0x008c00, 0x008d00, 0x008e00,
437 	0x008f00, 0x009000, 0x009100, 0x009200, 0x009300, 0x009400, 0x009500,
438 	0x009600, 0x009700, 0x009800, 0x009900, 0x009a00, 0x009b00, 0x009c00,
439 	0x009d00, 0x009e00, 0x009f00, 0x00a000, 0x00a100, 0x00a200, 0x00a300,
440 	0x00a400, 0x00a500, 0x00a600, 0x00a700, 0x00a800, 0x00a900, 0x00aa00,
441 	0x00ab00, 0x00ac00, 0x00ad00, 0x00ae00, 0x00af00, 0x00b000, 0x00b100,
442 	0x00b200, 0x00b300, 0x00b400, 0x00b500, 0x00b600, 0x00b700, 0x00b800,
443 	0x00b900, 0x00ba00, 0x00bb00, 0x00bc00, 0x00bd00, 0x00be00, 0x00bf00,
444 	0x00c000, 0x00c100, 0x00c200, 0x00c300, 0x00c400, 0x00c500, 0x00c600,
445 	0x00c700, 0x00c800, 0x00c900, 0x00ca00, 0x00cb00, 0x00cc00, 0x00cd00,
446 	0x00ce00, 0x00cf00, 0x00d000, 0x00d100, 0x00d200, 0x00d300, 0x00d400,
447 	0x00d500, 0x00d600, 0x00d700, 0x00d800, 0x00d900, 0x00da00, 0x00db00,
448 	0x00dc00, 0x00dd00, 0x00de00, 0x00df00, 0x00e000, 0x00e100, 0x00e200,
449 	0x00e300, 0x00e400, 0x00e500, 0x00e600, 0x00e700, 0x00e800, 0x00e900,
450 	0x00ea00, 0x00eb00, 0x00ec00, 0x00ed00, 0x00ee00, 0x00ef00, 0x00f000,
451 	0x00f100, 0x00f200, 0x00f300, 0x00f400, 0x00f500, 0x00f600, 0x00f700,
452 	0x00f800, 0x00f900, 0x00fa00, 0x00fb00, 0x00fc00, 0x00fd00, 0x00fe00,
453 	0x00ff00, 0x00ff00, 0x00ff00, 0x00ff00, 0x00ff00, 0x00ff00, 0x00ff00,
454 	0x00ff00, 0x00ff00, 0x00ff00, 0x00ff00, 0x00ff00, 0x00ff00, 0x00ff00,
455 	0x00ff00, 0x00ff00, 0x00ff00, 0x00ff00, 0x00ff00, 0x00ff00, 0x00ff00,
456 	0x00ff00, 0x00ff00, 0x00ff00, 0x00ff00, 0x00ff00, 0x00ff00, 0x00ff00,
457 	0x00ff00, 0x00ff00, 0x00ff00, 0x00ff00, 0x00ff00, 0x00ff00, 0x00ff00,
458 	0x00ff00, 0x00ff00, 0x00ff00, 0x00ff00, 0x00ff00, 0x00ff00, 0x00ff00,
459 	0x00ff00, 0x00ff00, 0x00ff00, 0x00ff00, 0x00ff00, 0x00ff00, 0x00ff00,
460 	0x00ff00, 0x00ff00, 0x00ff00, 0x00ff00, 0x00ff00, 0x00ff00, 0x00ff00,
461 	0x00ff00, 0x00ff00, 0x00ff00, 0x00ff00, 0x00ff00, 0x00ff00, 0x00ff00,
462 	0x00ff00, 0x00ff00, 0x00ff00, 0x00ff00, 0x00ff00, 0x00ff00, 0x00ff00,
463 	0x00ff00, 0x00ff00, 0x00ff00, 0x00ff00, 0x00ff00, 0x00ff00, 0x00ff00,
464 	0x00ff00, 0x00ff00, 0x00ff00, 0x00ff00, 0x00ff00, 0x00ff00, 0x00ff00,
465 	0x00ff00, 0x00ff00, 0x00ff00, 0x00ff00, 0x00ff00, 0x00ff00, 0x00ff00,
466 	0x00ff00, 0x00ff00, 0x00ff00, 0x00ff00, 0x00ff00, 0x00ff00, 0x00ff00,
467 	0x00ff00, 0x00ff00, 0x00ff00, 0x00ff00, 0x00ff00, 0x00ff00, 0x00ff00,
468 	0x00ff00, 0x00ff00, 0x00ff00, 0x00ff00, 0x00ff00, 0x00ff00, 0x00ff00,
469 	0x00ff00, 0x00ff00, 0x00ff00, 0x00ff00, 0x00ff00, 0x00ff00, 0x00ff00,
470 	0x00ff00, 0x00ff00, 0x00ff00, 0x00ff00, 0x00ff00, 0x00ff00, 0x00ff00,
471 	0x00ff00, 0x00ff00, 0x00ff00, 0x00ff00, 0x00ff00, 0x00ff00, 0x00ff00,
472 	0x00ff00, 0x00ff00, 0x00ff00, 0x00ff00, 0x00ff00, 0x00ff00, 0x00ff00,
473 	0x00ff00, 0x00ff00, 0x00ff00, 0x00ff00, 0x00ff00, 0x00ff00, 0x00ff00,
474 	0x00ff00, 0x00ff00, 0x00ff00, 0x00ff00, 0x00ff00, 0x00ff00, 0x00ff00,
475 	0x00ff00, 0x00ff00, 0x00ff00, 0x00ff00, 0x00ff00, 0x00ff00, 0x00ff00,
476 	0x00ff00, 0x00ff00, 0x00ff00, 0x00ff00, 0x00ff00, 0x00ff00, 0x00ff00,
477 	0x00ff00, 0x00ff00, 0x00ff00, 0x00ff00, 0x00ff00, 0x00ff00, 0x00ff00,
478 	0x00ff00, 0x00ff00, 0x00ff00,
479 };
480 const uint32* Gtab = &Gsat[172];
481 
482 const uint32 Bsat[812] = {
483 	0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000,
484 	0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000,
485 	0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000,
486 	0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000,
487 	0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000,
488 	0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000,
489 	0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000,
490 	0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000,
491 	0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000,
492 	0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000,
493 	0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000,
494 	0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000,
495 	0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000,
496 	0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000,
497 	0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000,
498 	0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000,
499 	0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000,
500 	0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000,
501 	0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000,
502 	0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000,
503 	0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000,
504 	0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000,
505 	0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000,
506 	0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000,
507 	0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000,
508 	0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000,
509 	0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000,
510 	0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000,
511 	0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000,
512 	0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000,
513 	0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000,
514 	0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000,
515 	0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000,
516 	0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000,
517 	0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000,
518 	0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000,
519 	0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000,
520 	0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000,
521 	0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000,
522 	0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000001, 0x000002,
523 	0x000003, 0x000004, 0x000005, 0x000006, 0x000007, 0x000008, 0x000009,
524 	0x00000a, 0x00000b, 0x00000c, 0x00000d, 0x00000e, 0x00000f, 0x000010,
525 	0x000011, 0x000012, 0x000013, 0x000014, 0x000015, 0x000016, 0x000017,
526 	0x000018, 0x000019, 0x00001a, 0x00001b, 0x00001c, 0x00001d, 0x00001e,
527 	0x00001f, 0x000020, 0x000021, 0x000022, 0x000023, 0x000024, 0x000025,
528 	0x000026, 0x000027, 0x000028, 0x000029, 0x00002a, 0x00002b, 0x00002c,
529 	0x00002d, 0x00002e, 0x00002f, 0x000030, 0x000031, 0x000032, 0x000033,
530 	0x000034, 0x000035, 0x000036, 0x000037, 0x000038, 0x000039, 0x00003a,
531 	0x00003b, 0x00003c, 0x00003d, 0x00003e, 0x00003f, 0x000040, 0x000041,
532 	0x000042, 0x000043, 0x000044, 0x000045, 0x000046, 0x000047, 0x000048,
533 	0x000049, 0x00004a, 0x00004b, 0x00004c, 0x00004d, 0x00004e, 0x00004f,
534 	0x000050, 0x000051, 0x000052, 0x000053, 0x000054, 0x000055, 0x000056,
535 	0x000057, 0x000058, 0x000059, 0x00005a, 0x00005b, 0x00005c, 0x00005d,
536 	0x00005e, 0x00005f, 0x000060, 0x000061, 0x000062, 0x000063, 0x000064,
537 	0x000065, 0x000066, 0x000067, 0x000068, 0x000069, 0x00006a, 0x00006b,
538 	0x00006c, 0x00006d, 0x00006e, 0x00006f, 0x000070, 0x000071, 0x000072,
539 	0x000073, 0x000074, 0x000075, 0x000076, 0x000077, 0x000078, 0x000079,
540 	0x00007a, 0x00007b, 0x00007c, 0x00007d, 0x00007e, 0x00007f, 0x000080,
541 	0x000081, 0x000082, 0x000083, 0x000084, 0x000085, 0x000086, 0x000087,
542 	0x000088, 0x000089, 0x00008a, 0x00008b, 0x00008c, 0x00008d, 0x00008e,
543 	0x00008f, 0x000090, 0x000091, 0x000092, 0x000093, 0x000094, 0x000095,
544 	0x000096, 0x000097, 0x000098, 0x000099, 0x00009a, 0x00009b, 0x00009c,
545 	0x00009d, 0x00009e, 0x00009f, 0x0000a0, 0x0000a1, 0x0000a2, 0x0000a3,
546 	0x0000a4, 0x0000a5, 0x0000a6, 0x0000a7, 0x0000a8, 0x0000a9, 0x0000aa,
547 	0x0000ab, 0x0000ac, 0x0000ad, 0x0000ae, 0x0000af, 0x0000b0, 0x0000b1,
548 	0x0000b2, 0x0000b3, 0x0000b4, 0x0000b5, 0x0000b6, 0x0000b7, 0x0000b8,
549 	0x0000b9, 0x0000ba, 0x0000bb, 0x0000bc, 0x0000bd, 0x0000be, 0x0000bf,
550 	0x0000c0, 0x0000c1, 0x0000c2, 0x0000c3, 0x0000c4, 0x0000c5, 0x0000c6,
551 	0x0000c7, 0x0000c8, 0x0000c9, 0x0000ca, 0x0000cb, 0x0000cc, 0x0000cd,
552 	0x0000ce, 0x0000cf, 0x0000d0, 0x0000d1, 0x0000d2, 0x0000d3, 0x0000d4,
553 	0x0000d5, 0x0000d6, 0x0000d7, 0x0000d8, 0x0000d9, 0x0000da, 0x0000db,
554 	0x0000dc, 0x0000dd, 0x0000de, 0x0000df, 0x0000e0, 0x0000e1, 0x0000e2,
555 	0x0000e3, 0x0000e4, 0x0000e5, 0x0000e6, 0x0000e7, 0x0000e8, 0x0000e9,
556 	0x0000ea, 0x0000eb, 0x0000ec, 0x0000ed, 0x0000ee, 0x0000ef, 0x0000f0,
557 	0x0000f1, 0x0000f2, 0x0000f3, 0x0000f4, 0x0000f5, 0x0000f6, 0x0000f7,
558 	0x0000f8, 0x0000f9, 0x0000fa, 0x0000fb, 0x0000fc, 0x0000fd, 0x0000fe,
559 	0x0000ff, 0x0000ff, 0x0000ff, 0x0000ff, 0x0000ff, 0x0000ff, 0x0000ff,
560 	0x0000ff, 0x0000ff, 0x0000ff, 0x0000ff, 0x0000ff, 0x0000ff, 0x0000ff,
561 	0x0000ff, 0x0000ff, 0x0000ff, 0x0000ff, 0x0000ff, 0x0000ff, 0x0000ff,
562 	0x0000ff, 0x0000ff, 0x0000ff, 0x0000ff, 0x0000ff, 0x0000ff, 0x0000ff,
563 	0x0000ff, 0x0000ff, 0x0000ff, 0x0000ff, 0x0000ff, 0x0000ff, 0x0000ff,
564 	0x0000ff, 0x0000ff, 0x0000ff, 0x0000ff, 0x0000ff, 0x0000ff, 0x0000ff,
565 	0x0000ff, 0x0000ff, 0x0000ff, 0x0000ff, 0x0000ff, 0x0000ff, 0x0000ff,
566 	0x0000ff, 0x0000ff, 0x0000ff, 0x0000ff, 0x0000ff, 0x0000ff, 0x0000ff,
567 	0x0000ff, 0x0000ff, 0x0000ff, 0x0000ff, 0x0000ff, 0x0000ff, 0x0000ff,
568 	0x0000ff, 0x0000ff, 0x0000ff, 0x0000ff, 0x0000ff, 0x0000ff, 0x0000ff,
569 	0x0000ff, 0x0000ff, 0x0000ff, 0x0000ff, 0x0000ff, 0x0000ff, 0x0000ff,
570 	0x0000ff, 0x0000ff, 0x0000ff, 0x0000ff, 0x0000ff, 0x0000ff, 0x0000ff,
571 	0x0000ff, 0x0000ff, 0x0000ff, 0x0000ff, 0x0000ff, 0x0000ff, 0x0000ff,
572 	0x0000ff, 0x0000ff, 0x0000ff, 0x0000ff, 0x0000ff, 0x0000ff, 0x0000ff,
573 	0x0000ff, 0x0000ff, 0x0000ff, 0x0000ff, 0x0000ff, 0x0000ff, 0x0000ff,
574 	0x0000ff, 0x0000ff, 0x0000ff, 0x0000ff, 0x0000ff, 0x0000ff, 0x0000ff,
575 	0x0000ff, 0x0000ff, 0x0000ff, 0x0000ff, 0x0000ff, 0x0000ff, 0x0000ff,
576 	0x0000ff, 0x0000ff, 0x0000ff, 0x0000ff, 0x0000ff, 0x0000ff, 0x0000ff,
577 	0x0000ff, 0x0000ff, 0x0000ff, 0x0000ff, 0x0000ff, 0x0000ff, 0x0000ff,
578 	0x0000ff, 0x0000ff, 0x0000ff, 0x0000ff, 0x0000ff, 0x0000ff, 0x0000ff,
579 	0x0000ff, 0x0000ff, 0x0000ff, 0x0000ff, 0x0000ff, 0x0000ff, 0x0000ff,
580 	0x0000ff, 0x0000ff, 0x0000ff, 0x0000ff, 0x0000ff, 0x0000ff, 0x0000ff,
581 	0x0000ff, 0x0000ff, 0x0000ff, 0x0000ff, 0x0000ff, 0x0000ff, 0x0000ff,
582 	0x0000ff, 0x0000ff, 0x0000ff, 0x0000ff, 0x0000ff, 0x0000ff, 0x0000ff,
583 	0x0000ff, 0x0000ff, 0x0000ff, 0x0000ff, 0x0000ff, 0x0000ff, 0x0000ff,
584 	0x0000ff, 0x0000ff, 0x0000ff, 0x0000ff, 0x0000ff, 0x0000ff, 0x0000ff,
585 	0x0000ff, 0x0000ff, 0x0000ff, 0x0000ff, 0x0000ff, 0x0000ff, 0x0000ff,
586 	0x0000ff, 0x0000ff, 0x0000ff, 0x0000ff, 0x0000ff, 0x0000ff, 0x0000ff,
587 	0x0000ff, 0x0000ff, 0x0000ff, 0x0000ff, 0x0000ff, 0x0000ff, 0x0000ff,
588 	0x0000ff, 0x0000ff, 0x0000ff, 0x0000ff, 0x0000ff, 0x0000ff, 0x0000ff,
589 	0x0000ff, 0x0000ff, 0x0000ff, 0x0000ff, 0x0000ff, 0x0000ff, 0x0000ff,
590 	0x0000ff, 0x0000ff, 0x0000ff, 0x0000ff, 0x0000ff, 0x0000ff, 0x0000ff,
591 	0x0000ff, 0x0000ff, 0x0000ff, 0x0000ff, 0x0000ff, 0x0000ff, 0x0000ff,
592 	0x0000ff, 0x0000ff, 0x0000ff, 0x0000ff, 0x0000ff, 0x0000ff, 0x0000ff,
593 	0x0000ff, 0x0000ff, 0x0000ff, 0x0000ff, 0x0000ff, 0x0000ff, 0x0000ff,
594 	0x0000ff, 0x0000ff, 0x0000ff, 0x0000ff, 0x0000ff, 0x0000ff, 0x0000ff,
595 	0x0000ff, 0x0000ff, 0x0000ff, 0x0000ff, 0x0000ff, 0x0000ff, 0x0000ff,
596 	0x0000ff, 0x0000ff, 0x0000ff, 0x0000ff, 0x0000ff, 0x0000ff, 0x0000ff,
597 	0x0000ff, 0x0000ff, 0x0000ff, 0x0000ff, 0x0000ff, 0x0000ff, 0x0000ff,
598 	0x0000ff, 0x0000ff, 0x0000ff, 0x0000ff, 0x0000ff, 0x0000ff, 0x0000ff,
599 };
600 
601 const uint32* Btab = &Bsat[277];
602