]> git.proxmox.com Git - mirror_ubuntu-bionic-kernel.git/blob - drivers/media/video/gspca/topro.c
USB: convert drivers/media/* to use module_usb_driver()
[mirror_ubuntu-bionic-kernel.git] / drivers / media / video / gspca / topro.c
1 /*
2 * Topro TP6800/6810 webcam driver.
3 *
4 * Copyright (C) 2011 Jean-François Moine (http://moinejf.free.fr)
5 * Copyright (C) 2009 Anders Blomdell (anders.blomdell@control.lth.se)
6 * Copyright (C) 2008 Thomas Champagne (lafeuil@gmail.com)
7 *
8 * This program is free software; you can redistribute it and/or modify
9 * it under the terms of the GNU General Public License as published by
10 * the Free Software Foundation; either version 2 of the License, or
11 * (at your option) any later version.
12 *
13 * This program is distributed in the hope that it will be useful,
14 * but WITHOUT ANY WARRANTY; without even the implied warranty of
15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 * GNU General Public License for more details.
17 *
18 * You should have received a copy of the GNU General Public License
19 * along with this program; If not, see <http://www.gnu.org/licenses/>.
20 */
21
22 #define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
23
24 #include "gspca.h"
25
26 MODULE_DESCRIPTION("Topro TP6800/6810 gspca webcam driver");
27 MODULE_AUTHOR("Jean-Francois Moine <http://moinejf.free.fr>, "
28 "Anders Blomdell <anders.blomdell@control.lth.se>");
29 MODULE_LICENSE("GPL");
30
31 static int force_sensor = -1;
32
33 /* JPEG header */
34 static const u8 jpeg_head[] = {
35 0xff, 0xd8, /* jpeg */
36
37 /* quantization table quality 50% */
38 0xff, 0xdb, 0x00, 0x84, /* DQT */
39 0,
40 #define JPEG_QT0_OFFSET 7
41 0x10, 0x0b, 0x0c, 0x0e, 0x0c, 0x0a, 0x10, 0x0e,
42 0x0d, 0x0e, 0x12, 0x11, 0x10, 0x13, 0x18, 0x28,
43 0x1a, 0x18, 0x16, 0x16, 0x18, 0x31, 0x23, 0x25,
44 0x1d, 0x28, 0x3a, 0x33, 0x3d, 0x3c, 0x39, 0x33,
45 0x38, 0x37, 0x40, 0x48, 0x5c, 0x4e, 0x40, 0x44,
46 0x57, 0x45, 0x37, 0x38, 0x50, 0x6d, 0x51, 0x57,
47 0x5f, 0x62, 0x67, 0x68, 0x67, 0x3e, 0x4d, 0x71,
48 0x79, 0x70, 0x64, 0x78, 0x5c, 0x65, 0x67, 0x63,
49 1,
50 #define JPEG_QT1_OFFSET 72
51 0x11, 0x12, 0x12, 0x18, 0x15, 0x18, 0x2f, 0x1a,
52 0x1a, 0x2f, 0x63, 0x42, 0x38, 0x42, 0x63, 0x63,
53 0x63, 0x63, 0x63, 0x63, 0x63, 0x63, 0x63, 0x63,
54 0x63, 0x63, 0x63, 0x63, 0x63, 0x63, 0x63, 0x63,
55 0x63, 0x63, 0x63, 0x63, 0x63, 0x63, 0x63, 0x63,
56 0x63, 0x63, 0x63, 0x63, 0x63, 0x63, 0x63, 0x63,
57 0x63, 0x63, 0x63, 0x63, 0x63, 0x63, 0x63, 0x63,
58 0x63, 0x63, 0x63, 0x63, 0x63, 0x63, 0x63, 0x63,
59
60 /* Define Huffman table (thanks to Thomas Kaiser) */
61 0xff, 0xc4, 0x01, 0x5e,
62 0x00, 0x00, 0x02, 0x03,
63 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00,
64 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x02,
65 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x10,
66 0x00, 0x02, 0x01, 0x02, 0x04, 0x04, 0x03, 0x04,
67 0x07, 0x05, 0x04, 0x06, 0x01, 0x00, 0x00, 0x57,
68 0x01, 0x02, 0x03, 0x00, 0x11, 0x04, 0x12, 0x21,
69 0x31, 0x13, 0x41, 0x51, 0x61, 0x05, 0x22, 0x32,
70 0x14, 0x71, 0x81, 0x91, 0x15, 0x23, 0x42, 0x52,
71 0x62, 0xa1, 0xb1, 0x06, 0x33, 0x72, 0xc1, 0xd1,
72 0x24, 0x43, 0x53, 0x82, 0x16, 0x34, 0x92, 0xa2,
73 0xe1, 0xf1, 0xf0, 0x07, 0x08, 0x17, 0x18, 0x25,
74 0x26, 0x27, 0x28, 0x35, 0x36, 0x37, 0x38, 0x44,
75 0x45, 0x46, 0x47, 0x48, 0x54, 0x55, 0x56, 0x57,
76 0x58, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68, 0x73,
77 0x74, 0x75, 0x76, 0x77, 0x78, 0x83, 0x84, 0x85,
78 0x86, 0x87, 0x88, 0x93, 0x94, 0x95, 0x96, 0x97,
79 0x98, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7, 0xa8, 0xb2,
80 0xb3, 0xb4, 0xb5, 0xb6, 0xb7, 0xb8, 0xc2, 0xc3,
81 0xc4, 0xc5, 0xc6, 0xc7, 0xc8, 0xd2, 0xd3, 0xd4,
82 0xd5, 0xd6, 0xd7, 0xd8, 0xe2, 0xe3, 0xe4, 0xe5,
83 0xe6, 0xe7, 0xe8, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6,
84 0xf7, 0xf8, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
85 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00,
86 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x03, 0x04,
87 0x05, 0x06, 0x07, 0x08, 0x09, 0x11, 0x00, 0x02,
88 0x01, 0x02, 0x04, 0x04, 0x03, 0x04, 0x07, 0x05,
89 0x04, 0x06, 0x01, 0x00, 0x00, 0x57, 0x00, 0x01,
90 0x11, 0x02, 0x21, 0x03, 0x12, 0x31, 0x41, 0x13,
91 0x22, 0x51, 0x61, 0x04, 0x32, 0x71, 0x05, 0x14,
92 0x23, 0x42, 0x33, 0x52, 0x81, 0x91, 0xa1, 0xb1,
93 0xf0, 0x06, 0x15, 0xc1, 0xd1, 0xe1, 0x24, 0x43,
94 0x62, 0xf1, 0x16, 0x25, 0x34, 0x53, 0x72, 0x82,
95 0x92, 0x07, 0x08, 0x17, 0x18, 0x26, 0x27, 0x28,
96 0x35, 0x36, 0x37, 0x38, 0x44, 0x45, 0x46, 0x47,
97 0x48, 0x54, 0x55, 0x56, 0x57, 0x58, 0x63, 0x64,
98 0x65, 0x66, 0x67, 0x68, 0x73, 0x74, 0x75, 0x76,
99 0x77, 0x78, 0x83, 0x84, 0x85, 0x86, 0x87, 0x88,
100 0x93, 0x94, 0x95, 0x96, 0x97, 0x98, 0xa2, 0xa3,
101 0xa4, 0xa5, 0xa6, 0xa7, 0xa8, 0xb2, 0xb3, 0xb4,
102 0xb5, 0xb6, 0xb7, 0xb8, 0xc2, 0xc3, 0xc4, 0xc5,
103 0xc6, 0xc7, 0xc8, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6,
104 0xd7, 0xd8, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7,
105 0xe8, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, 0xf8,
106 0xff, 0xc0, 0x00, 0x11, /* SOF0 (start of frame 0 */
107 0x08, /* data precision */
108 #define JPEG_HEIGHT_OFFSET 493
109 0x01, 0xe0, /* height */
110 0x02, 0x80, /* width */
111 0x03, /* component number */
112 0x01,
113 0x21, /* samples Y = jpeg 422 */
114 0x00, /* quant Y */
115 0x02, 0x11, 0x01, /* samples CbCr - quant CbCr */
116 0x03, 0x11, 0x01,
117
118 0xff, 0xda, 0x00, 0x0c, /* SOS (start of scan) */
119 0x03, 0x01, 0x00, 0x02, 0x11, 0x03, 0x11, 0x00, 0x3f, 0x00
120 #define JPEG_HDR_SZ 521
121 };
122
123 enum e_ctrl {
124 EXPOSURE,
125 QUALITY,
126 SHARPNESS,
127 RGAIN,
128 GAIN,
129 BGAIN,
130 GAMMA,
131 AUTOGAIN,
132 NCTRLS /* number of controls */
133 };
134
135 #define AUTOGAIN_DEF 1
136
137 struct sd {
138 struct gspca_dev gspca_dev; /* !! must be the first item */
139
140 struct gspca_ctrl ctrls[NCTRLS];
141
142 u8 framerate;
143 u8 quality; /* webcam current JPEG quality (0..16) */
144 s8 ag_cnt; /* autogain / start counter for tp6810 */
145 #define AG_CNT_START 13 /* check gain every N frames */
146
147 u8 bridge;
148 u8 sensor;
149
150 u8 jpeg_hdr[JPEG_HDR_SZ];
151 };
152
153 enum bridges {
154 BRIDGE_TP6800,
155 BRIDGE_TP6810,
156 };
157
158 enum sensors {
159 SENSOR_CX0342,
160 SENSOR_SOI763A, /* ~= ov7630 / ov7648 */
161 NSENSORS
162 };
163
164 static const struct v4l2_pix_format vga_mode[] = {
165 {320, 240, V4L2_PIX_FMT_JPEG, V4L2_FIELD_NONE,
166 .bytesperline = 320,
167 .sizeimage = 320 * 240 * 4 / 8 + 590,
168 .colorspace = V4L2_COLORSPACE_JPEG},
169 {640, 480, V4L2_PIX_FMT_JPEG, V4L2_FIELD_NONE,
170 .bytesperline = 640,
171 .sizeimage = 640 * 480 * 3 / 8 + 590,
172 .colorspace = V4L2_COLORSPACE_JPEG}
173 };
174
175 /*
176 * JPEG quality
177 * index: webcam compression
178 * value: JPEG quality in %
179 */
180 static const u8 jpeg_q[17] = {
181 88, 77, 67, 57, 55, 55, 45, 45, 36, 36, 30, 30, 26, 26, 22, 22, 94
182 };
183
184 #define BULK_OUT_SIZE 0x20
185 #if BULK_OUT_SIZE > USB_BUF_SZ
186 #error "USB buffer too small"
187 #endif
188
189 static const u8 rates[] = {30, 20, 15, 10, 7, 5};
190 static const struct framerates framerates[] = {
191 {
192 .rates = rates,
193 .nrates = ARRAY_SIZE(rates)
194 },
195 {
196 .rates = rates,
197 .nrates = ARRAY_SIZE(rates)
198 }
199 };
200 static const u8 rates_6810[] = {30, 15, 10, 7, 5};
201 static const struct framerates framerates_6810[] = {
202 {
203 .rates = rates_6810,
204 .nrates = ARRAY_SIZE(rates_6810)
205 },
206 {
207 .rates = rates_6810,
208 .nrates = ARRAY_SIZE(rates_6810)
209 }
210 };
211
212 /*
213 * webcam quality in %
214 * the last value is the ultra fine quality
215 */
216
217 /* TP6800 register offsets */
218 #define TP6800_R10_SIF_TYPE 0x10
219 #define TP6800_R11_SIF_CONTROL 0x11
220 #define TP6800_R12_SIF_ADDR_S 0x12
221 #define TP6800_R13_SIF_TX_DATA 0x13
222 #define TP6800_R14_SIF_RX_DATA 0x14
223 #define TP6800_R15_GPIO_PU 0x15
224 #define TP6800_R16_GPIO_PD 0x16
225 #define TP6800_R17_GPIO_IO 0x17
226 #define TP6800_R18_GPIO_DATA 0x18
227 #define TP6800_R19_SIF_ADDR_S2 0x19
228 #define TP6800_R1A_SIF_TX_DATA2 0x1a
229 #define TP6800_R1B_SIF_RX_DATA2 0x1b
230 #define TP6800_R21_ENDP_1_CTL 0x21
231 #define TP6800_R2F_TIMING_CFG 0x2f
232 #define TP6800_R30_SENSOR_CFG 0x30
233 #define TP6800_R31_PIXEL_START 0x31
234 #define TP6800_R32_PIXEL_END_L 0x32
235 #define TP6800_R33_PIXEL_END_H 0x33
236 #define TP6800_R34_LINE_START 0x34
237 #define TP6800_R35_LINE_END_L 0x35
238 #define TP6800_R36_LINE_END_H 0x36
239 #define TP6800_R37_FRONT_DARK_ST 0x37
240 #define TP6800_R38_FRONT_DARK_END 0x38
241 #define TP6800_R39_REAR_DARK_ST_L 0x39
242 #define TP6800_R3A_REAR_DARK_ST_H 0x3a
243 #define TP6800_R3B_REAR_DARK_END_L 0x3b
244 #define TP6800_R3C_REAR_DARK_END_H 0x3c
245 #define TP6800_R3D_HORIZ_DARK_LINE_L 0x3d
246 #define TP6800_R3E_HORIZ_DARK_LINE_H 0x3e
247 #define TP6800_R3F_FRAME_RATE 0x3f
248 #define TP6800_R50 0x50
249 #define TP6800_R51 0x51
250 #define TP6800_R52 0x52
251 #define TP6800_R53 0x53
252 #define TP6800_R54_DARK_CFG 0x54
253 #define TP6800_R55_GAMMA_R 0x55
254 #define TP6800_R56_GAMMA_G 0x56
255 #define TP6800_R57_GAMMA_B 0x57
256 #define TP6800_R5C_EDGE_THRLD 0x5c
257 #define TP6800_R5D_DEMOSAIC_CFG 0x5d
258 #define TP6800_R78_FORMAT 0x78
259 #define TP6800_R79_QUALITY 0x79
260 #define TP6800_R7A_BLK_THRLD 0x7a
261
262 /* CX0342 register offsets */
263
264 #define CX0342_SENSOR_ID 0x00
265 #define CX0342_VERSION_NO 0x01
266 #define CX0342_ORG_X_L 0x02
267 #define CX0342_ORG_X_H 0x03
268 #define CX0342_ORG_Y_L 0x04
269 #define CX0342_ORG_Y_H 0x05
270 #define CX0342_STOP_X_L 0x06
271 #define CX0342_STOP_X_H 0x07
272 #define CX0342_STOP_Y_L 0x08
273 #define CX0342_STOP_Y_H 0x09
274 #define CX0342_FRAME_WIDTH_L 0x0a
275 #define CX0342_FRAME_WIDTH_H 0x0b
276 #define CX0342_FRAME_HEIGH_L 0x0c
277 #define CX0342_FRAME_HEIGH_H 0x0d
278 #define CX0342_EXPO_LINE_L 0x10
279 #define CX0342_EXPO_LINE_H 0x11
280 #define CX0342_EXPO_CLK_L 0x12
281 #define CX0342_EXPO_CLK_H 0x13
282 #define CX0342_RAW_GRGAIN_L 0x14
283 #define CX0342_RAW_GRGAIN_H 0x15
284 #define CX0342_RAW_GBGAIN_L 0x16
285 #define CX0342_RAW_GBGAIN_H 0x17
286 #define CX0342_RAW_RGAIN_L 0x18
287 #define CX0342_RAW_RGAIN_H 0x19
288 #define CX0342_RAW_BGAIN_L 0x1a
289 #define CX0342_RAW_BGAIN_H 0x1b
290 #define CX0342_GLOBAL_GAIN 0x1c
291 #define CX0342_SYS_CTRL_0 0x20
292 #define CX0342_SYS_CTRL_1 0x21
293 #define CX0342_SYS_CTRL_2 0x22
294 #define CX0342_BYPASS_MODE 0x23
295 #define CX0342_SYS_CTRL_3 0x24
296 #define CX0342_TIMING_EN 0x25
297 #define CX0342_OUTPUT_CTRL 0x26
298 #define CX0342_AUTO_ADC_CALIB 0x27
299 #define CX0342_SYS_CTRL_4 0x28
300 #define CX0342_ADCGN 0x30
301 #define CX0342_SLPCR 0x31
302 #define CX0342_SLPFN_LO 0x32
303 #define CX0342_ADC_CTL 0x33
304 #define CX0342_LVRST_BLBIAS 0x34
305 #define CX0342_VTHSEL 0x35
306 #define CX0342_RAMP_RIV 0x36
307 #define CX0342_LDOSEL 0x37
308 #define CX0342_CLOCK_GEN 0x40
309 #define CX0342_SOFT_RESET 0x41
310 #define CX0342_PLL 0x42
311 #define CX0342_DR_ENH_PULSE_OFFSET_L 0x43
312 #define CX0342_DR_ENH_PULSE_OFFSET_H 0x44
313 #define CX0342_DR_ENH_PULSE_POS_L 0x45
314 #define CX0342_DR_ENH_PULSE_POS_H 0x46
315 #define CX0342_DR_ENH_PULSE_WIDTH 0x47
316 #define CX0342_AS_CURRENT_CNT_L 0x48
317 #define CX0342_AS_CURRENT_CNT_H 0x49
318 #define CX0342_AS_PREVIOUS_CNT_L 0x4a
319 #define CX0342_AS_PREVIOUS_CNT_H 0x4b
320 #define CX0342_SPV_VALUE_L 0x4c
321 #define CX0342_SPV_VALUE_H 0x4d
322 #define CX0342_GPXLTHD_L 0x50
323 #define CX0342_GPXLTHD_H 0x51
324 #define CX0342_RBPXLTHD_L 0x52
325 #define CX0342_RBPXLTHD_H 0x53
326 #define CX0342_PLANETHD_L 0x54
327 #define CX0342_PLANETHD_H 0x55
328 #define CX0342_ROWDARK_TH 0x56
329 #define CX0342_ROWDARK_TOL 0x57
330 #define CX0342_RB_GAP_L 0x58
331 #define CX0342_RB_GAP_H 0x59
332 #define CX0342_G_GAP_L 0x5a
333 #define CX0342_G_GAP_H 0x5b
334 #define CX0342_AUTO_ROW_DARK 0x60
335 #define CX0342_MANUAL_DARK_VALUE 0x61
336 #define CX0342_GB_DARK_OFFSET 0x62
337 #define CX0342_GR_DARK_OFFSET 0x63
338 #define CX0342_RED_DARK_OFFSET 0x64
339 #define CX0342_BLUE_DARK_OFFSET 0x65
340 #define CX0342_DATA_SCALING_MULTI 0x66
341 #define CX0342_AUTOD_Q_FRAME 0x67
342 #define CX0342_AUTOD_ALLOW_VARI 0x68
343 #define CX0342_AUTO_DARK_VALUE_L 0x69
344 #define CX0342_AUTO_DARK_VALUE_H 0x6a
345 #define CX0342_IO_CTRL_0 0x70
346 #define CX0342_IO_CTRL_1 0x71
347 #define CX0342_IO_CTRL_2 0x72
348 #define CX0342_IDLE_CTRL 0x73
349 #define CX0342_TEST_MODE 0x74
350 #define CX0342_FRAME_FIX_DATA_TEST 0x75
351 #define CX0342_FRAME_CNT_TEST 0x76
352 #define CX0342_RST_OVERFLOW_L 0x80
353 #define CX0342_RST_OVERFLOW_H 0x81
354 #define CX0342_RST_UNDERFLOW_L 0x82
355 #define CX0342_RST_UNDERFLOW_H 0x83
356 #define CX0342_DATA_OVERFLOW_L 0x84
357 #define CX0342_DATA_OVERFLOW_H 0x85
358 #define CX0342_DATA_UNDERFLOW_L 0x86
359 #define CX0342_DATA_UNDERFLOW_H 0x87
360 #define CX0342_CHANNEL_0_0_L_irst 0x90
361 #define CX0342_CHANNEL_0_0_H_irst 0x91
362 #define CX0342_CHANNEL_0_1_L_irst 0x92
363 #define CX0342_CHANNEL_0_1_H_irst 0x93
364 #define CX0342_CHANNEL_0_2_L_irst 0x94
365 #define CX0342_CHANNEL_0_2_H_irst 0x95
366 #define CX0342_CHANNEL_0_3_L_irst 0x96
367 #define CX0342_CHANNEL_0_3_H_irst 0x97
368 #define CX0342_CHANNEL_0_4_L_irst 0x98
369 #define CX0342_CHANNEL_0_4_H_irst 0x99
370 #define CX0342_CHANNEL_0_5_L_irst 0x9a
371 #define CX0342_CHANNEL_0_5_H_irst 0x9b
372 #define CX0342_CHANNEL_0_6_L_irst 0x9c
373 #define CX0342_CHANNEL_0_6_H_irst 0x9d
374 #define CX0342_CHANNEL_0_7_L_irst 0x9e
375 #define CX0342_CHANNEL_0_7_H_irst 0x9f
376 #define CX0342_CHANNEL_1_0_L_itx 0xa0
377 #define CX0342_CHANNEL_1_0_H_itx 0xa1
378 #define CX0342_CHANNEL_1_1_L_itx 0xa2
379 #define CX0342_CHANNEL_1_1_H_itx 0xa3
380 #define CX0342_CHANNEL_1_2_L_itx 0xa4
381 #define CX0342_CHANNEL_1_2_H_itx 0xa5
382 #define CX0342_CHANNEL_1_3_L_itx 0xa6
383 #define CX0342_CHANNEL_1_3_H_itx 0xa7
384 #define CX0342_CHANNEL_1_4_L_itx 0xa8
385 #define CX0342_CHANNEL_1_4_H_itx 0xa9
386 #define CX0342_CHANNEL_1_5_L_itx 0xaa
387 #define CX0342_CHANNEL_1_5_H_itx 0xab
388 #define CX0342_CHANNEL_1_6_L_itx 0xac
389 #define CX0342_CHANNEL_1_6_H_itx 0xad
390 #define CX0342_CHANNEL_1_7_L_itx 0xae
391 #define CX0342_CHANNEL_1_7_H_itx 0xaf
392 #define CX0342_CHANNEL_2_0_L_iwl 0xb0
393 #define CX0342_CHANNEL_2_0_H_iwl 0xb1
394 #define CX0342_CHANNEL_2_1_L_iwl 0xb2
395 #define CX0342_CHANNEL_2_1_H_iwl 0xb3
396 #define CX0342_CHANNEL_2_2_L_iwl 0xb4
397 #define CX0342_CHANNEL_2_2_H_iwl 0xb5
398 #define CX0342_CHANNEL_2_3_L_iwl 0xb6
399 #define CX0342_CHANNEL_2_3_H_iwl 0xb7
400 #define CX0342_CHANNEL_2_4_L_iwl 0xb8
401 #define CX0342_CHANNEL_2_4_H_iwl 0xb9
402 #define CX0342_CHANNEL_2_5_L_iwl 0xba
403 #define CX0342_CHANNEL_2_5_H_iwl 0xbb
404 #define CX0342_CHANNEL_2_6_L_iwl 0xbc
405 #define CX0342_CHANNEL_2_6_H_iwl 0xbd
406 #define CX0342_CHANNEL_2_7_L_iwl 0xbe
407 #define CX0342_CHANNEL_2_7_H_iwl 0xbf
408 #define CX0342_CHANNEL_3_0_L_ensp 0xc0
409 #define CX0342_CHANNEL_3_0_H_ensp 0xc1
410 #define CX0342_CHANNEL_3_1_L_ensp 0xc2
411 #define CX0342_CHANNEL_3_1_H_ensp 0xc3
412 #define CX0342_CHANNEL_3_2_L_ensp 0xc4
413 #define CX0342_CHANNEL_3_2_H_ensp 0xc5
414 #define CX0342_CHANNEL_3_3_L_ensp 0xc6
415 #define CX0342_CHANNEL_3_3_H_ensp 0xc7
416 #define CX0342_CHANNEL_3_4_L_ensp 0xc8
417 #define CX0342_CHANNEL_3_4_H_ensp 0xc9
418 #define CX0342_CHANNEL_3_5_L_ensp 0xca
419 #define CX0342_CHANNEL_3_5_H_ensp 0xcb
420 #define CX0342_CHANNEL_3_6_L_ensp 0xcc
421 #define CX0342_CHANNEL_3_6_H_ensp 0xcd
422 #define CX0342_CHANNEL_3_7_L_ensp 0xce
423 #define CX0342_CHANNEL_3_7_H_ensp 0xcf
424 #define CX0342_CHANNEL_4_0_L_sela 0xd0
425 #define CX0342_CHANNEL_4_0_H_sela 0xd1
426 #define CX0342_CHANNEL_4_1_L_sela 0xd2
427 #define CX0342_CHANNEL_4_1_H_sela 0xd3
428 #define CX0342_CHANNEL_5_0_L_intla 0xe0
429 #define CX0342_CHANNEL_5_0_H_intla 0xe1
430 #define CX0342_CHANNEL_5_1_L_intla 0xe2
431 #define CX0342_CHANNEL_5_1_H_intla 0xe3
432 #define CX0342_CHANNEL_5_2_L_intla 0xe4
433 #define CX0342_CHANNEL_5_2_H_intla 0xe5
434 #define CX0342_CHANNEL_5_3_L_intla 0xe6
435 #define CX0342_CHANNEL_5_3_H_intla 0xe7
436 #define CX0342_CHANNEL_6_0_L_xa_sel_pos 0xf0
437 #define CX0342_CHANNEL_6_0_H_xa_sel_pos 0xf1
438 #define CX0342_CHANNEL_7_1_L_cds_pos 0xf2
439 #define CX0342_CHANNEL_7_1_H_cds_pos 0xf3
440 #define CX0342_SENSOR_HEIGHT_L 0xfb
441 #define CX0342_SENSOR_HEIGHT_H 0xfc
442 #define CX0342_SENSOR_WIDTH_L 0xfd
443 #define CX0342_SENSOR_WIDTH_H 0xfe
444 #define CX0342_VSYNC_HSYNC_READ 0xff
445
446 struct cmd {
447 u8 reg;
448 u8 val;
449 };
450
451 static const u8 DQT[17][130] = {
452 /* Define quantization table (thanks to Thomas Kaiser) */
453 { /* Quality 0 */
454 0x00,
455 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04,
456 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04,
457 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04,
458 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04,
459 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04,
460 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04,
461 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04,
462 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04,
463 0x01,
464 0x04, 0x04, 0x04, 0x06, 0x05, 0x06, 0x0b, 0x06,
465 0x06, 0x0b, 0x18, 0x10, 0x0e, 0x10, 0x18, 0x18,
466 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18,
467 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18,
468 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18,
469 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18,
470 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18,
471 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18,
472 },
473 { /* Quality 1 */
474 0x00,
475 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04,
476 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04,
477 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04,
478 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04,
479 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04,
480 0x04, 0x04, 0x04, 0x09, 0x09, 0x09, 0x09, 0x09,
481 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09,
482 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09,
483 0x01,
484 0x08, 0x09, 0x09, 0x0c, 0x0a, 0x0c, 0x17, 0x0d,
485 0x0d, 0x17, 0x31, 0x21, 0x1c, 0x21, 0x31, 0x31,
486 0x31, 0x31, 0x31, 0x31, 0x31, 0x31, 0x31, 0x31,
487 0x31, 0x31, 0x31, 0x31, 0x31, 0x31, 0x31, 0x31,
488 0x31, 0x31, 0x31, 0x31, 0x31, 0x31, 0x31, 0x31,
489 0x31, 0x31, 0x31, 0x31, 0x31, 0x31, 0x31, 0x31,
490 0x31, 0x31, 0x31, 0x31, 0x31, 0x31, 0x31, 0x31,
491 0x31, 0x31, 0x31, 0x31, 0x31, 0x31, 0x31, 0x31,
492 },
493 { /* Quality 2 */
494 0x00,
495 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04,
496 0x04, 0x04, 0x06, 0x06, 0x06, 0x04, 0x04, 0x04,
497 0x04, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06,
498 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06,
499 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06,
500 0x06, 0x06, 0x06, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e,
501 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e,
502 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e,
503 0x01,
504 0x0c, 0x0d, 0x0d, 0x12, 0x0f, 0x12, 0x23, 0x13,
505 0x13, 0x23, 0x4a, 0x31, 0x2a, 0x31, 0x4a, 0x4a,
506 0x4a, 0x4a, 0x4a, 0x4a, 0x4a, 0x4a, 0x4a, 0x4a,
507 0x4a, 0x4a, 0x4a, 0x4a, 0x4a, 0x4a, 0x4a, 0x4a,
508 0x4a, 0x4a, 0x4a, 0x4a, 0x4a, 0x4a, 0x4a, 0x4a,
509 0x4a, 0x4a, 0x4a, 0x4a, 0x4a, 0x4a, 0x4a, 0x4a,
510 0x4a, 0x4a, 0x4a, 0x4a, 0x4a, 0x4a, 0x4a, 0x4a,
511 0x4a, 0x4a, 0x4a, 0x4a, 0x4a, 0x4a, 0x4a, 0x4a,
512 },
513 { /* Quality 3 */
514 0x00,
515 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04,
516 0x04, 0x04, 0x08, 0x08, 0x08, 0x04, 0x04, 0x04,
517 0x04, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08,
518 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08,
519 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08,
520 0x08, 0x08, 0x08, 0x13, 0x13, 0x13, 0x13, 0x13,
521 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13,
522 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13,
523 0x01,
524 0x11, 0x12, 0x12, 0x18, 0x15, 0x18, 0x2f, 0x1a,
525 0x1a, 0x2f, 0x63, 0x42, 0x38, 0x42, 0x63, 0x63,
526 0x63, 0x63, 0x63, 0x63, 0x63, 0x63, 0x63, 0x63,
527 0x63, 0x63, 0x63, 0x63, 0x63, 0x63, 0x63, 0x63,
528 0x63, 0x63, 0x63, 0x63, 0x63, 0x63, 0x63, 0x63,
529 0x63, 0x63, 0x63, 0x63, 0x63, 0x63, 0x63, 0x63,
530 0x63, 0x63, 0x63, 0x63, 0x63, 0x63, 0x63, 0x63,
531 0x63, 0x63, 0x63, 0x63, 0x63, 0x63, 0x63, 0x63,
532 },
533 { /* Quality 4 */
534 0x00,
535 0x04, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05,
536 0x05, 0x05, 0x0a, 0x0a, 0x0a, 0x05, 0x05, 0x05,
537 0x05, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a,
538 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a,
539 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a,
540 0x0a, 0x0a, 0x0a, 0x17, 0x17, 0x17, 0x17, 0x17,
541 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17,
542 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17, 0x17,
543 0x01,
544 0x11, 0x16, 0x16, 0x1e, 0x1a, 0x1e, 0x3a, 0x20,
545 0x20, 0x3a, 0x7b, 0x52, 0x46, 0x52, 0x7b, 0x7b,
546 0x7b, 0x7b, 0x7b, 0x7b, 0x7b, 0x7b, 0x7b, 0x7b,
547 0x7b, 0x7b, 0x7b, 0x7b, 0x7b, 0x7b, 0x7b, 0x7b,
548 0x7b, 0x7b, 0x7b, 0x7b, 0x7b, 0x7b, 0x7b, 0x7b,
549 0x7b, 0x7b, 0x7b, 0x7b, 0x7b, 0x7b, 0x7b, 0x7b,
550 0x7b, 0x7b, 0x7b, 0x7b, 0x7b, 0x7b, 0x7b, 0x7b,
551 0x7b, 0x7b, 0x7b, 0x7b, 0x7b, 0x7b, 0x7b, 0x7b,
552 },
553 { /* Quality 5 */
554 0x00,
555 0x04, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06,
556 0x06, 0x06, 0x0c, 0x0c, 0x0c, 0x06, 0x06, 0x06,
557 0x06, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c,
558 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c,
559 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c,
560 0x0c, 0x0c, 0x0c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c,
561 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c,
562 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c,
563 0x01,
564 0x11, 0x1b, 0x1b, 0x24, 0x1f, 0x24, 0x46, 0x27,
565 0x27, 0x46, 0x94, 0x63, 0x54, 0x63, 0x94, 0x94,
566 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94,
567 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94,
568 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94,
569 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94,
570 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94,
571 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94, 0x94,
572 },
573 { /* Quality 6 */
574 0x00,
575 0x05, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07,
576 0x07, 0x07, 0x0e, 0x0e, 0x0e, 0x07, 0x07, 0x07,
577 0x07, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e,
578 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e,
579 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e,
580 0x0e, 0x0e, 0x0e, 0x21, 0x21, 0x21, 0x21, 0x21,
581 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
582 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
583 0x01,
584 0x15, 0x1f, 0x1f, 0x2a, 0x24, 0x2a, 0x52, 0x2d,
585 0x2d, 0x52, 0xad, 0x73, 0x62, 0x73, 0xad, 0xad,
586 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad,
587 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad,
588 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad,
589 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad,
590 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad,
591 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xad,
592 },
593 { /* Quality 7 */
594 0x00,
595 0x05, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08,
596 0x08, 0x08, 0x10, 0x10, 0x10, 0x08, 0x08, 0x08,
597 0x08, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
598 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
599 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
600 0x10, 0x10, 0x10, 0x26, 0x26, 0x26, 0x26, 0x26,
601 0x26, 0x26, 0x26, 0x26, 0x26, 0x26, 0x26, 0x26,
602 0x26, 0x26, 0x26, 0x26, 0x26, 0x26, 0x26, 0x26,
603 0x01,
604 0x15, 0x24, 0x24, 0x30, 0x2a, 0x30, 0x5e, 0x34,
605 0x34, 0x5e, 0xc6, 0x84, 0x70, 0x84, 0xc6, 0xc6,
606 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6,
607 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6,
608 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6,
609 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6,
610 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6,
611 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6,
612 },
613 { /* Quality 8 */
614 0x00,
615 0x06, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a,
616 0x0a, 0x0a, 0x14, 0x14, 0x14, 0x0a, 0x0a, 0x0a,
617 0x0a, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14,
618 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14,
619 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14,
620 0x14, 0x14, 0x14, 0x2f, 0x2f, 0x2f, 0x2f, 0x2f,
621 0x2f, 0x2f, 0x2f, 0x2f, 0x2f, 0x2f, 0x2f, 0x2f,
622 0x2f, 0x2f, 0x2f, 0x2f, 0x2f, 0x2f, 0x2f, 0x2f,
623 0x01,
624 0x19, 0x2d, 0x2d, 0x3c, 0x34, 0x3c, 0x75, 0x41,
625 0x41, 0x75, 0xf7, 0xa5, 0x8c, 0xa5, 0xf7, 0xf7,
626 0xf7, 0xf7, 0xf7, 0xf7, 0xf7, 0xf7, 0xf7, 0xf7,
627 0xf7, 0xf7, 0xf7, 0xf7, 0xf7, 0xf7, 0xf7, 0xf7,
628 0xf7, 0xf7, 0xf7, 0xf7, 0xf7, 0xf7, 0xf7, 0xf7,
629 0xf7, 0xf7, 0xf7, 0xf7, 0xf7, 0xf7, 0xf7, 0xf7,
630 0xf7, 0xf7, 0xf7, 0xf7, 0xf7, 0xf7, 0xf7, 0xf7,
631 0xf7, 0xf7, 0xf7, 0xf7, 0xf7, 0xf7, 0xf7, 0xf7,
632 },
633 { /* Quality 9 */
634 0x00,
635 0x06, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c,
636 0x0c, 0x0c, 0x18, 0x18, 0x18, 0x0c, 0x0c, 0x0c,
637 0x0c, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18,
638 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18,
639 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18,
640 0x18, 0x18, 0x18, 0x39, 0x39, 0x39, 0x39, 0x39,
641 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39,
642 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39,
643 0x01,
644 0x19, 0x36, 0x36, 0x48, 0x3f, 0x48, 0x8d, 0x4e,
645 0x4e, 0x8d, 0xff, 0xc6, 0xa8, 0xc6, 0xff, 0xff,
646 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
647 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
648 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
649 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
650 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
651 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
652 },
653 { /* Quality 10 */
654 0x00,
655 0x07, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e,
656 0x0e, 0x0e, 0x1c, 0x1c, 0x1c, 0x0e, 0x0e, 0x0e,
657 0x0e, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c,
658 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c,
659 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c,
660 0x1c, 0x1c, 0x1c, 0x42, 0x42, 0x42, 0x42, 0x42,
661 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x42,
662 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x42, 0x42,
663 0x01,
664 0x1d, 0x3f, 0x3f, 0x54, 0x49, 0x54, 0xa4, 0x5b,
665 0x5b, 0xa4, 0xff, 0xe7, 0xc4, 0xe7, 0xff, 0xff,
666 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
667 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
668 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
669 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
670 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
671 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
672 },
673 { /* Quality 11 */
674 0x00,
675 0x07, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
676 0x10, 0x10, 0x20, 0x20, 0x20, 0x10, 0x10, 0x10,
677 0x10, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
678 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
679 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
680 0x20, 0x20, 0x20, 0x4c, 0x4c, 0x4c, 0x4c, 0x4c,
681 0x4c, 0x4c, 0x4c, 0x4c, 0x4c, 0x4c, 0x4c, 0x4c,
682 0x4c, 0x4c, 0x4c, 0x4c, 0x4c, 0x4c, 0x4c, 0x4c,
683 0x01,
684 0x1d, 0x48, 0x48, 0x60, 0x54, 0x60, 0xbc, 0x68,
685 0x68, 0xbc, 0xff, 0xff, 0xe0, 0xff, 0xff, 0xff,
686 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
687 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
688 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
689 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
690 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
691 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
692 },
693 { /* Quality 12 */
694 0x00,
695 0x08, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14,
696 0x14, 0x14, 0x28, 0x28, 0x28, 0x14, 0x14, 0x14,
697 0x14, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28,
698 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28,
699 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28, 0x28,
700 0x28, 0x28, 0x28, 0x5f, 0x5f, 0x5f, 0x5f, 0x5f,
701 0x5f, 0x5f, 0x5f, 0x5f, 0x5f, 0x5f, 0x5f, 0x5f,
702 0x5f, 0x5f, 0x5f, 0x5f, 0x5f, 0x5f, 0x5f, 0x5f,
703 0x01,
704 0x22, 0x5a, 0x5a, 0x78, 0x69, 0x78, 0xeb, 0x82,
705 0x82, 0xeb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
706 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
707 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
708 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
709 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
710 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
711 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
712 },
713 { /* Quality 13 */
714 0x00,
715 0x08, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18,
716 0x18, 0x18, 0x30, 0x30, 0x30, 0x18, 0x18, 0x18,
717 0x18, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30,
718 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30,
719 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30,
720 0x30, 0x30, 0x30, 0x72, 0x72, 0x72, 0x72, 0x72,
721 0x72, 0x72, 0x72, 0x72, 0x72, 0x72, 0x72, 0x72,
722 0x72, 0x72, 0x72, 0x72, 0x72, 0x72, 0x72, 0x72,
723 0x01,
724 0x22, 0x6c, 0x6c, 0x90, 0x7e, 0x90, 0xff, 0x9c,
725 0x9c, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
726 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
727 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
728 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
729 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
730 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
731 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
732 },
733 { /* Quality 14 */
734 0x00,
735 0x0a, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c, 0x1c,
736 0x1c, 0x1c, 0x38, 0x38, 0x38, 0x1c, 0x1c, 0x1c,
737 0x1c, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38,
738 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38,
739 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38, 0x38,
740 0x38, 0x38, 0x38, 0x85, 0x85, 0x85, 0x85, 0x85,
741 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85,
742 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85, 0x85,
743 0x01,
744 0x2a, 0x7e, 0x7e, 0xa8, 0x93, 0xa8, 0xff, 0xb6,
745 0xb6, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
746 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
747 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
748 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
749 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
750 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
751 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
752 },
753 { /* Quality 15 */
754 0x00,
755 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
756 0x20, 0x20, 0x40, 0x40, 0x40, 0x20, 0x20, 0x20,
757 0x20, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40,
758 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40,
759 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40,
760 0x40, 0x40, 0x40, 0x98, 0x98, 0x98, 0x98, 0x98,
761 0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98,
762 0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98, 0x98,
763 0x01,
764 0x2a, 0x90, 0x90, 0xc0, 0xa8, 0xc0, 0xff, 0xd0,
765 0xd0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
766 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
767 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
768 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
769 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
770 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
771 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
772 },
773 { /* Quality 16-31 */
774 0x00,
775 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04,
776 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04,
777 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04,
778 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04,
779 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04,
780 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04,
781 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04,
782 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04,
783 0x01,
784 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04,
785 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04,
786 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04,
787 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04,
788 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04,
789 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04,
790 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04,
791 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04,
792 }
793 };
794
795 static const struct cmd tp6810_cx_init_common[] = {
796 {0x1c, 0x00},
797 {TP6800_R10_SIF_TYPE, 0x00},
798 {0x4e, 0x00},
799 {0x4f, 0x00},
800 {TP6800_R50, 0xff},
801 {TP6800_R51, 0x03},
802 {0x00, 0x07},
803 {TP6800_R79_QUALITY, 0x03},
804 {TP6800_R2F_TIMING_CFG, 0x37},
805 {TP6800_R30_SENSOR_CFG, 0x10},
806 {TP6800_R21_ENDP_1_CTL, 0x00},
807 {TP6800_R52, 0x40},
808 {TP6800_R53, 0x40},
809 {TP6800_R54_DARK_CFG, 0x40},
810 {TP6800_R30_SENSOR_CFG, 0x18},
811 {0x4b, 0x00},
812 {TP6800_R3F_FRAME_RATE, 0x83},
813 {TP6800_R79_QUALITY, 0x05},
814 {TP6800_R21_ENDP_1_CTL, 0x00},
815 {0x7c, 0x04},
816 {0x25, 0x14},
817 {0x26, 0x0f},
818 {0x7b, 0x10},
819 };
820
821 static const struct cmd tp6810_ov_init_common[] = {
822 {0x1c, 0x00},
823 {TP6800_R10_SIF_TYPE, 0x00},
824 {0x4e, 0x00},
825 {0x4f, 0x00},
826 {TP6800_R50, 0xff},
827 {TP6800_R51, 0x03},
828 {0x00, 0x07},
829 {TP6800_R52, 0x40},
830 {TP6800_R53, 0x40},
831 {TP6800_R54_DARK_CFG, 0x40},
832 {TP6800_R79_QUALITY, 0x03},
833 {TP6800_R2F_TIMING_CFG, 0x17},
834 {TP6800_R30_SENSOR_CFG, 0x18},
835 {TP6800_R21_ENDP_1_CTL, 0x00},
836 {TP6800_R3F_FRAME_RATE, 0x86},
837 {0x25, 0x18},
838 {0x26, 0x0f},
839 {0x7b, 0x90},
840 };
841
842 static const struct cmd tp6810_bridge_start[] = {
843 {0x59, 0x88},
844 {0x5a, 0x0f},
845 {0x5b, 0x4e},
846 {TP6800_R5C_EDGE_THRLD, 0x63},
847 {TP6800_R5D_DEMOSAIC_CFG, 0x00},
848 {0x03, 0x7f},
849 {0x04, 0x80},
850 {0x06, 0x00},
851 {0x00, 0x00},
852 };
853
854 static const struct cmd tp6810_late_start[] = {
855 {0x7d, 0x01},
856 {0xb0, 0x04},
857 {0xb1, 0x04},
858 {0xb2, 0x04},
859 {0xb3, 0x04},
860 {0xb4, 0x04},
861 {0xb5, 0x04},
862 {0xb6, 0x08},
863 {0xb7, 0x08},
864 {0xb8, 0x04},
865 {0xb9, 0x04},
866 {0xba, 0x04},
867 {0xbb, 0x04},
868 {0xbc, 0x04},
869 {0xbd, 0x08},
870 {0xbe, 0x08},
871 {0xbf, 0x08},
872 {0xc0, 0x04},
873 {0xc1, 0x04},
874 {0xc2, 0x08},
875 {0xc3, 0x08},
876 {0xc4, 0x08},
877 {0xc5, 0x08},
878 {0xc6, 0x08},
879 {0xc7, 0x13},
880 {0xc8, 0x04},
881 {0xc9, 0x08},
882 {0xca, 0x08},
883 {0xcb, 0x08},
884 {0xcc, 0x08},
885 {0xcd, 0x08},
886 {0xce, 0x13},
887 {0xcf, 0x13},
888 {0xd0, 0x08},
889 {0xd1, 0x08},
890 {0xd2, 0x08},
891 {0xd3, 0x08},
892 {0xd4, 0x08},
893 {0xd5, 0x13},
894 {0xd6, 0x13},
895 {0xd7, 0x13},
896 {0xd8, 0x08},
897 {0xd9, 0x08},
898 {0xda, 0x08},
899 {0xdb, 0x08},
900 {0xdc, 0x13},
901 {0xdd, 0x13},
902 {0xde, 0x13},
903 {0xdf, 0x13},
904 {0xe0, 0x08},
905 {0xe1, 0x08},
906 {0xe2, 0x08},
907 {0xe3, 0x13},
908 {0xe4, 0x13},
909 {0xe5, 0x13},
910 {0xe6, 0x13},
911 {0xe7, 0x13},
912 {0xe8, 0x08},
913 {0xe9, 0x08},
914 {0xea, 0x13},
915 {0xeb, 0x13},
916 {0xec, 0x13},
917 {0xed, 0x13},
918 {0xee, 0x13},
919 {0xef, 0x13},
920 {0x7d, 0x02},
921
922 /* later after isoc start */
923 {0x7d, 0x08},
924 {0x7d, 0x00},
925 };
926
927 static const struct cmd cx0342_timing_seq[] = {
928 {CX0342_CHANNEL_0_1_L_irst, 0x20},
929 {CX0342_CHANNEL_0_2_L_irst, 0x24},
930 {CX0342_CHANNEL_0_2_H_irst, 0x00},
931 {CX0342_CHANNEL_0_3_L_irst, 0x2f},
932 {CX0342_CHANNEL_0_3_H_irst, 0x00},
933 {CX0342_CHANNEL_1_0_L_itx, 0x02},
934 {CX0342_CHANNEL_1_0_H_itx, 0x00},
935 {CX0342_CHANNEL_1_1_L_itx, 0x20},
936 {CX0342_CHANNEL_1_1_H_itx, 0x00},
937 {CX0342_CHANNEL_1_2_L_itx, 0xe4},
938 {CX0342_CHANNEL_1_2_H_itx, 0x00},
939 {CX0342_CHANNEL_1_3_L_itx, 0xee},
940 {CX0342_CHANNEL_1_3_H_itx, 0x00},
941 {CX0342_CHANNEL_2_0_L_iwl, 0x30},
942 {CX0342_CHANNEL_2_0_H_iwl, 0x00},
943 {CX0342_CHANNEL_3_0_L_ensp, 0x34},
944 {CX0342_CHANNEL_3_1_L_ensp, 0xe2},
945 {CX0342_CHANNEL_3_1_H_ensp, 0x00},
946 {CX0342_CHANNEL_3_2_L_ensp, 0xf6},
947 {CX0342_CHANNEL_3_2_H_ensp, 0x00},
948 {CX0342_CHANNEL_3_3_L_ensp, 0xf4},
949 {CX0342_CHANNEL_3_3_H_ensp, 0x02},
950 {CX0342_CHANNEL_4_0_L_sela, 0x26},
951 {CX0342_CHANNEL_4_0_H_sela, 0x00},
952 {CX0342_CHANNEL_4_1_L_sela, 0xe2},
953 {CX0342_CHANNEL_4_1_H_sela, 0x00},
954 {CX0342_CHANNEL_5_0_L_intla, 0x26},
955 {CX0342_CHANNEL_5_1_L_intla, 0x29},
956 {CX0342_CHANNEL_5_2_L_intla, 0xf0},
957 {CX0342_CHANNEL_5_2_H_intla, 0x00},
958 {CX0342_CHANNEL_5_3_L_intla, 0xf3},
959 {CX0342_CHANNEL_5_3_H_intla, 0x00},
960 {CX0342_CHANNEL_6_0_L_xa_sel_pos, 0x24},
961 {CX0342_CHANNEL_7_1_L_cds_pos, 0x02},
962 {CX0342_TIMING_EN, 0x01},
963 };
964
965 /* define the JPEG header */
966 static void jpeg_define(u8 *jpeg_hdr,
967 int height,
968 int width)
969 {
970 memcpy(jpeg_hdr, jpeg_head, sizeof jpeg_head);
971 jpeg_hdr[JPEG_HEIGHT_OFFSET + 0] = height >> 8;
972 jpeg_hdr[JPEG_HEIGHT_OFFSET + 1] = height;
973 jpeg_hdr[JPEG_HEIGHT_OFFSET + 2] = width >> 8;
974 jpeg_hdr[JPEG_HEIGHT_OFFSET + 3] = width;
975 }
976
977 /* set the JPEG quality for sensor soi763a */
978 static void jpeg_set_qual(u8 *jpeg_hdr,
979 int quality)
980 {
981 int i, sc;
982
983 if (quality < 50)
984 sc = 5000 / quality;
985 else
986 sc = 200 - quality * 2;
987 for (i = 0; i < 64; i++) {
988 jpeg_hdr[JPEG_QT0_OFFSET + i] =
989 (jpeg_head[JPEG_QT0_OFFSET + i] * sc + 50) / 100;
990 jpeg_hdr[JPEG_QT1_OFFSET + i] =
991 (jpeg_head[JPEG_QT1_OFFSET + i] * sc + 50) / 100;
992 }
993 }
994
995 static void reg_w(struct gspca_dev *gspca_dev, u8 index, u8 value)
996 {
997 struct usb_device *dev = gspca_dev->dev;
998 int ret;
999
1000 if (gspca_dev->usb_err < 0)
1001 return;
1002 ret = usb_control_msg(dev, usb_sndctrlpipe(dev, 0),
1003 0x0e,
1004 USB_DIR_OUT | USB_TYPE_VENDOR | USB_RECIP_DEVICE,
1005 value, index, NULL, 0, 500);
1006 if (ret < 0) {
1007 pr_err("reg_w err %d\n", ret);
1008 gspca_dev->usb_err = ret;
1009 }
1010 }
1011
1012 /* the returned value is in gspca_dev->usb_buf */
1013 static void reg_r(struct gspca_dev *gspca_dev, u8 index)
1014 {
1015 struct usb_device *dev = gspca_dev->dev;
1016 int ret;
1017
1018 if (gspca_dev->usb_err < 0)
1019 return;
1020 ret = usb_control_msg(dev, usb_rcvctrlpipe(dev, 0),
1021 0x0d,
1022 USB_DIR_IN | USB_TYPE_VENDOR | USB_RECIP_DEVICE,
1023 0, index, gspca_dev->usb_buf, 1, 500);
1024 if (ret < 0) {
1025 pr_err("reg_r err %d\n", ret);
1026 gspca_dev->usb_err = ret;
1027 }
1028 }
1029
1030 static void reg_w_buf(struct gspca_dev *gspca_dev,
1031 const struct cmd *p, int l)
1032 {
1033 do {
1034 reg_w(gspca_dev, p->reg, p->val);
1035 p++;
1036 } while (--l > 0);
1037 }
1038
1039 static int i2c_w(struct gspca_dev *gspca_dev, u8 index, u8 value)
1040 {
1041 struct sd *sd = (struct sd *) gspca_dev;
1042
1043 reg_w(gspca_dev, TP6800_R11_SIF_CONTROL, 0x00);
1044 reg_w(gspca_dev, TP6800_R19_SIF_ADDR_S2, index);
1045 reg_w(gspca_dev, TP6800_R13_SIF_TX_DATA, value);
1046 reg_w(gspca_dev, TP6800_R11_SIF_CONTROL, 0x01);
1047 if (sd->bridge == BRIDGE_TP6800)
1048 return 0;
1049 msleep(5);
1050 reg_r(gspca_dev, TP6800_R11_SIF_CONTROL);
1051 if (gspca_dev->usb_buf[0] == 0)
1052 return 0;
1053 reg_w(gspca_dev, TP6800_R11_SIF_CONTROL, 0x00);
1054 return -1; /* error */
1055 }
1056
1057 static void i2c_w_buf(struct gspca_dev *gspca_dev,
1058 const struct cmd *p, int l)
1059 {
1060 do {
1061 i2c_w(gspca_dev, p->reg, p->val);
1062 p++;
1063 } while (--l > 0);
1064 }
1065
1066 static int i2c_r(struct gspca_dev *gspca_dev, u8 index, int len)
1067 {
1068 struct sd *sd = (struct sd *) gspca_dev;
1069 int v;
1070
1071 reg_w(gspca_dev, TP6800_R19_SIF_ADDR_S2, index);
1072 reg_w(gspca_dev, TP6800_R11_SIF_CONTROL, 0x02);
1073 msleep(5);
1074 reg_r(gspca_dev, TP6800_R14_SIF_RX_DATA);
1075 v = gspca_dev->usb_buf[0];
1076 if (sd->bridge == BRIDGE_TP6800)
1077 return v;
1078 if (len > 1) {
1079 reg_r(gspca_dev, TP6800_R1B_SIF_RX_DATA2);
1080 v |= (gspca_dev->usb_buf[0] << 8);
1081 }
1082 reg_r(gspca_dev, TP6800_R11_SIF_CONTROL);
1083 if (gspca_dev->usb_buf[0] == 0)
1084 return v;
1085 reg_w(gspca_dev, TP6800_R11_SIF_CONTROL, 0x00);
1086 return -1;
1087 }
1088
1089 static void bulk_w(struct gspca_dev *gspca_dev,
1090 u8 tag,
1091 const u8 *data,
1092 int length)
1093 {
1094 struct usb_device *dev = gspca_dev->dev;
1095 int count, actual_count, ret;
1096
1097 if (gspca_dev->usb_err < 0)
1098 return;
1099 for (;;) {
1100 count = length > BULK_OUT_SIZE - 1
1101 ? BULK_OUT_SIZE - 1 : length;
1102 gspca_dev->usb_buf[0] = tag;
1103 memcpy(&gspca_dev->usb_buf[1], data, count);
1104 ret = usb_bulk_msg(dev,
1105 usb_sndbulkpipe(dev, 3),
1106 gspca_dev->usb_buf, count + 1,
1107 &actual_count, 500);
1108 if (ret < 0) {
1109 pr_err("bulk write error %d tag=%02x\n",
1110 ret, tag);
1111 gspca_dev->usb_err = ret;
1112 return;
1113 }
1114 length -= count;
1115 if (length <= 0)
1116 break;
1117 data += count;
1118 }
1119 }
1120
1121 static int probe_6810(struct gspca_dev *gspca_dev)
1122 {
1123 u8 gpio;
1124 int ret;
1125
1126 reg_r(gspca_dev, TP6800_R18_GPIO_DATA);
1127 gpio = gspca_dev->usb_buf[0];
1128 reg_w(gspca_dev, TP6800_R18_GPIO_DATA, gpio);
1129 reg_w(gspca_dev, TP6800_R18_GPIO_DATA, gpio | 0x20);
1130 reg_w(gspca_dev, TP6800_R18_GPIO_DATA, gpio);
1131 reg_w(gspca_dev, TP6800_R10_SIF_TYPE, 0x04); /* i2c 16 bits */
1132 reg_w(gspca_dev, TP6800_R12_SIF_ADDR_S, 0x21); /* ov??? */
1133 reg_w(gspca_dev, TP6800_R1A_SIF_TX_DATA2, 0x00);
1134 if (i2c_w(gspca_dev, 0x00, 0x00) >= 0)
1135 return SENSOR_SOI763A;
1136
1137 reg_w(gspca_dev, TP6800_R18_GPIO_DATA, gpio | 0x20);
1138 reg_w(gspca_dev, TP6800_R10_SIF_TYPE, 0x00); /* i2c 8 bits */
1139 reg_w(gspca_dev, TP6800_R12_SIF_ADDR_S, 0x7f); /* (unknown i2c) */
1140 if (i2c_w(gspca_dev, 0x00, 0x00) >= 0)
1141 return -2;
1142
1143 reg_w(gspca_dev, TP6800_R18_GPIO_DATA, gpio | 0x20);
1144 reg_w(gspca_dev, TP6800_R18_GPIO_DATA, gpio);
1145 reg_w(gspca_dev, TP6800_R18_GPIO_DATA, gpio | 0x20);
1146 reg_w(gspca_dev, TP6800_R10_SIF_TYPE, 0x00); /* i2c 8 bits */
1147 reg_w(gspca_dev, TP6800_R12_SIF_ADDR_S, 0x11); /* tas??? / hv??? */
1148 ret = i2c_r(gspca_dev, 0x00, 1);
1149 if (ret > 0)
1150 return -3;
1151
1152 reg_w(gspca_dev, TP6800_R18_GPIO_DATA, gpio | 0x20);
1153 reg_w(gspca_dev, TP6800_R18_GPIO_DATA, gpio);
1154 reg_w(gspca_dev, TP6800_R18_GPIO_DATA, gpio | 0x20);
1155 reg_w(gspca_dev, TP6800_R12_SIF_ADDR_S, 0x6e); /* po??? */
1156 ret = i2c_r(gspca_dev, 0x00, 1);
1157 if (ret > 0)
1158 return -4;
1159
1160 ret = i2c_r(gspca_dev, 0x01, 1);
1161 if (ret > 0)
1162 return -5;
1163
1164 reg_w(gspca_dev, TP6800_R18_GPIO_DATA, gpio | 0x20);
1165 reg_w(gspca_dev, TP6800_R18_GPIO_DATA, gpio);
1166 reg_w(gspca_dev, TP6800_R18_GPIO_DATA, gpio | 0x20);
1167 reg_w(gspca_dev, TP6800_R10_SIF_TYPE, 0x04); /* i2c 16 bits */
1168 reg_w(gspca_dev, TP6800_R12_SIF_ADDR_S, 0x5d); /* mi/mt??? */
1169 ret = i2c_r(gspca_dev, 0x00, 2);
1170 if (ret > 0)
1171 return -6;
1172
1173 reg_w(gspca_dev, TP6800_R18_GPIO_DATA, gpio | 0x20);
1174 reg_w(gspca_dev, TP6800_R18_GPIO_DATA, gpio);
1175 reg_w(gspca_dev, TP6800_R18_GPIO_DATA, gpio | 0x20);
1176 reg_w(gspca_dev, TP6800_R12_SIF_ADDR_S, 0x5c); /* mi/mt??? */
1177 ret = i2c_r(gspca_dev, 0x36, 2);
1178 if (ret > 0)
1179 return -7;
1180
1181 reg_w(gspca_dev, TP6800_R18_GPIO_DATA, gpio);
1182 reg_w(gspca_dev, TP6800_R18_GPIO_DATA, gpio | 0x20);
1183 reg_w(gspca_dev, TP6800_R18_GPIO_DATA, gpio);
1184 reg_w(gspca_dev, TP6800_R12_SIF_ADDR_S, 0x61); /* (unknown i2c) */
1185 reg_w(gspca_dev, TP6800_R1A_SIF_TX_DATA2, 0x10);
1186 if (i2c_w(gspca_dev, 0xff, 0x00) >= 0)
1187 return -8;
1188
1189 reg_w(gspca_dev, TP6800_R18_GPIO_DATA, gpio | 0x20);
1190 reg_w(gspca_dev, TP6800_R18_GPIO_DATA, gpio);
1191 reg_w(gspca_dev, TP6800_R18_GPIO_DATA, gpio | 0x20);
1192 reg_w(gspca_dev, TP6800_R10_SIF_TYPE, 0x00); /* i2c 8 bits */
1193 reg_w(gspca_dev, TP6800_R12_SIF_ADDR_S, 0x20); /* cx0342 */
1194 ret = i2c_r(gspca_dev, 0x00, 1);
1195 if (ret > 0)
1196 return SENSOR_CX0342;
1197 return -9;
1198 }
1199
1200 static void cx0342_6810_init(struct gspca_dev *gspca_dev)
1201 {
1202 static const struct cmd reg_init_1[] = {
1203 {TP6800_R2F_TIMING_CFG, 0x2f},
1204 {0x25, 0x02},
1205 {TP6800_R21_ENDP_1_CTL, 0x00},
1206 {TP6800_R3F_FRAME_RATE, 0x80},
1207 {TP6800_R2F_TIMING_CFG, 0x2f},
1208 {TP6800_R18_GPIO_DATA, 0xe1},
1209 {TP6800_R18_GPIO_DATA, 0xc1},
1210 {TP6800_R18_GPIO_DATA, 0xe1},
1211 {TP6800_R11_SIF_CONTROL, 0x00},
1212 };
1213 static const struct cmd reg_init_2[] = {
1214 {TP6800_R78_FORMAT, 0x48},
1215 {TP6800_R11_SIF_CONTROL, 0x00},
1216 };
1217 static const struct cmd sensor_init[] = {
1218 {CX0342_OUTPUT_CTRL, 0x07},
1219 {CX0342_BYPASS_MODE, 0x58},
1220 {CX0342_GPXLTHD_L, 0x28},
1221 {CX0342_RBPXLTHD_L, 0x28},
1222 {CX0342_PLANETHD_L, 0x50},
1223 {CX0342_PLANETHD_H, 0x03},
1224 {CX0342_RB_GAP_L, 0xff},
1225 {CX0342_RB_GAP_H, 0x07},
1226 {CX0342_G_GAP_L, 0xff},
1227 {CX0342_G_GAP_H, 0x07},
1228 {CX0342_RST_OVERFLOW_L, 0x5c},
1229 {CX0342_RST_OVERFLOW_H, 0x01},
1230 {CX0342_DATA_OVERFLOW_L, 0xfc},
1231 {CX0342_DATA_OVERFLOW_H, 0x03},
1232 {CX0342_DATA_UNDERFLOW_L, 0x00},
1233 {CX0342_DATA_UNDERFLOW_H, 0x00},
1234 {CX0342_SYS_CTRL_0, 0x40},
1235 {CX0342_GLOBAL_GAIN, 0x01},
1236 {CX0342_CLOCK_GEN, 0x00},
1237 {CX0342_SYS_CTRL_0, 0x02},
1238 {CX0342_IDLE_CTRL, 0x05},
1239 {CX0342_ADCGN, 0x00},
1240 {CX0342_ADC_CTL, 0x00},
1241 {CX0342_LVRST_BLBIAS, 0x01},
1242 {CX0342_VTHSEL, 0x0b},
1243 {CX0342_RAMP_RIV, 0x0b},
1244 {CX0342_LDOSEL, 0x07},
1245 {CX0342_SPV_VALUE_L, 0x40},
1246 {CX0342_SPV_VALUE_H, 0x02},
1247
1248 {CX0342_AUTO_ADC_CALIB, 0x81},
1249 {CX0342_TIMING_EN, 0x01},
1250 };
1251
1252 reg_w_buf(gspca_dev, reg_init_1, ARRAY_SIZE(reg_init_1));
1253 reg_w_buf(gspca_dev, tp6810_cx_init_common,
1254 ARRAY_SIZE(tp6810_cx_init_common));
1255 reg_w_buf(gspca_dev, reg_init_2, ARRAY_SIZE(reg_init_2));
1256
1257 reg_w(gspca_dev, TP6800_R12_SIF_ADDR_S, 0x20); /* cx0342 I2C addr */
1258 i2c_w_buf(gspca_dev, sensor_init, ARRAY_SIZE(sensor_init));
1259 i2c_w_buf(gspca_dev, cx0342_timing_seq, ARRAY_SIZE(cx0342_timing_seq));
1260 }
1261
1262 static void soi763a_6810_init(struct gspca_dev *gspca_dev)
1263 {
1264 static const struct cmd reg_init_1[] = {
1265 {TP6800_R2F_TIMING_CFG, 0x2f},
1266 {TP6800_R18_GPIO_DATA, 0xe1},
1267 {0x25, 0x02},
1268 {TP6800_R21_ENDP_1_CTL, 0x00},
1269 {TP6800_R3F_FRAME_RATE, 0x80},
1270 {TP6800_R2F_TIMING_CFG, 0x2f},
1271 {TP6800_R18_GPIO_DATA, 0xc1},
1272 };
1273 static const struct cmd reg_init_2[] = {
1274 {TP6800_R78_FORMAT, 0x54},
1275 };
1276 static const struct cmd sensor_init[] = {
1277 {0x00, 0x00},
1278 {0x01, 0x80},
1279 {0x02, 0x80},
1280 {0x03, 0x90},
1281 {0x04, 0x20},
1282 {0x05, 0x20},
1283 {0x06, 0x80},
1284 {0x07, 0x00},
1285 {0x08, 0xff},
1286 {0x09, 0xff},
1287 {0x0a, 0x76}, /* 7630 = soi673a */
1288 {0x0b, 0x30},
1289 {0x0c, 0x20},
1290 {0x0d, 0x20},
1291 {0x0e, 0xff},
1292 {0x0f, 0xff},
1293 {0x10, 0x41},
1294 {0x15, 0x14},
1295 {0x11, 0x40},
1296 {0x12, 0x48},
1297 {0x13, 0x80},
1298 {0x14, 0x80},
1299 {0x16, 0x03},
1300 {0x28, 0xb0},
1301 {0x71, 0x20},
1302 {0x75, 0x8e},
1303 {0x17, 0x1b},
1304 {0x18, 0xbd},
1305 {0x19, 0x05},
1306 {0x1a, 0xf6},
1307 {0x1b, 0x04},
1308 {0x1c, 0x7f}, /* omnivision */
1309 {0x1d, 0xa2},
1310 {0x1e, 0x00},
1311 {0x1f, 0x00},
1312 {0x20, 0x45},
1313 {0x21, 0x80},
1314 {0x22, 0x80},
1315 {0x23, 0xee},
1316 {0x24, 0x50},
1317 {0x25, 0x7a},
1318 {0x26, 0xa0},
1319 {0x27, 0x9a},
1320 {0x29, 0x30},
1321 {0x2a, 0x80},
1322 {0x2b, 0x00},
1323 {0x2c, 0xac},
1324 {0x2d, 0x05},
1325 {0x2e, 0x80},
1326 {0x2f, 0x3c},
1327 {0x30, 0x22},
1328 {0x31, 0x00},
1329 {0x32, 0x86},
1330 {0x33, 0x08},
1331 {0x34, 0xff},
1332 {0x35, 0xff},
1333 {0x36, 0xff},
1334 {0x37, 0xff},
1335 {0x38, 0xff},
1336 {0x39, 0xff},
1337 {0x3a, 0xfe},
1338 {0x3b, 0xfe},
1339 {0x3c, 0xfe},
1340 {0x3d, 0xfe},
1341 {0x3e, 0xfe},
1342 {0x3f, 0x71},
1343 {0x40, 0xff},
1344 {0x41, 0xff},
1345 {0x42, 0xff},
1346 {0x43, 0xff},
1347 {0x44, 0xff},
1348 {0x45, 0xff},
1349 {0x46, 0xff},
1350 {0x47, 0xff},
1351 {0x48, 0xff},
1352 {0x49, 0xff},
1353 {0x4a, 0xfe},
1354 {0x4b, 0xff},
1355 {0x4c, 0x00},
1356 {0x4d, 0x00},
1357 {0x4e, 0xff},
1358 {0x4f, 0xff},
1359 {0x50, 0xff},
1360 {0x51, 0xff},
1361 {0x52, 0xff},
1362 {0x53, 0xff},
1363 {0x54, 0xff},
1364 {0x55, 0xff},
1365 {0x56, 0xff},
1366 {0x57, 0xff},
1367 {0x58, 0xff},
1368 {0x59, 0xff},
1369 {0x5a, 0xff},
1370 {0x5b, 0xfe},
1371 {0x5c, 0xff},
1372 {0x5d, 0x8f},
1373 {0x5e, 0xff},
1374 {0x5f, 0x8f},
1375 {0x60, 0xa2},
1376 {0x61, 0x4a},
1377 {0x62, 0xf3},
1378 {0x63, 0x75},
1379 {0x64, 0xf0},
1380 {0x65, 0x00},
1381 {0x66, 0x55},
1382 {0x67, 0x92},
1383 {0x68, 0xa0},
1384 {0x69, 0x4a},
1385 {0x6a, 0x22},
1386 {0x6b, 0x00},
1387 {0x6c, 0x33},
1388 {0x6d, 0x44},
1389 {0x6e, 0x22},
1390 {0x6f, 0x84},
1391 {0x70, 0x0b},
1392 {0x72, 0x10},
1393 {0x73, 0x50},
1394 {0x74, 0x21},
1395 {0x76, 0x00},
1396 {0x77, 0xa5},
1397 {0x78, 0x80},
1398 {0x79, 0x80},
1399 {0x7a, 0x80},
1400 {0x7b, 0xe2},
1401 {0x7c, 0x00},
1402 {0x7d, 0xf7},
1403 {0x7e, 0x00},
1404 {0x7f, 0x00},
1405 };
1406
1407 reg_w_buf(gspca_dev, reg_init_1, ARRAY_SIZE(reg_init_1));
1408 reg_w_buf(gspca_dev, tp6810_ov_init_common,
1409 ARRAY_SIZE(tp6810_ov_init_common));
1410 reg_w_buf(gspca_dev, reg_init_2, ARRAY_SIZE(reg_init_2));
1411
1412 i2c_w(gspca_dev, 0x12, 0x80); /* sensor reset */
1413 msleep(10);
1414 i2c_w_buf(gspca_dev, sensor_init, ARRAY_SIZE(sensor_init));
1415 }
1416
1417 /* set the gain and exposure */
1418 static void setexposure(struct gspca_dev *gspca_dev)
1419 {
1420 struct sd *sd = (struct sd *) gspca_dev;
1421
1422 if (sd->sensor == SENSOR_CX0342) {
1423 int expo;
1424
1425 expo = (sd->ctrls[EXPOSURE].val << 2) - 1;
1426 i2c_w(gspca_dev, CX0342_EXPO_LINE_L, expo);
1427 i2c_w(gspca_dev, CX0342_EXPO_LINE_H, expo >> 8);
1428 if (sd->bridge == BRIDGE_TP6800)
1429 i2c_w(gspca_dev, CX0342_RAW_GBGAIN_H,
1430 sd->ctrls[GAIN].val >> 8);
1431 i2c_w(gspca_dev, CX0342_RAW_GBGAIN_L, sd->ctrls[GAIN].val);
1432 if (sd->bridge == BRIDGE_TP6800)
1433 i2c_w(gspca_dev, CX0342_RAW_GRGAIN_H,
1434 sd->ctrls[GAIN].val >> 8);
1435 i2c_w(gspca_dev, CX0342_RAW_GRGAIN_L, sd->ctrls[GAIN].val);
1436 if (sd->bridge == BRIDGE_TP6800)
1437 i2c_w(gspca_dev, CX0342_RAW_BGAIN_H,
1438 sd->ctrls[BGAIN].val >> 8);
1439 i2c_w(gspca_dev, CX0342_RAW_BGAIN_L, sd->ctrls[BGAIN].val);
1440 if (sd->bridge == BRIDGE_TP6800)
1441 i2c_w(gspca_dev, CX0342_RAW_RGAIN_H,
1442 sd->ctrls[RGAIN].val >> 8);
1443 i2c_w(gspca_dev, CX0342_RAW_RGAIN_L, sd->ctrls[RGAIN].val);
1444 i2c_w(gspca_dev, CX0342_SYS_CTRL_0,
1445 sd->bridge == BRIDGE_TP6800 ? 0x80 : 0x81);
1446 return;
1447 }
1448
1449 /* soi763a */
1450 i2c_w(gspca_dev, 0x10, /* AEC_H (exposure time) */
1451 sd->ctrls[EXPOSURE].val);
1452 /* i2c_w(gspca_dev, 0x76, 0x02); * AEC_L ([1:0] */
1453 i2c_w(gspca_dev, 0x00, /* gain */
1454 sd->ctrls[GAIN].val);
1455 }
1456
1457 /* set the JPEG quantization tables */
1458 static void set_dqt(struct gspca_dev *gspca_dev, u8 q)
1459 {
1460 struct sd *sd = (struct sd *) gspca_dev;
1461
1462 /* update the jpeg quantization tables */
1463 PDEBUG(D_STREAM, "q %d -> %d", sd->quality, q);
1464 sd->quality = q;
1465 if (q > 16)
1466 q = 16;
1467 if (sd->sensor == SENSOR_SOI763A)
1468 jpeg_set_qual(sd->jpeg_hdr, jpeg_q[q]);
1469 else
1470 memcpy(&sd->jpeg_hdr[JPEG_QT0_OFFSET - 1],
1471 DQT[q], sizeof DQT[0]);
1472 }
1473
1474 /* set the JPEG compression quality factor */
1475 static void setquality(struct gspca_dev *gspca_dev)
1476 {
1477 struct sd *sd = (struct sd *) gspca_dev;
1478 u16 q;
1479
1480 q = sd->ctrls[QUALITY].val;
1481 if (q != 16)
1482 q = 15 - q;
1483
1484 reg_w(gspca_dev, TP6800_R7A_BLK_THRLD, 0x00);
1485 reg_w(gspca_dev, TP6800_R79_QUALITY, 0x04);
1486 reg_w(gspca_dev, TP6800_R79_QUALITY, q);
1487
1488 /* auto quality */
1489 if (q == 15 && sd->bridge == BRIDGE_TP6810) {
1490 msleep(4);
1491 reg_w(gspca_dev, TP6800_R7A_BLK_THRLD, 0x19);
1492 }
1493 }
1494
1495 static const u8 color_null[18] = {
1496 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1497 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1498 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
1499 };
1500 static const u8 color_gain[NSENSORS][18] = {
1501 [SENSOR_CX0342] =
1502 {0x4c, 0x00, 0xa9, 0x00, 0x31, 0x00, /* Y R/G/B (LE values) */
1503 0xb6, 0x03, 0x6c, 0x03, 0xe0, 0x00, /* U R/G/B */
1504 0xdf, 0x00, 0x46, 0x03, 0xdc, 0x03}, /* V R/G/B */
1505 [SENSOR_SOI763A] =
1506 {0x4c, 0x00, 0x95, 0x00, 0x1d, 0x00, /* Y R/G/B (LE values) */
1507 0xb6, 0x03, 0x6c, 0x03, 0xd7, 0x00, /* U R/G/B */
1508 0xd5, 0x00, 0x46, 0x03, 0xdc, 0x03}, /* V R/G/B */
1509 };
1510
1511 static void setgamma(struct gspca_dev *gspca_dev)
1512 {
1513 struct sd *sd = (struct sd *) gspca_dev;
1514 int gamma;
1515 #define NGAMMA 6
1516 static const u8 gamma_tb[NGAMMA][3][1024] = {
1517 { /* gamma 0 - from tp6800 + soi763a */
1518 {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1519 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1520 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1521 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00,
1522 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1523 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1524 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1525 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x02,
1526 0x02, 0x03, 0x05, 0x07, 0x07, 0x08, 0x09, 0x09,
1527 0x0a, 0x0c, 0x0c, 0x0d, 0x0e, 0x0e, 0x10, 0x11,
1528 0x11, 0x12, 0x14, 0x14, 0x15, 0x16, 0x16, 0x17,
1529 0x17, 0x18, 0x1a, 0x1a, 0x1b, 0x1b, 0x1c, 0x1e,
1530 0x1e, 0x1f, 0x1f, 0x20, 0x20, 0x22, 0x23, 0x23,
1531 0x25, 0x25, 0x26, 0x26, 0x27, 0x27, 0x28, 0x28,
1532 0x29, 0x29, 0x2b, 0x2c, 0x2c, 0x2d, 0x2d, 0x2f,
1533 0x2f, 0x30, 0x30, 0x31, 0x31, 0x33, 0x33, 0x34,
1534 0x34, 0x34, 0x35, 0x35, 0x37, 0x37, 0x38, 0x38,
1535 0x39, 0x39, 0x3a, 0x3a, 0x3b, 0x3b, 0x3b, 0x3c,
1536 0x3c, 0x3d, 0x3d, 0x3f, 0x3f, 0x40, 0x40, 0x40,
1537 0x42, 0x42, 0x43, 0x43, 0x44, 0x44, 0x44, 0x45,
1538 0x45, 0x47, 0x47, 0x47, 0x48, 0x48, 0x49, 0x49,
1539 0x4a, 0x4a, 0x4a, 0x4b, 0x4b, 0x4b, 0x4c, 0x4c,
1540 0x4d, 0x4d, 0x4d, 0x4f, 0x4f, 0x50, 0x50, 0x50,
1541 0x52, 0x52, 0x52, 0x53, 0x53, 0x54, 0x54, 0x54,
1542 0x55, 0x55, 0x55, 0x56, 0x56, 0x58, 0x58, 0x58,
1543 0x59, 0x59, 0x59, 0x5a, 0x5a, 0x5a, 0x5b, 0x5b,
1544 0x5b, 0x5c, 0x5c, 0x5c, 0x5e, 0x5e, 0x5e, 0x5f,
1545 0x5f, 0x5f, 0x60, 0x60, 0x60, 0x61, 0x61, 0x61,
1546 0x62, 0x62, 0x62, 0x63, 0x63, 0x63, 0x65, 0x65,
1547 0x65, 0x66, 0x66, 0x66, 0x67, 0x67, 0x67, 0x68,
1548 0x68, 0x68, 0x69, 0x69, 0x69, 0x69, 0x6a, 0x6a,
1549 0x6a, 0x6c, 0x6c, 0x6c, 0x6d, 0x6d, 0x6d, 0x6e,
1550 0x6e, 0x6e, 0x6e, 0x6f, 0x6f, 0x6f, 0x70, 0x70,
1551 0x70, 0x71, 0x71, 0x71, 0x71, 0x73, 0x73, 0x73,
1552 0x74, 0x74, 0x74, 0x74, 0x75, 0x75, 0x75, 0x77,
1553 0x77, 0x77, 0x77, 0x78, 0x78, 0x78, 0x79, 0x79,
1554 0x79, 0x79, 0x7a, 0x7a, 0x7a, 0x7a, 0x7b, 0x7b,
1555 0x7b, 0x7c, 0x7c, 0x7c, 0x7c, 0x7d, 0x7d, 0x7d,
1556 0x7d, 0x7f, 0x7f, 0x7f, 0x80, 0x80, 0x80, 0x80,
1557 0x81, 0x81, 0x81, 0x81, 0x82, 0x82, 0x82, 0x82,
1558 0x84, 0x84, 0x84, 0x85, 0x85, 0x85, 0x85, 0x86,
1559 0x86, 0x86, 0x86, 0x88, 0x88, 0x88, 0x88, 0x89,
1560 0x89, 0x89, 0x89, 0x8a, 0x8a, 0x8a, 0x8a, 0x8b,
1561 0x8b, 0x8b, 0x8b, 0x8d, 0x8d, 0x8d, 0x8d, 0x8e,
1562 0x8e, 0x8e, 0x8e, 0x8f, 0x8f, 0x8f, 0x8f, 0x90,
1563 0x90, 0x90, 0x90, 0x90, 0x91, 0x91, 0x91, 0x91,
1564 0x92, 0x92, 0x92, 0x92, 0x93, 0x93, 0x93, 0x93,
1565 0x94, 0x94, 0x94, 0x94, 0x96, 0x96, 0x96, 0x96,
1566 0x96, 0x97, 0x97, 0x97, 0x97, 0x98, 0x98, 0x98,
1567 0x98, 0x99, 0x99, 0x99, 0x99, 0x99, 0x9a, 0x9a,
1568 0x9a, 0x9a, 0x9b, 0x9b, 0x9b, 0x9b, 0x9c, 0x9c,
1569 0x9c, 0x9c, 0x9c, 0x9d, 0x9d, 0x9d, 0x9d, 0x9e,
1570 0x9e, 0x9e, 0x9e, 0x9e, 0xa0, 0xa0, 0xa0, 0xa0,
1571 0xa1, 0xa1, 0xa1, 0xa1, 0xa1, 0xa2, 0xa2, 0xa2,
1572 0xa2, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa4, 0xa4,
1573 0xa4, 0xa4, 0xa4, 0xa5, 0xa5, 0xa5, 0xa5, 0xa6,
1574 0xa6, 0xa6, 0xa6, 0xa6, 0xa8, 0xa8, 0xa8, 0xa8,
1575 0xa8, 0xa9, 0xa9, 0xa9, 0xa9, 0xab, 0xab, 0xab,
1576 0xab, 0xab, 0xac, 0xac, 0xac, 0xac, 0xac, 0xad,
1577 0xad, 0xad, 0xad, 0xae, 0xae, 0xae, 0xae, 0xae,
1578 0xaf, 0xaf, 0xaf, 0xaf, 0xaf, 0xb0, 0xb0, 0xb0,
1579 0xb0, 0xb0, 0xb1, 0xb1, 0xb1, 0xb1, 0xb1, 0xb2,
1580 0xb2, 0xb2, 0xb2, 0xb2, 0xb3, 0xb3, 0xb3, 0xb3,
1581 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb6, 0xb6, 0xb6,
1582 0xb6, 0xb6, 0xb7, 0xb7, 0xb7, 0xb7, 0xb7, 0xb8,
1583 0xb8, 0xb8, 0xb8, 0xb8, 0xb9, 0xb9, 0xb9, 0xb9,
1584 0xb9, 0xba, 0xba, 0xba, 0xba, 0xba, 0xbc, 0xbc,
1585 0xbc, 0xbc, 0xbc, 0xbd, 0xbd, 0xbd, 0xbd, 0xbd,
1586 0xbe, 0xbe, 0xbe, 0xbe, 0xbe, 0xbf, 0xbf, 0xbf,
1587 0xbf, 0xbf, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc2,
1588 0xc2, 0xc2, 0xc2, 0xc2, 0xc3, 0xc3, 0xc3, 0xc3,
1589 0xc3, 0xc4, 0xc4, 0xc4, 0xc4, 0xc4, 0xc5, 0xc5,
1590 0xc5, 0xc5, 0xc5, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6,
1591 0xc7, 0xc7, 0xc7, 0xc7, 0xc7, 0xc9, 0xc9, 0xc9,
1592 0xc9, 0xc9, 0xc9, 0xca, 0xca, 0xca, 0xca, 0xca,
1593 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcc, 0xcc, 0xcc,
1594 0xcc, 0xcc, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xce,
1595 0xce, 0xce, 0xce, 0xce, 0xcf, 0xcf, 0xcf, 0xcf,
1596 0xcf, 0xd0, 0xd0, 0xd0, 0xd0, 0xd0, 0xd1, 0xd1,
1597 0xd1, 0xd1, 0xd1, 0xd1, 0xd3, 0xd3, 0xd3, 0xd3,
1598 0xd3, 0xd4, 0xd4, 0xd4, 0xd4, 0xd4, 0xd6, 0xd6,
1599 0xd6, 0xd6, 0xd6, 0xd7, 0xd7, 0xd7, 0xd7, 0xd7,
1600 0xd8, 0xd8, 0xd8, 0xd8, 0xd8, 0xd9, 0xd9, 0xd9,
1601 0xd9, 0xd9, 0xda, 0xda, 0xda, 0xda, 0xda, 0xdb,
1602 0xdb, 0xdb, 0xdb, 0xdb, 0xdd, 0xdd, 0xdd, 0xdd,
1603 0xdd, 0xde, 0xde, 0xde, 0xde, 0xde, 0xde, 0xdf,
1604 0xdf, 0xdf, 0xdf, 0xdf, 0xe0, 0xe0, 0xe0, 0xe0,
1605 0xe0, 0xe1, 0xe1, 0xe1, 0xe1, 0xe1, 0xe2, 0xe2,
1606 0xe2, 0xe2, 0xe2, 0xe3, 0xe3, 0xe3, 0xe3, 0xe3,
1607 0xe4, 0xe4, 0xe4, 0xe4, 0xe4, 0xe5, 0xe5, 0xe5,
1608 0xe5, 0xe5, 0xe6, 0xe6, 0xe6, 0xe6, 0xe6, 0xe7,
1609 0xe7, 0xe7, 0xe7, 0xe7, 0xe8, 0xe8, 0xe8, 0xe8,
1610 0xe8, 0xe9, 0xe9, 0xe9, 0xe9, 0xeb, 0xeb, 0xeb,
1611 0xeb, 0xeb, 0xec, 0xec, 0xec, 0xec, 0xec, 0xed,
1612 0xed, 0xed, 0xed, 0xed, 0xee, 0xee, 0xee, 0xee,
1613 0xee, 0xef, 0xef, 0xef, 0xef, 0xef, 0xf0, 0xf0,
1614 0xf0, 0xf0, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf3,
1615 0xf3, 0xf3, 0xf3, 0xf3, 0xf4, 0xf4, 0xf4, 0xf4,
1616 0xf4, 0xf5, 0xf5, 0xf5, 0xf5, 0xf6, 0xf6, 0xf6,
1617 0xf6, 0xf6, 0xf7, 0xf7, 0xf7, 0xf7, 0xf8, 0xf8,
1618 0xf8, 0xf8, 0xf8, 0xf9, 0xf9, 0xf9, 0xf9, 0xfa,
1619 0xfa, 0xfa, 0xfa, 0xfa, 0xfa, 0xfa, 0xfa, 0xfa,
1620 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
1621 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
1622 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
1623 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
1624 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
1625 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
1626 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
1627 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
1628 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
1629 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
1630 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
1631 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
1632 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
1633 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
1634 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
1635 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
1636 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
1637 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
1638 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
1639 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
1640 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
1641 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
1642 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
1643 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
1644 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
1645 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb},
1646 {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1647 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1648 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1649 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00,
1650 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1651 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1652 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1653 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x02,
1654 0x02, 0x03, 0x05, 0x07, 0x07, 0x08, 0x09, 0x09,
1655 0x0a, 0x0c, 0x0c, 0x0d, 0x0e, 0x0e, 0x10, 0x11,
1656 0x11, 0x12, 0x14, 0x14, 0x15, 0x16, 0x16, 0x17,
1657 0x17, 0x18, 0x1a, 0x1a, 0x1b, 0x1b, 0x1c, 0x1e,
1658 0x1e, 0x1f, 0x1f, 0x20, 0x20, 0x22, 0x23, 0x23,
1659 0x25, 0x25, 0x26, 0x26, 0x27, 0x27, 0x28, 0x28,
1660 0x29, 0x29, 0x2b, 0x2c, 0x2c, 0x2d, 0x2d, 0x2f,
1661 0x2f, 0x30, 0x30, 0x31, 0x31, 0x33, 0x33, 0x34,
1662 0x34, 0x34, 0x35, 0x35, 0x37, 0x37, 0x38, 0x38,
1663 0x39, 0x39, 0x3a, 0x3a, 0x3b, 0x3b, 0x3b, 0x3c,
1664 0x3c, 0x3d, 0x3d, 0x3f, 0x3f, 0x40, 0x40, 0x40,
1665 0x42, 0x42, 0x43, 0x43, 0x44, 0x44, 0x44, 0x45,
1666 0x45, 0x47, 0x47, 0x47, 0x48, 0x48, 0x49, 0x49,
1667 0x4a, 0x4a, 0x4a, 0x4b, 0x4b, 0x4b, 0x4c, 0x4c,
1668 0x4d, 0x4d, 0x4d, 0x4f, 0x4f, 0x50, 0x50, 0x50,
1669 0x52, 0x52, 0x52, 0x53, 0x53, 0x54, 0x54, 0x54,
1670 0x55, 0x55, 0x55, 0x56, 0x56, 0x58, 0x58, 0x58,
1671 0x59, 0x59, 0x59, 0x5a, 0x5a, 0x5a, 0x5b, 0x5b,
1672 0x5b, 0x5c, 0x5c, 0x5c, 0x5e, 0x5e, 0x5e, 0x5f,
1673 0x5f, 0x5f, 0x60, 0x60, 0x60, 0x61, 0x61, 0x61,
1674 0x62, 0x62, 0x62, 0x63, 0x63, 0x63, 0x65, 0x65,
1675 0x65, 0x66, 0x66, 0x66, 0x67, 0x67, 0x67, 0x68,
1676 0x68, 0x68, 0x69, 0x69, 0x69, 0x69, 0x6a, 0x6a,
1677 0x6a, 0x6c, 0x6c, 0x6c, 0x6d, 0x6d, 0x6d, 0x6e,
1678 0x6e, 0x6e, 0x6e, 0x6f, 0x6f, 0x6f, 0x70, 0x70,
1679 0x70, 0x71, 0x71, 0x71, 0x71, 0x73, 0x73, 0x73,
1680 0x74, 0x74, 0x74, 0x74, 0x75, 0x75, 0x75, 0x77,
1681 0x77, 0x77, 0x77, 0x78, 0x78, 0x78, 0x79, 0x79,
1682 0x79, 0x79, 0x7a, 0x7a, 0x7a, 0x7a, 0x7b, 0x7b,
1683 0x7b, 0x7c, 0x7c, 0x7c, 0x7c, 0x7d, 0x7d, 0x7d,
1684 0x7d, 0x7f, 0x7f, 0x7f, 0x80, 0x80, 0x80, 0x80,
1685 0x81, 0x81, 0x81, 0x81, 0x82, 0x82, 0x82, 0x82,
1686 0x84, 0x84, 0x84, 0x85, 0x85, 0x85, 0x85, 0x86,
1687 0x86, 0x86, 0x86, 0x88, 0x88, 0x88, 0x88, 0x89,
1688 0x89, 0x89, 0x89, 0x8a, 0x8a, 0x8a, 0x8a, 0x8b,
1689 0x8b, 0x8b, 0x8b, 0x8d, 0x8d, 0x8d, 0x8d, 0x8e,
1690 0x8e, 0x8e, 0x8e, 0x8f, 0x8f, 0x8f, 0x8f, 0x90,
1691 0x90, 0x90, 0x90, 0x90, 0x91, 0x91, 0x91, 0x91,
1692 0x92, 0x92, 0x92, 0x92, 0x93, 0x93, 0x93, 0x93,
1693 0x94, 0x94, 0x94, 0x94, 0x96, 0x96, 0x96, 0x96,
1694 0x96, 0x97, 0x97, 0x97, 0x97, 0x98, 0x98, 0x98,
1695 0x98, 0x99, 0x99, 0x99, 0x99, 0x99, 0x9a, 0x9a,
1696 0x9a, 0x9a, 0x9b, 0x9b, 0x9b, 0x9b, 0x9c, 0x9c,
1697 0x9c, 0x9c, 0x9c, 0x9d, 0x9d, 0x9d, 0x9d, 0x9e,
1698 0x9e, 0x9e, 0x9e, 0x9e, 0xa0, 0xa0, 0xa0, 0xa0,
1699 0xa1, 0xa1, 0xa1, 0xa1, 0xa1, 0xa2, 0xa2, 0xa2,
1700 0xa2, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa4, 0xa4,
1701 0xa4, 0xa4, 0xa4, 0xa5, 0xa5, 0xa5, 0xa5, 0xa6,
1702 0xa6, 0xa6, 0xa6, 0xa6, 0xa8, 0xa8, 0xa8, 0xa8,
1703 0xa8, 0xa9, 0xa9, 0xa9, 0xa9, 0xab, 0xab, 0xab,
1704 0xab, 0xab, 0xac, 0xac, 0xac, 0xac, 0xac, 0xad,
1705 0xad, 0xad, 0xad, 0xae, 0xae, 0xae, 0xae, 0xae,
1706 0xaf, 0xaf, 0xaf, 0xaf, 0xaf, 0xb0, 0xb0, 0xb0,
1707 0xb0, 0xb0, 0xb1, 0xb1, 0xb1, 0xb1, 0xb1, 0xb2,
1708 0xb2, 0xb2, 0xb2, 0xb2, 0xb3, 0xb3, 0xb3, 0xb3,
1709 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb6, 0xb6, 0xb6,
1710 0xb6, 0xb6, 0xb7, 0xb7, 0xb7, 0xb7, 0xb7, 0xb8,
1711 0xb8, 0xb8, 0xb8, 0xb8, 0xb9, 0xb9, 0xb9, 0xb9,
1712 0xb9, 0xba, 0xba, 0xba, 0xba, 0xba, 0xbc, 0xbc,
1713 0xbc, 0xbc, 0xbc, 0xbd, 0xbd, 0xbd, 0xbd, 0xbd,
1714 0xbe, 0xbe, 0xbe, 0xbe, 0xbe, 0xbf, 0xbf, 0xbf,
1715 0xbf, 0xbf, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc2,
1716 0xc2, 0xc2, 0xc2, 0xc2, 0xc3, 0xc3, 0xc3, 0xc3,
1717 0xc3, 0xc4, 0xc4, 0xc4, 0xc4, 0xc4, 0xc5, 0xc5,
1718 0xc5, 0xc5, 0xc5, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6,
1719 0xc7, 0xc7, 0xc7, 0xc7, 0xc7, 0xc9, 0xc9, 0xc9,
1720 0xc9, 0xc9, 0xc9, 0xca, 0xca, 0xca, 0xca, 0xca,
1721 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcc, 0xcc, 0xcc,
1722 0xcc, 0xcc, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xce,
1723 0xce, 0xce, 0xce, 0xce, 0xcf, 0xcf, 0xcf, 0xcf,
1724 0xcf, 0xd0, 0xd0, 0xd0, 0xd0, 0xd0, 0xd1, 0xd1,
1725 0xd1, 0xd1, 0xd1, 0xd1, 0xd3, 0xd3, 0xd3, 0xd3,
1726 0xd3, 0xd4, 0xd4, 0xd4, 0xd4, 0xd4, 0xd6, 0xd6,
1727 0xd6, 0xd6, 0xd6, 0xd7, 0xd7, 0xd7, 0xd7, 0xd7,
1728 0xd8, 0xd8, 0xd8, 0xd8, 0xd8, 0xd9, 0xd9, 0xd9,
1729 0xd9, 0xd9, 0xda, 0xda, 0xda, 0xda, 0xda, 0xdb,
1730 0xdb, 0xdb, 0xdb, 0xdb, 0xdd, 0xdd, 0xdd, 0xdd,
1731 0xdd, 0xde, 0xde, 0xde, 0xde, 0xde, 0xde, 0xdf,
1732 0xdf, 0xdf, 0xdf, 0xdf, 0xe0, 0xe0, 0xe0, 0xe0,
1733 0xe0, 0xe1, 0xe1, 0xe1, 0xe1, 0xe1, 0xe2, 0xe2,
1734 0xe2, 0xe2, 0xe2, 0xe3, 0xe3, 0xe3, 0xe3, 0xe3,
1735 0xe4, 0xe4, 0xe4, 0xe4, 0xe4, 0xe5, 0xe5, 0xe5,
1736 0xe5, 0xe5, 0xe6, 0xe6, 0xe6, 0xe6, 0xe6, 0xe7,
1737 0xe7, 0xe7, 0xe7, 0xe7, 0xe8, 0xe8, 0xe8, 0xe8,
1738 0xe8, 0xe9, 0xe9, 0xe9, 0xe9, 0xeb, 0xeb, 0xeb,
1739 0xeb, 0xeb, 0xec, 0xec, 0xec, 0xec, 0xec, 0xed,
1740 0xed, 0xed, 0xed, 0xed, 0xee, 0xee, 0xee, 0xee,
1741 0xee, 0xef, 0xef, 0xef, 0xef, 0xef, 0xf0, 0xf0,
1742 0xf0, 0xf0, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf3,
1743 0xf3, 0xf3, 0xf3, 0xf3, 0xf4, 0xf4, 0xf4, 0xf4,
1744 0xf4, 0xf5, 0xf5, 0xf5, 0xf5, 0xf6, 0xf6, 0xf6,
1745 0xf6, 0xf6, 0xf7, 0xf7, 0xf7, 0xf7, 0xf8, 0xf8,
1746 0xf8, 0xf8, 0xf8, 0xf9, 0xf9, 0xf9, 0xf9, 0xfa,
1747 0xfa, 0xfa, 0xfa, 0xfa, 0xfa, 0xfa, 0xfa, 0xfa,
1748 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
1749 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
1750 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
1751 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
1752 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
1753 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
1754 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
1755 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
1756 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
1757 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
1758 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
1759 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
1760 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
1761 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
1762 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
1763 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
1764 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
1765 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
1766 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
1767 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
1768 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
1769 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
1770 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
1771 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
1772 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
1773 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb},
1774 {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1775 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1776 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1777 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00,
1778 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1779 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1780 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1781 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x02,
1782 0x02, 0x03, 0x05, 0x07, 0x07, 0x08, 0x09, 0x09,
1783 0x0a, 0x0c, 0x0c, 0x0d, 0x0e, 0x0e, 0x10, 0x11,
1784 0x11, 0x12, 0x14, 0x14, 0x15, 0x16, 0x16, 0x17,
1785 0x17, 0x18, 0x1a, 0x1a, 0x1b, 0x1b, 0x1c, 0x1e,
1786 0x1e, 0x1f, 0x1f, 0x20, 0x20, 0x22, 0x23, 0x23,
1787 0x25, 0x25, 0x26, 0x26, 0x27, 0x27, 0x28, 0x28,
1788 0x29, 0x29, 0x2b, 0x2c, 0x2c, 0x2d, 0x2d, 0x2f,
1789 0x2f, 0x30, 0x30, 0x31, 0x31, 0x33, 0x33, 0x34,
1790 0x34, 0x34, 0x35, 0x35, 0x37, 0x37, 0x38, 0x38,
1791 0x39, 0x39, 0x3a, 0x3a, 0x3b, 0x3b, 0x3b, 0x3c,
1792 0x3c, 0x3d, 0x3d, 0x3f, 0x3f, 0x40, 0x40, 0x40,
1793 0x42, 0x42, 0x43, 0x43, 0x44, 0x44, 0x44, 0x45,
1794 0x45, 0x47, 0x47, 0x47, 0x48, 0x48, 0x49, 0x49,
1795 0x4a, 0x4a, 0x4a, 0x4b, 0x4b, 0x4b, 0x4c, 0x4c,
1796 0x4d, 0x4d, 0x4d, 0x4f, 0x4f, 0x50, 0x50, 0x50,
1797 0x52, 0x52, 0x52, 0x53, 0x53, 0x54, 0x54, 0x54,
1798 0x55, 0x55, 0x55, 0x56, 0x56, 0x58, 0x58, 0x58,
1799 0x59, 0x59, 0x59, 0x5a, 0x5a, 0x5a, 0x5b, 0x5b,
1800 0x5b, 0x5c, 0x5c, 0x5c, 0x5e, 0x5e, 0x5e, 0x5f,
1801 0x5f, 0x5f, 0x60, 0x60, 0x60, 0x61, 0x61, 0x61,
1802 0x62, 0x62, 0x62, 0x63, 0x63, 0x63, 0x65, 0x65,
1803 0x65, 0x66, 0x66, 0x66, 0x67, 0x67, 0x67, 0x68,
1804 0x68, 0x68, 0x69, 0x69, 0x69, 0x69, 0x6a, 0x6a,
1805 0x6a, 0x6c, 0x6c, 0x6c, 0x6d, 0x6d, 0x6d, 0x6e,
1806 0x6e, 0x6e, 0x6e, 0x6f, 0x6f, 0x6f, 0x70, 0x70,
1807 0x70, 0x71, 0x71, 0x71, 0x71, 0x73, 0x73, 0x73,
1808 0x74, 0x74, 0x74, 0x74, 0x75, 0x75, 0x75, 0x76,
1809 0x77, 0x77, 0x77, 0x78, 0x78, 0x78, 0x79, 0x79,
1810 0x79, 0x79, 0x7a, 0x7a, 0x7a, 0x7a, 0x7b, 0x7b,
1811 0x7b, 0x7c, 0x7c, 0x7c, 0x7c, 0x7d, 0x7d, 0x7d,
1812 0x7d, 0x7f, 0x7f, 0x7f, 0x80, 0x80, 0x80, 0x80,
1813 0x81, 0x81, 0x81, 0x81, 0x82, 0x82, 0x82, 0x82,
1814 0x84, 0x84, 0x84, 0x85, 0x85, 0x85, 0x85, 0x86,
1815 0x86, 0x86, 0x86, 0x88, 0x88, 0x88, 0x88, 0x89,
1816 0x89, 0x89, 0x89, 0x8a, 0x8a, 0x8a, 0x8a, 0x8b,
1817 0x8b, 0x8b, 0x8b, 0x8d, 0x8d, 0x8d, 0x8d, 0x8e,
1818 0x8e, 0x8e, 0x8e, 0x8f, 0x8f, 0x8f, 0x8f, 0x90,
1819 0x90, 0x90, 0x90, 0x90, 0x91, 0x91, 0x91, 0x91,
1820 0x92, 0x92, 0x92, 0x92, 0x93, 0x93, 0x93, 0x93,
1821 0x94, 0x94, 0x94, 0x94, 0x96, 0x96, 0x96, 0x96,
1822 0x96, 0x97, 0x97, 0x97, 0x97, 0x98, 0x98, 0x98,
1823 0x98, 0x99, 0x99, 0x99, 0x99, 0x99, 0x9a, 0x9a,
1824 0x9a, 0x9a, 0x9b, 0x9b, 0x9b, 0x9b, 0x9c, 0x9c,
1825 0x9c, 0x9c, 0x9c, 0x9d, 0x9d, 0x9d, 0x9d, 0x9e,
1826 0x9e, 0x9e, 0x9e, 0x9e, 0xa0, 0xa0, 0xa0, 0xa0,
1827 0xa1, 0xa1, 0xa1, 0xa1, 0xa1, 0xa2, 0xa2, 0xa2,
1828 0xa2, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa4, 0xa4,
1829 0xa4, 0xa4, 0xa4, 0xa5, 0xa5, 0xa5, 0xa5, 0xa6,
1830 0xa6, 0xa6, 0xa6, 0xa6, 0xa8, 0xa8, 0xa8, 0xa8,
1831 0xa8, 0xa9, 0xa9, 0xa9, 0xa9, 0xab, 0xab, 0xab,
1832 0xab, 0xab, 0xac, 0xac, 0xac, 0xac, 0xac, 0xad,
1833 0xad, 0xad, 0xad, 0xae, 0xae, 0xae, 0xae, 0xae,
1834 0xaf, 0xaf, 0xaf, 0xaf, 0xaf, 0xb0, 0xb0, 0xb0,
1835 0xb0, 0xb0, 0xb1, 0xb1, 0xb1, 0xb1, 0xb1, 0xb2,
1836 0xb2, 0xb2, 0xb2, 0xb2, 0xb3, 0xb3, 0xb3, 0xb3,
1837 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb6, 0xb6, 0xb6,
1838 0xb6, 0xb6, 0xb7, 0xb7, 0xb7, 0xb7, 0xb7, 0xb8,
1839 0xb8, 0xb8, 0xb8, 0xb8, 0xb9, 0xb9, 0xb9, 0xb9,
1840 0xb9, 0xba, 0xba, 0xba, 0xba, 0xba, 0xbc, 0xbc,
1841 0xbc, 0xbc, 0xbc, 0xbd, 0xbd, 0xbd, 0xbd, 0xbd,
1842 0xbe, 0xbe, 0xbe, 0xbe, 0xbe, 0xbf, 0xbf, 0xbf,
1843 0xbf, 0xbf, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc2,
1844 0xc2, 0xc2, 0xc2, 0xc2, 0xc3, 0xc3, 0xc3, 0xc3,
1845 0xc3, 0xc4, 0xc4, 0xc4, 0xc4, 0xc4, 0xc5, 0xc5,
1846 0xc5, 0xc5, 0xc5, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6,
1847 0xc7, 0xc7, 0xc7, 0xc7, 0xc7, 0xc9, 0xc9, 0xc9,
1848 0xc9, 0xc9, 0xc9, 0xca, 0xca, 0xca, 0xca, 0xca,
1849 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcc, 0xcc, 0xcc,
1850 0xcc, 0xcc, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xce,
1851 0xce, 0xce, 0xce, 0xce, 0xcf, 0xcf, 0xcf, 0xcf,
1852 0xcf, 0xd0, 0xd0, 0xd0, 0xd0, 0xd0, 0xd1, 0xd1,
1853 0xd1, 0xd1, 0xd1, 0xd1, 0xd3, 0xd3, 0xd3, 0xd3,
1854 0xd3, 0xd4, 0xd4, 0xd4, 0xd4, 0xd4, 0xd6, 0xd6,
1855 0xd6, 0xd6, 0xd6, 0xd7, 0xd7, 0xd7, 0xd7, 0xd7,
1856 0xd8, 0xd8, 0xd8, 0xd8, 0xd8, 0xd9, 0xd9, 0xd9,
1857 0xd9, 0xd9, 0xda, 0xda, 0xda, 0xda, 0xda, 0xdb,
1858 0xdb, 0xdb, 0xdb, 0xdb, 0xdd, 0xdd, 0xdd, 0xdd,
1859 0xdd, 0xde, 0xde, 0xde, 0xde, 0xde, 0xde, 0xdf,
1860 0xdf, 0xdf, 0xdf, 0xdf, 0xe0, 0xe0, 0xe0, 0xe0,
1861 0xe0, 0xe1, 0xe1, 0xe1, 0xe1, 0xe1, 0xe2, 0xe2,
1862 0xe2, 0xe2, 0xe2, 0xe3, 0xe3, 0xe3, 0xe3, 0xe3,
1863 0xe4, 0xe4, 0xe4, 0xe4, 0xe4, 0xe5, 0xe5, 0xe5,
1864 0xe5, 0xe5, 0xe6, 0xe6, 0xe6, 0xe6, 0xe6, 0xe7,
1865 0xe7, 0xe7, 0xe7, 0xe7, 0xe8, 0xe8, 0xe8, 0xe8,
1866 0xe8, 0xe9, 0xe9, 0xe9, 0xe9, 0xeb, 0xeb, 0xeb,
1867 0xeb, 0xeb, 0xec, 0xec, 0xec, 0xec, 0xec, 0xed,
1868 0xed, 0xed, 0xed, 0xed, 0xee, 0xee, 0xee, 0xee,
1869 0xee, 0xef, 0xef, 0xef, 0xef, 0xef, 0xf0, 0xf0,
1870 0xf0, 0xf0, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf3,
1871 0xf3, 0xf3, 0xf3, 0xf3, 0xf4, 0xf4, 0xf4, 0xf4,
1872 0xf4, 0xf5, 0xf5, 0xf5, 0xf5, 0xf6, 0xf6, 0xf6,
1873 0xf6, 0xf6, 0xf7, 0xf7, 0xf7, 0xf7, 0xf8, 0xf8,
1874 0xf8, 0xf8, 0xf8, 0xf9, 0xf9, 0xf9, 0xf9, 0xfa,
1875 0xfa, 0xfa, 0xfa, 0xfa, 0xfa, 0xfa, 0xfa, 0xfa,
1876 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
1877 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
1878 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
1879 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
1880 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
1881 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
1882 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
1883 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
1884 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
1885 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
1886 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
1887 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
1888 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
1889 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
1890 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
1891 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
1892 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
1893 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
1894 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
1895 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
1896 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
1897 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
1898 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
1899 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
1900 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
1901 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb}
1902 },
1903 { /* gamma 1 - from tp6810 + soi763a */
1904 {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1905 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1906 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1907 0x01, 0x02, 0x03, 0x05, 0x07, 0x08, 0x09, 0x0a,
1908 0x0c, 0x0d, 0x0e, 0x10, 0x11, 0x12, 0x14, 0x15,
1909 0x16, 0x17, 0x18, 0x1a, 0x1a, 0x1b, 0x1c, 0x1e,
1910 0x1f, 0x20, 0x22, 0x22, 0x23, 0x25, 0x26, 0x27,
1911 0x27, 0x28, 0x29, 0x2b, 0x2b, 0x2c, 0x2d, 0x2f,
1912 0x2f, 0x30, 0x31, 0x33, 0x33, 0x34, 0x35, 0x35,
1913 0x37, 0x38, 0x38, 0x39, 0x3a, 0x3a, 0x3b, 0x3c,
1914 0x3c, 0x3d, 0x3f, 0x3f, 0x40, 0x42, 0x42, 0x43,
1915 0x43, 0x44, 0x45, 0x45, 0x47, 0x47, 0x48, 0x49,
1916 0x49, 0x4a, 0x4a, 0x4b, 0x4b, 0x4c, 0x4d, 0x4d,
1917 0x4f, 0x4f, 0x50, 0x50, 0x52, 0x52, 0x53, 0x53,
1918 0x54, 0x54, 0x55, 0x56, 0x56, 0x58, 0x58, 0x59,
1919 0x59, 0x5a, 0x5a, 0x5b, 0x5b, 0x5c, 0x5c, 0x5e,
1920 0x5e, 0x5e, 0x5f, 0x5f, 0x60, 0x60, 0x61, 0x61,
1921 0x62, 0x62, 0x63, 0x63, 0x65, 0x65, 0x65, 0x66,
1922 0x66, 0x67, 0x67, 0x68, 0x68, 0x69, 0x69, 0x69,
1923 0x6a, 0x6a, 0x6c, 0x6c, 0x6d, 0x6d, 0x6d, 0x6e,
1924 0x6e, 0x6f, 0x6f, 0x6f, 0x70, 0x70, 0x71, 0x71,
1925 0x73, 0x73, 0x73, 0x74, 0x74, 0x74, 0x75, 0x75,
1926 0x77, 0x77, 0x77, 0x78, 0x78, 0x79, 0x79, 0x79,
1927 0x7a, 0x7a, 0x7a, 0x7b, 0x7b, 0x7c, 0x7c, 0x7c,
1928 0x7d, 0x7d, 0x7d, 0x7f, 0x7f, 0x80, 0x80, 0x80,
1929 0x81, 0x81, 0x81, 0x82, 0x82, 0x82, 0x84, 0x84,
1930 0x84, 0x85, 0x85, 0x85, 0x86, 0x86, 0x86, 0x88,
1931 0x88, 0x88, 0x89, 0x89, 0x89, 0x8a, 0x8a, 0x8a,
1932 0x8b, 0x8b, 0x8b, 0x8d, 0x8d, 0x8d, 0x8e, 0x8e,
1933 0x8e, 0x8f, 0x8f, 0x8f, 0x90, 0x90, 0x90, 0x91,
1934 0x91, 0x91, 0x92, 0x92, 0x92, 0x92, 0x93, 0x93,
1935 0x93, 0x94, 0x94, 0x94, 0x96, 0x96, 0x96, 0x97,
1936 0x97, 0x97, 0x97, 0x98, 0x98, 0x98, 0x99, 0x99,
1937 0x99, 0x9a, 0x9a, 0x9a, 0x9a, 0x9b, 0x9b, 0x9b,
1938 0x9c, 0x9c, 0x9c, 0x9c, 0x9d, 0x9d, 0x9d, 0x9e,
1939 0x9e, 0x9e, 0x9e, 0xa0, 0xa0, 0xa0, 0xa1, 0xa1,
1940 0xa1, 0xa1, 0xa2, 0xa2, 0xa2, 0xa2, 0xa3, 0xa3,
1941 0xa3, 0xa4, 0xa4, 0xa4, 0xa4, 0xa5, 0xa5, 0xa5,
1942 0xa5, 0xa6, 0xa6, 0xa6, 0xa8, 0xa8, 0xa8, 0xa8,
1943 0xa9, 0xa9, 0xa9, 0xa9, 0xab, 0xab, 0xab, 0xab,
1944 0xac, 0xac, 0xac, 0xad, 0xad, 0xad, 0xad, 0xae,
1945 0xae, 0xae, 0xae, 0xaf, 0xaf, 0xaf, 0xaf, 0xb0,
1946 0xb0, 0xb0, 0xb0, 0xb1, 0xb1, 0xb1, 0xb1, 0xb2,
1947 0xb2, 0xb2, 0xb2, 0xb3, 0xb3, 0xb3, 0xb3, 0xb4,
1948 0xb4, 0xb4, 0xb4, 0xb6, 0xb6, 0xb6, 0xb6, 0xb7,
1949 0xb7, 0xb7, 0xb7, 0xb7, 0xb8, 0xb8, 0xb8, 0xb8,
1950 0xb9, 0xb9, 0xb9, 0xb9, 0xba, 0xba, 0xba, 0xba,
1951 0xbc, 0xbc, 0xbc, 0xbc, 0xbd, 0xbd, 0xbd, 0xbd,
1952 0xbd, 0xbe, 0xbe, 0xbe, 0xbe, 0xbf, 0xbf, 0xbf,
1953 0xbf, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc2, 0xc2,
1954 0xc2, 0xc2, 0xc3, 0xc3, 0xc3, 0xc3, 0xc4, 0xc4,
1955 0xc4, 0xc4, 0xc4, 0xc5, 0xc5, 0xc5, 0xc5, 0xc6,
1956 0xc6, 0xc6, 0xc6, 0xc6, 0xc7, 0xc7, 0xc7, 0xc7,
1957 0xc9, 0xc9, 0xc9, 0xc9, 0xc9, 0xca, 0xca, 0xca,
1958 0xca, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcc, 0xcc,
1959 0xcc, 0xcc, 0xcc, 0xcd, 0xcd, 0xcd, 0xcd, 0xce,
1960 0xce, 0xce, 0xce, 0xce, 0xcf, 0xcf, 0xcf, 0xcf,
1961 0xcf, 0xd0, 0xd0, 0xd0, 0xd0, 0xd1, 0xd1, 0xd1,
1962 0xd1, 0xd1, 0xd3, 0xd3, 0xd3, 0xd3, 0xd3, 0xd4,
1963 0xd4, 0xd4, 0xd4, 0xd6, 0xd6, 0xd6, 0xd6, 0xd6,
1964 0xd7, 0xd7, 0xd7, 0xd7, 0xd7, 0xd8, 0xd8, 0xd8,
1965 0xd8, 0xd8, 0xd9, 0xd9, 0xd9, 0xd9, 0xd9, 0xda,
1966 0xda, 0xda, 0xda, 0xda, 0xdb, 0xdb, 0xdb, 0xdb,
1967 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xde, 0xde, 0xde,
1968 0xde, 0xde, 0xdf, 0xdf, 0xdf, 0xdf, 0xdf, 0xe0,
1969 0xe0, 0xe0, 0xe0, 0xe0, 0xe1, 0xe1, 0xe1, 0xe1,
1970 0xe1, 0xe2, 0xe2, 0xe2, 0xe2, 0xe2, 0xe3, 0xe3,
1971 0xe3, 0xe3, 0xe3, 0xe4, 0xe4, 0xe4, 0xe4, 0xe4,
1972 0xe5, 0xe5, 0xe5, 0xe5, 0xe5, 0xe6, 0xe6, 0xe6,
1973 0xe6, 0xe6, 0xe7, 0xe7, 0xe7, 0xe7, 0xe7, 0xe8,
1974 0xe8, 0xe8, 0xe8, 0xe8, 0xe9, 0xe9, 0xe9, 0xe9,
1975 0xe9, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0xec, 0xec,
1976 0xec, 0xec, 0xec, 0xed, 0xed, 0xed, 0xed, 0xed,
1977 0xee, 0xee, 0xee, 0xee, 0xee, 0xef, 0xef, 0xef,
1978 0xef, 0xef, 0xef, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0,
1979 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf3, 0xf3, 0xf3,
1980 0xf3, 0xf3, 0xf4, 0xf4, 0xf4, 0xf4, 0xf4, 0xf5,
1981 0xf5, 0xf5, 0xf5, 0xf5, 0xf6, 0xf6, 0xf6, 0xf6,
1982 0xf6, 0xf7, 0xf7, 0xf7, 0xf7, 0xf7, 0xf8, 0xf8,
1983 0xf8, 0xf8, 0xf8, 0xf8, 0xf9, 0xf9, 0xf9, 0xf9,
1984 0xf9, 0xfa, 0xfa, 0xfa, 0xfa, 0xfa, 0xfa, 0xfa,
1985 0xfa, 0xfa, 0xfa, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
1986 0xfc, 0xfc, 0xfc, 0xfc, 0xfc, 0xfc, 0xfc, 0xfc,
1987 0xfc, 0xfc, 0xfd, 0xfd, 0xfd, 0xfd, 0xfd, 0xfe,
1988 0xfe, 0xfe, 0xfe, 0xfe, 0xff, 0xff, 0xff, 0xff,
1989 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
1990 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
1991 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
1992 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
1993 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
1994 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
1995 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
1996 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
1997 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
1998 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
1999 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2000 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2001 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2002 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2003 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2004 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2005 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2006 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2007 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2008 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2009 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2010 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2011 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2012 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2013 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2014 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2015 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2016 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2017 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2018 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2019 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2020 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2021 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2022 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2023 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2024 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2025 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2026 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2027 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2028 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2029 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2030 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2031 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff},
2032 {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
2033 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
2034 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
2035 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x03,
2036 0x05, 0x07, 0x07, 0x08, 0x09, 0x0a, 0x0c, 0x0d,
2037 0x0e, 0x10, 0x10, 0x11, 0x12, 0x14, 0x15, 0x15,
2038 0x16, 0x17, 0x18, 0x1a, 0x1a, 0x1b, 0x1c, 0x1e,
2039 0x1e, 0x1f, 0x20, 0x20, 0x22, 0x23, 0x25, 0x25,
2040 0x26, 0x27, 0x27, 0x28, 0x29, 0x29, 0x2b, 0x2c,
2041 0x2c, 0x2d, 0x2d, 0x2f, 0x30, 0x30, 0x31, 0x31,
2042 0x33, 0x34, 0x34, 0x35, 0x35, 0x37, 0x38, 0x38,
2043 0x39, 0x39, 0x3a, 0x3a, 0x3b, 0x3b, 0x3c, 0x3d,
2044 0x3d, 0x3f, 0x3f, 0x40, 0x40, 0x42, 0x42, 0x43,
2045 0x43, 0x44, 0x44, 0x45, 0x45, 0x47, 0x47, 0x48,
2046 0x48, 0x49, 0x49, 0x4a, 0x4a, 0x4b, 0x4b, 0x4c,
2047 0x4c, 0x4d, 0x4d, 0x4d, 0x4f, 0x4f, 0x50, 0x50,
2048 0x52, 0x52, 0x53, 0x53, 0x53, 0x54, 0x54, 0x55,
2049 0x55, 0x56, 0x56, 0x56, 0x58, 0x58, 0x59, 0x59,
2050 0x5a, 0x5a, 0x5a, 0x5b, 0x5b, 0x5c, 0x5c, 0x5c,
2051 0x5e, 0x5e, 0x5f, 0x5f, 0x5f, 0x60, 0x60, 0x60,
2052 0x61, 0x61, 0x62, 0x62, 0x62, 0x63, 0x63, 0x65,
2053 0x65, 0x65, 0x66, 0x66, 0x66, 0x67, 0x67, 0x67,
2054 0x68, 0x68, 0x69, 0x69, 0x69, 0x6a, 0x6a, 0x6a,
2055 0x6c, 0x6c, 0x6c, 0x6d, 0x6d, 0x6d, 0x6e, 0x6e,
2056 0x6e, 0x6f, 0x6f, 0x6f, 0x70, 0x70, 0x70, 0x71,
2057 0x71, 0x71, 0x73, 0x73, 0x73, 0x74, 0x74, 0x74,
2058 0x75, 0x75, 0x75, 0x77, 0x77, 0x77, 0x78, 0x78,
2059 0x78, 0x79, 0x79, 0x79, 0x79, 0x7a, 0x7a, 0x7a,
2060 0x7b, 0x7b, 0x7b, 0x7c, 0x7c, 0x7c, 0x7c, 0x7d,
2061 0x7d, 0x7d, 0x7f, 0x7f, 0x7f, 0x80, 0x80, 0x80,
2062 0x80, 0x81, 0x81, 0x81, 0x82, 0x82, 0x82, 0x82,
2063 0x84, 0x84, 0x84, 0x85, 0x85, 0x85, 0x85, 0x86,
2064 0x86, 0x86, 0x88, 0x88, 0x88, 0x88, 0x89, 0x89,
2065 0x89, 0x89, 0x8a, 0x8a, 0x8a, 0x8b, 0x8b, 0x8b,
2066 0x8b, 0x8d, 0x8d, 0x8d, 0x8d, 0x8e, 0x8e, 0x8e,
2067 0x8e, 0x8f, 0x8f, 0x8f, 0x90, 0x90, 0x90, 0x90,
2068 0x91, 0x91, 0x91, 0x91, 0x92, 0x92, 0x92, 0x92,
2069 0x93, 0x93, 0x93, 0x93, 0x94, 0x94, 0x94, 0x94,
2070 0x96, 0x96, 0x96, 0x96, 0x97, 0x97, 0x97, 0x97,
2071 0x98, 0x98, 0x98, 0x98, 0x99, 0x99, 0x99, 0x99,
2072 0x9a, 0x9a, 0x9a, 0x9a, 0x9a, 0x9b, 0x9b, 0x9b,
2073 0x9b, 0x9c, 0x9c, 0x9c, 0x9c, 0x9d, 0x9d, 0x9d,
2074 0x9d, 0x9e, 0x9e, 0x9e, 0x9e, 0x9e, 0xa0, 0xa0,
2075 0xa0, 0xa0, 0xa1, 0xa1, 0xa1, 0xa1, 0xa2, 0xa2,
2076 0xa2, 0xa2, 0xa2, 0xa3, 0xa3, 0xa3, 0xa3, 0xa4,
2077 0xa4, 0xa4, 0xa4, 0xa4, 0xa5, 0xa5, 0xa5, 0xa5,
2078 0xa6, 0xa6, 0xa6, 0xa6, 0xa6, 0xa8, 0xa8, 0xa8,
2079 0xa8, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xab, 0xab,
2080 0xab, 0xab, 0xac, 0xac, 0xac, 0xac, 0xac, 0xad,
2081 0xad, 0xad, 0xad, 0xad, 0xae, 0xae, 0xae, 0xae,
2082 0xaf, 0xaf, 0xaf, 0xaf, 0xaf, 0xb0, 0xb0, 0xb0,
2083 0xb0, 0xb0, 0xb1, 0xb1, 0xb1, 0xb1, 0xb1, 0xb2,
2084 0xb2, 0xb2, 0xb2, 0xb2, 0xb3, 0xb3, 0xb3, 0xb3,
2085 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb6, 0xb6, 0xb6,
2086 0xb6, 0xb6, 0xb7, 0xb7, 0xb7, 0xb7, 0xb7, 0xb8,
2087 0xb8, 0xb8, 0xb8, 0xb8, 0xb9, 0xb9, 0xb9, 0xb9,
2088 0xb9, 0xba, 0xba, 0xba, 0xba, 0xba, 0xbc, 0xbc,
2089 0xbc, 0xbc, 0xbc, 0xbd, 0xbd, 0xbd, 0xbd, 0xbd,
2090 0xbe, 0xbe, 0xbe, 0xbe, 0xbe, 0xbe, 0xbf, 0xbf,
2091 0xbf, 0xbf, 0xbf, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0,
2092 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc3, 0xc3, 0xc3,
2093 0xc3, 0xc3, 0xc4, 0xc4, 0xc4, 0xc4, 0xc4, 0xc5,
2094 0xc5, 0xc5, 0xc5, 0xc5, 0xc5, 0xc6, 0xc6, 0xc6,
2095 0xc6, 0xc6, 0xc7, 0xc7, 0xc7, 0xc7, 0xc7, 0xc9,
2096 0xc9, 0xc9, 0xc9, 0xc9, 0xc9, 0xca, 0xca, 0xca,
2097 0xca, 0xca, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcc,
2098 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcd, 0xcd, 0xcd,
2099 0xcd, 0xcd, 0xce, 0xce, 0xce, 0xce, 0xce, 0xcf,
2100 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xd0, 0xd0, 0xd0,
2101 0xd0, 0xd0, 0xd1, 0xd1, 0xd1, 0xd1, 0xd1, 0xd1,
2102 0xd3, 0xd3, 0xd3, 0xd3, 0xd3, 0xd4, 0xd4, 0xd4,
2103 0xd4, 0xd4, 0xd4, 0xd6, 0xd6, 0xd6, 0xd6, 0xd6,
2104 0xd7, 0xd7, 0xd7, 0xd7, 0xd7, 0xd7, 0xd8, 0xd8,
2105 0xd8, 0xd8, 0xd8, 0xd9, 0xd9, 0xd9, 0xd9, 0xd9,
2106 0xd9, 0xda, 0xda, 0xda, 0xda, 0xda, 0xdb, 0xdb,
2107 0xdb, 0xdb, 0xdb, 0xdb, 0xdd, 0xdd, 0xdd, 0xdd,
2108 0xdd, 0xde, 0xde, 0xde, 0xde, 0xde, 0xde, 0xdf,
2109 0xdf, 0xdf, 0xdf, 0xdf, 0xe0, 0xe0, 0xe0, 0xe0,
2110 0xe0, 0xe0, 0xe1, 0xe1, 0xe1, 0xe1, 0xe1, 0xe2,
2111 0xe2, 0xe2, 0xe2, 0xe2, 0xe2, 0xe3, 0xe3, 0xe3,
2112 0xe3, 0xe3, 0xe4, 0xe4, 0xe4, 0xe4, 0xe4, 0xe4,
2113 0xe5, 0xe5, 0xe5, 0xe5, 0xe5, 0xe6, 0xe6, 0xe6,
2114 0xe6, 0xe6, 0xe6, 0xe7, 0xe7, 0xe7, 0xe7, 0xe7,
2115 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe9, 0xe9,
2116 0xe9, 0xe9, 0xe9, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb,
2117 0xeb, 0xec, 0xec, 0xec, 0xec, 0xec, 0xed, 0xed,
2118 0xed, 0xed, 0xed, 0xed, 0xee, 0xee, 0xee, 0xee,
2119 0xee, 0xef, 0xef, 0xef, 0xef, 0xef, 0xef, 0xf0,
2120 0xf0, 0xf0, 0xf0, 0xf0, 0xf1, 0xf1, 0xf1, 0xf1,
2121 0xf1, 0xf1, 0xf3, 0xf3, 0xf3, 0xf3, 0xf3, 0xf4,
2122 0xf4, 0xf4, 0xf4, 0xf4, 0xf5, 0xf5, 0xf5, 0xf5,
2123 0xf5, 0xf5, 0xf6, 0xf6, 0xf6, 0xf6, 0xf6, 0xf7,
2124 0xf7, 0xf7, 0xf7, 0xf7, 0xf8, 0xf8, 0xf8, 0xf8,
2125 0xf8, 0xf8, 0xf9, 0xf9, 0xf9, 0xf9, 0xf9, 0xfa,
2126 0xfa, 0xfa, 0xfa, 0xfa, 0xfa, 0xfa, 0xfa, 0xfa,
2127 0xfa, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfc, 0xfc,
2128 0xfc, 0xfc, 0xfc, 0xfc, 0xfc, 0xfc, 0xfc, 0xfc,
2129 0xfc, 0xfd, 0xfd, 0xfd, 0xfd, 0xfd, 0xfe, 0xfe,
2130 0xfe, 0xfe, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff,
2131 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2132 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2133 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2134 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2135 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2136 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2137 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2138 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2139 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2140 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2141 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2142 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2143 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2144 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2145 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2146 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2147 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2148 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2149 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2150 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2151 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2152 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2153 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2154 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2155 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2156 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2157 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2158 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2159 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff},
2160 {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
2161 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
2162 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
2163 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
2164 0x00, 0x00, 0x01, 0x02, 0x03, 0x05, 0x05, 0x07,
2165 0x08, 0x09, 0x0a, 0x0a, 0x0c, 0x0d, 0x0e, 0x0e,
2166 0x10, 0x11, 0x12, 0x12, 0x14, 0x15, 0x16, 0x16,
2167 0x17, 0x18, 0x18, 0x1a, 0x1b, 0x1b, 0x1c, 0x1e,
2168 0x1e, 0x1f, 0x1f, 0x20, 0x22, 0x22, 0x23, 0x23,
2169 0x25, 0x26, 0x26, 0x27, 0x27, 0x28, 0x29, 0x29,
2170 0x2b, 0x2b, 0x2c, 0x2c, 0x2d, 0x2d, 0x2f, 0x30,
2171 0x30, 0x31, 0x31, 0x33, 0x33, 0x34, 0x34, 0x35,
2172 0x35, 0x37, 0x37, 0x38, 0x38, 0x39, 0x39, 0x3a,
2173 0x3a, 0x3b, 0x3b, 0x3b, 0x3c, 0x3c, 0x3d, 0x3d,
2174 0x3f, 0x3f, 0x40, 0x40, 0x42, 0x42, 0x42, 0x43,
2175 0x43, 0x44, 0x44, 0x45, 0x45, 0x47, 0x47, 0x47,
2176 0x48, 0x48, 0x49, 0x49, 0x49, 0x4a, 0x4a, 0x4b,
2177 0x4b, 0x4b, 0x4c, 0x4c, 0x4d, 0x4d, 0x4d, 0x4f,
2178 0x4f, 0x50, 0x50, 0x50, 0x52, 0x52, 0x52, 0x53,
2179 0x53, 0x54, 0x54, 0x54, 0x55, 0x55, 0x55, 0x56,
2180 0x56, 0x58, 0x58, 0x58, 0x59, 0x59, 0x59, 0x5a,
2181 0x5a, 0x5a, 0x5b, 0x5b, 0x5b, 0x5c, 0x5c, 0x5c,
2182 0x5e, 0x5e, 0x5e, 0x5f, 0x5f, 0x5f, 0x60, 0x60,
2183 0x60, 0x61, 0x61, 0x61, 0x62, 0x62, 0x62, 0x63,
2184 0x63, 0x63, 0x65, 0x65, 0x65, 0x66, 0x66, 0x66,
2185 0x66, 0x67, 0x67, 0x67, 0x68, 0x68, 0x68, 0x69,
2186 0x69, 0x69, 0x6a, 0x6a, 0x6a, 0x6a, 0x6c, 0x6c,
2187 0x6c, 0x6d, 0x6d, 0x6d, 0x6d, 0x6e, 0x6e, 0x6e,
2188 0x6f, 0x6f, 0x6f, 0x6f, 0x70, 0x70, 0x70, 0x71,
2189 0x71, 0x71, 0x71, 0x73, 0x73, 0x73, 0x74, 0x74,
2190 0x74, 0x74, 0x75, 0x75, 0x75, 0x75, 0x77, 0x77,
2191 0x77, 0x78, 0x78, 0x78, 0x78, 0x79, 0x79, 0x79,
2192 0x79, 0x7a, 0x7a, 0x7a, 0x7a, 0x7b, 0x7b, 0x7b,
2193 0x7b, 0x7c, 0x7c, 0x7c, 0x7c, 0x7d, 0x7d, 0x7d,
2194 0x7d, 0x7f, 0x7f, 0x7f, 0x7f, 0x80, 0x80, 0x80,
2195 0x80, 0x81, 0x81, 0x81, 0x81, 0x82, 0x82, 0x82,
2196 0x82, 0x84, 0x84, 0x84, 0x84, 0x85, 0x85, 0x85,
2197 0x85, 0x86, 0x86, 0x86, 0x86, 0x88, 0x88, 0x88,
2198 0x88, 0x88, 0x89, 0x89, 0x89, 0x89, 0x8a, 0x8a,
2199 0x8a, 0x8a, 0x8b, 0x8b, 0x8b, 0x8b, 0x8b, 0x8d,
2200 0x8d, 0x8d, 0x8d, 0x8e, 0x8e, 0x8e, 0x8e, 0x8e,
2201 0x8f, 0x8f, 0x8f, 0x8f, 0x90, 0x90, 0x90, 0x90,
2202 0x90, 0x91, 0x91, 0x91, 0x91, 0x92, 0x92, 0x92,
2203 0x92, 0x92, 0x93, 0x93, 0x93, 0x93, 0x94, 0x94,
2204 0x94, 0x94, 0x94, 0x96, 0x96, 0x96, 0x96, 0x96,
2205 0x97, 0x97, 0x97, 0x97, 0x97, 0x98, 0x98, 0x98,
2206 0x98, 0x99, 0x99, 0x99, 0x99, 0x99, 0x9a, 0x9a,
2207 0x9a, 0x9a, 0x9a, 0x9b, 0x9b, 0x9b, 0x9b, 0x9b,
2208 0x9c, 0x9c, 0x9c, 0x9c, 0x9c, 0x9d, 0x9d, 0x9d,
2209 0x9d, 0x9d, 0x9e, 0x9e, 0x9e, 0x9e, 0x9e, 0xa0,
2210 0xa0, 0xa0, 0xa0, 0xa0, 0xa1, 0xa1, 0xa1, 0xa1,
2211 0xa1, 0xa2, 0xa2, 0xa2, 0xa2, 0xa2, 0xa3, 0xa3,
2212 0xa3, 0xa3, 0xa3, 0xa4, 0xa4, 0xa4, 0xa4, 0xa4,
2213 0xa4, 0xa5, 0xa5, 0xa5, 0xa5, 0xa5, 0xa6, 0xa6,
2214 0xa6, 0xa6, 0xa6, 0xa8, 0xa8, 0xa8, 0xa8, 0xa8,
2215 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xab, 0xab,
2216 0xab, 0xab, 0xab, 0xac, 0xac, 0xac, 0xac, 0xac,
2217 0xad, 0xad, 0xad, 0xad, 0xad, 0xad, 0xae, 0xae,
2218 0xae, 0xae, 0xae, 0xaf, 0xaf, 0xaf, 0xaf, 0xaf,
2219 0xaf, 0xb0, 0xb0, 0xb0, 0xb0, 0xb0, 0xb1, 0xb1,
2220 0xb1, 0xb1, 0xb1, 0xb1, 0xb2, 0xb2, 0xb2, 0xb2,
2221 0xb2, 0xb3, 0xb3, 0xb3, 0xb3, 0xb3, 0xb3, 0xb4,
2222 0xb4, 0xb4, 0xb4, 0xb4, 0xb6, 0xb6, 0xb6, 0xb6,
2223 0xb6, 0xb6, 0xb7, 0xb7, 0xb7, 0xb7, 0xb7, 0xb7,
2224 0xb8, 0xb8, 0xb8, 0xb8, 0xb8, 0xb9, 0xb9, 0xb9,
2225 0xb9, 0xb9, 0xb9, 0xba, 0xba, 0xba, 0xba, 0xba,
2226 0xba, 0xbc, 0xbc, 0xbc, 0xbc, 0xbc, 0xbd, 0xbd,
2227 0xbd, 0xbd, 0xbd, 0xbd, 0xbe, 0xbe, 0xbe, 0xbe,
2228 0xbe, 0xbe, 0xbf, 0xbf, 0xbf, 0xbf, 0xbf, 0xbf,
2229 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc2, 0xc2,
2230 0xc2, 0xc2, 0xc2, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3,
2231 0xc3, 0xc4, 0xc4, 0xc4, 0xc4, 0xc4, 0xc4, 0xc5,
2232 0xc5, 0xc5, 0xc5, 0xc5, 0xc5, 0xc6, 0xc6, 0xc6,
2233 0xc6, 0xc6, 0xc6, 0xc7, 0xc7, 0xc7, 0xc7, 0xc7,
2234 0xc7, 0xc9, 0xc9, 0xc9, 0xc9, 0xc9, 0xca, 0xca,
2235 0xca, 0xca, 0xca, 0xca, 0xcb, 0xcb, 0xcb, 0xcb,
2236 0xcb, 0xcb, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc,
2237 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xce, 0xce,
2238 0xce, 0xce, 0xce, 0xce, 0xcf, 0xcf, 0xcf, 0xcf,
2239 0xcf, 0xcf, 0xd0, 0xd0, 0xd0, 0xd0, 0xd0, 0xd0,
2240 0xd1, 0xd1, 0xd1, 0xd1, 0xd1, 0xd1, 0xd3, 0xd3,
2241 0xd3, 0xd3, 0xd3, 0xd4, 0xd4, 0xd4, 0xd4, 0xd4,
2242 0xd4, 0xd6, 0xd6, 0xd6, 0xd6, 0xd6, 0xd6, 0xd7,
2243 0xd7, 0xd7, 0xd7, 0xd7, 0xd7, 0xd8, 0xd8, 0xd8,
2244 0xd8, 0xd8, 0xd8, 0xd9, 0xd9, 0xd9, 0xd9, 0xd9,
2245 0xd9, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda, 0xdb,
2246 0xdb, 0xdb, 0xdb, 0xdb, 0xdd, 0xdd, 0xdd, 0xdd,
2247 0xdd, 0xdd, 0xde, 0xde, 0xde, 0xde, 0xde, 0xde,
2248 0xdf, 0xdf, 0xdf, 0xdf, 0xdf, 0xdf, 0xe0, 0xe0,
2249 0xe0, 0xe0, 0xe0, 0xe0, 0xe1, 0xe1, 0xe1, 0xe1,
2250 0xe1, 0xe2, 0xe2, 0xe2, 0xe2, 0xe2, 0xe2, 0xe3,
2251 0xe3, 0xe3, 0xe3, 0xe3, 0xe3, 0xe4, 0xe4, 0xe4,
2252 0xe4, 0xe4, 0xe5, 0xe5, 0xe5, 0xe5, 0xe5, 0xe5,
2253 0xe6, 0xe6, 0xe6, 0xe6, 0xe6, 0xe6, 0xe7, 0xe7,
2254 0xe7, 0xe7, 0xe7, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8,
2255 0xe8, 0xe9, 0xe9, 0xe9, 0xe9, 0xe9, 0xeb, 0xeb,
2256 0xeb, 0xeb, 0xeb, 0xeb, 0xec, 0xec, 0xec, 0xec,
2257 0xec, 0xed, 0xed, 0xed, 0xed, 0xed, 0xed, 0xee,
2258 0xee, 0xee, 0xee, 0xee, 0xef, 0xef, 0xef, 0xef,
2259 0xef, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf1,
2260 0xf1, 0xf1, 0xf1, 0xf1, 0xf3, 0xf3, 0xf3, 0xf3,
2261 0xf3, 0xf4, 0xf4, 0xf4, 0xf4, 0xf4, 0xf5, 0xf5,
2262 0xf5, 0xf5, 0xf5, 0xf6, 0xf6, 0xf6, 0xf6, 0xf6,
2263 0xf7, 0xf7, 0xf7, 0xf7, 0xf7, 0xf8, 0xf8, 0xf8,
2264 0xf8, 0xf8, 0xf9, 0xf9, 0xf9, 0xf9, 0xf9, 0xfa,
2265 0xfa, 0xfa, 0xfa, 0xfa, 0xfa, 0xfa, 0xfa, 0xfa,
2266 0xfa, 0xfb, 0xfb, 0xfb, 0xfb, 0xfc, 0xfc, 0xfc,
2267 0xfc, 0xfc, 0xfc, 0xfc, 0xfc, 0xfc, 0xfc, 0xfd,
2268 0xfd, 0xfd, 0xfd, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe,
2269 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2270 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2271 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2272 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2273 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2274 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2275 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2276 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2277 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2278 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2279 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2280 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2281 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2282 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2283 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2284 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2285 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2286 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2287 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff}
2288 },
2289 { /* gamma 2 */
2290 {0x00, 0x01, 0x02, 0x05, 0x07, 0x08, 0x0a, 0x0c,
2291 0x0d, 0x0e, 0x10, 0x12, 0x14, 0x15, 0x16, 0x17,
2292 0x18, 0x1a, 0x1b, 0x1c, 0x1e, 0x1f, 0x20, 0x22,
2293 0x23, 0x25, 0x26, 0x27, 0x28, 0x29, 0x2b, 0x2c,
2294 0x2d, 0x2d, 0x2f, 0x30, 0x31, 0x33, 0x34, 0x34,
2295 0x35, 0x37, 0x38, 0x38, 0x39, 0x3a, 0x3b, 0x3b,
2296 0x3c, 0x3d, 0x3f, 0x3f, 0x40, 0x42, 0x42, 0x43,
2297 0x44, 0x44, 0x45, 0x47, 0x47, 0x48, 0x49, 0x49,
2298 0x4a, 0x4b, 0x4b, 0x4c, 0x4c, 0x4d, 0x4f, 0x4f,
2299 0x50, 0x50, 0x52, 0x53, 0x53, 0x54, 0x54, 0x55,
2300 0x55, 0x56, 0x56, 0x58, 0x58, 0x59, 0x5a, 0x5a,
2301 0x5b, 0x5b, 0x5c, 0x5c, 0x5e, 0x5e, 0x5f, 0x5f,
2302 0x60, 0x60, 0x61, 0x61, 0x62, 0x62, 0x63, 0x63,
2303 0x65, 0x65, 0x65, 0x66, 0x66, 0x67, 0x67, 0x68,
2304 0x68, 0x69, 0x69, 0x6a, 0x6a, 0x6a, 0x6c, 0x6c,
2305 0x6d, 0x6d, 0x6e, 0x6e, 0x6e, 0x6f, 0x6f, 0x70,
2306 0x70, 0x70, 0x71, 0x71, 0x73, 0x73, 0x73, 0x74,
2307 0x74, 0x75, 0x75, 0x75, 0x77, 0x77, 0x78, 0x78,
2308 0x78, 0x79, 0x79, 0x79, 0x7a, 0x7a, 0x7b, 0x7b,
2309 0x7b, 0x7c, 0x7c, 0x7c, 0x7d, 0x7d, 0x7f, 0x7f,
2310 0x7f, 0x80, 0x80, 0x80, 0x81, 0x81, 0x81, 0x82,
2311 0x82, 0x82, 0x84, 0x84, 0x84, 0x85, 0x85, 0x85,
2312 0x86, 0x86, 0x86, 0x88, 0x88, 0x88, 0x89, 0x89,
2313 0x89, 0x8a, 0x8a, 0x8a, 0x8b, 0x8b, 0x8b, 0x8d,
2314 0x8d, 0x8d, 0x8d, 0x8e, 0x8e, 0x8e, 0x8f, 0x8f,
2315 0x8f, 0x90, 0x90, 0x90, 0x91, 0x91, 0x91, 0x91,
2316 0x92, 0x92, 0x92, 0x93, 0x93, 0x93, 0x93, 0x94,
2317 0x94, 0x94, 0x96, 0x96, 0x96, 0x97, 0x97, 0x97,
2318 0x97, 0x98, 0x98, 0x98, 0x98, 0x99, 0x99, 0x99,
2319 0x9a, 0x9a, 0x9a, 0x9a, 0x9b, 0x9b, 0x9b, 0x9b,
2320 0x9c, 0x9c, 0x9c, 0x9d, 0x9d, 0x9d, 0x9d, 0x9e,
2321 0x9e, 0x9e, 0x9e, 0xa0, 0xa0, 0xa0, 0xa0, 0xa1,
2322 0xa1, 0xa1, 0xa1, 0xa2, 0xa2, 0xa2, 0xa2, 0xa3,
2323 0xa3, 0xa3, 0xa4, 0xa4, 0xa4, 0xa4, 0xa5, 0xa5,
2324 0xa5, 0xa5, 0xa5, 0xa6, 0xa6, 0xa6, 0xa6, 0xa8,
2325 0xa8, 0xa8, 0xa8, 0xa9, 0xa9, 0xa9, 0xa9, 0xab,
2326 0xab, 0xab, 0xab, 0xac, 0xac, 0xac, 0xac, 0xad,
2327 0xad, 0xad, 0xad, 0xad, 0xae, 0xae, 0xae, 0xae,
2328 0xaf, 0xaf, 0xaf, 0xaf, 0xb0, 0xb0, 0xb0, 0xb0,
2329 0xb0, 0xb1, 0xb1, 0xb1, 0xb1, 0xb2, 0xb2, 0xb2,
2330 0xb2, 0xb2, 0xb3, 0xb3, 0xb3, 0xb3, 0xb4, 0xb4,
2331 0xb4, 0xb4, 0xb4, 0xb6, 0xb6, 0xb6, 0xb6, 0xb7,
2332 0xb7, 0xb7, 0xb7, 0xb7, 0xb8, 0xb8, 0xb8, 0xb8,
2333 0xb8, 0xb9, 0xb9, 0xb9, 0xb9, 0xba, 0xba, 0xba,
2334 0xba, 0xba, 0xbc, 0xbc, 0xbc, 0xbc, 0xbc, 0xbd,
2335 0xbd, 0xbd, 0xbd, 0xbd, 0xbe, 0xbe, 0xbe, 0xbe,
2336 0xbe, 0xbf, 0xbf, 0xbf, 0xbf, 0xbf, 0xc0, 0xc0,
2337 0xc0, 0xc0, 0xc0, 0xc2, 0xc2, 0xc2, 0xc2, 0xc3,
2338 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc4, 0xc4, 0xc4,
2339 0xc4, 0xc4, 0xc5, 0xc5, 0xc5, 0xc5, 0xc5, 0xc6,
2340 0xc6, 0xc6, 0xc6, 0xc6, 0xc7, 0xc7, 0xc7, 0xc7,
2341 0xc7, 0xc9, 0xc9, 0xc9, 0xc9, 0xc9, 0xca, 0xca,
2342 0xca, 0xca, 0xca, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb,
2343 0xcb, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcd, 0xcd,
2344 0xcd, 0xcd, 0xcd, 0xce, 0xce, 0xce, 0xce, 0xce,
2345 0xce, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xd0, 0xd0,
2346 0xd0, 0xd0, 0xd0, 0xd0, 0xd1, 0xd1, 0xd1, 0xd1,
2347 0xd1, 0xd3, 0xd3, 0xd3, 0xd3, 0xd3, 0xd4, 0xd4,
2348 0xd4, 0xd4, 0xd4, 0xd4, 0xd6, 0xd6, 0xd6, 0xd6,
2349 0xd6, 0xd6, 0xd7, 0xd7, 0xd7, 0xd7, 0xd7, 0xd8,
2350 0xd8, 0xd8, 0xd8, 0xd8, 0xd8, 0xd9, 0xd9, 0xd9,
2351 0xd9, 0xd9, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda,
2352 0xdb, 0xdb, 0xdb, 0xdb, 0xdb, 0xdb, 0xdd, 0xdd,
2353 0xdd, 0xdd, 0xdd, 0xde, 0xde, 0xde, 0xde, 0xde,
2354 0xde, 0xdf, 0xdf, 0xdf, 0xdf, 0xdf, 0xdf, 0xe0,
2355 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe1, 0xe1, 0xe1,
2356 0xe1, 0xe1, 0xe1, 0xe2, 0xe2, 0xe2, 0xe2, 0xe2,
2357 0xe3, 0xe3, 0xe3, 0xe3, 0xe3, 0xe3, 0xe4, 0xe4,
2358 0xe4, 0xe4, 0xe4, 0xe4, 0xe5, 0xe5, 0xe5, 0xe5,
2359 0xe5, 0xe5, 0xe6, 0xe6, 0xe6, 0xe6, 0xe6, 0xe6,
2360 0xe7, 0xe7, 0xe7, 0xe7, 0xe7, 0xe7, 0xe8, 0xe8,
2361 0xe8, 0xe8, 0xe8, 0xe8, 0xe9, 0xe9, 0xe9, 0xe9,
2362 0xe9, 0xe9, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb,
2363 0xec, 0xec, 0xec, 0xec, 0xec, 0xed, 0xed, 0xed,
2364 0xed, 0xed, 0xed, 0xee, 0xee, 0xee, 0xee, 0xee,
2365 0xee, 0xef, 0xef, 0xef, 0xef, 0xef, 0xef, 0xf0,
2366 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf1, 0xf1, 0xf1,
2367 0xf1, 0xf1, 0xf1, 0xf3, 0xf3, 0xf3, 0xf3, 0xf3,
2368 0xf3, 0xf4, 0xf4, 0xf4, 0xf4, 0xf4, 0xf4, 0xf5,
2369 0xf5, 0xf5, 0xf5, 0xf5, 0xf5, 0xf6, 0xf6, 0xf6,
2370 0xf6, 0xf6, 0xf6, 0xf7, 0xf7, 0xf7, 0xf7, 0xf7,
2371 0xf7, 0xf8, 0xf8, 0xf8, 0xf8, 0xf8, 0xf8, 0xf9,
2372 0xf9, 0xf9, 0xf9, 0xf9, 0xf9, 0xfa, 0xfa, 0xfa,
2373 0xfa, 0xfa, 0xfa, 0xfa, 0xfa, 0xfa, 0xfa, 0xfa,
2374 0xfa, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
2375 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
2376 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
2377 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
2378 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
2379 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
2380 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
2381 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
2382 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
2383 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
2384 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
2385 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
2386 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
2387 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
2388 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
2389 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
2390 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
2391 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
2392 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
2393 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
2394 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
2395 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
2396 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
2397 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
2398 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
2399 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
2400 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
2401 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
2402 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
2403 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
2404 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
2405 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
2406 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
2407 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
2408 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
2409 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
2410 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
2411 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
2412 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
2413 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
2414 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
2415 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
2416 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
2417 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb},
2418 {0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x03, 0x05,
2419 0x07, 0x08, 0x09, 0x0a, 0x0d, 0x0e, 0x10, 0x11,
2420 0x12, 0x14, 0x15, 0x16, 0x16, 0x17, 0x18, 0x1a,
2421 0x1b, 0x1c, 0x1e, 0x1f, 0x20, 0x20, 0x22, 0x23,
2422 0x25, 0x26, 0x26, 0x27, 0x28, 0x29, 0x29, 0x2b,
2423 0x2c, 0x2d, 0x2d, 0x2f, 0x30, 0x30, 0x31, 0x33,
2424 0x33, 0x34, 0x35, 0x35, 0x37, 0x38, 0x38, 0x39,
2425 0x3a, 0x3a, 0x3b, 0x3b, 0x3c, 0x3d, 0x3d, 0x3f,
2426 0x3f, 0x40, 0x42, 0x42, 0x43, 0x43, 0x44, 0x44,
2427 0x45, 0x45, 0x47, 0x47, 0x48, 0x48, 0x49, 0x4a,
2428 0x4a, 0x4b, 0x4b, 0x4c, 0x4c, 0x4d, 0x4d, 0x4d,
2429 0x4f, 0x4f, 0x50, 0x50, 0x52, 0x52, 0x53, 0x53,
2430 0x54, 0x54, 0x55, 0x55, 0x56, 0x56, 0x56, 0x58,
2431 0x58, 0x59, 0x59, 0x5a, 0x5a, 0x5a, 0x5b, 0x5b,
2432 0x5c, 0x5c, 0x5c, 0x5e, 0x5e, 0x5f, 0x5f, 0x5f,
2433 0x60, 0x60, 0x61, 0x61, 0x61, 0x62, 0x62, 0x63,
2434 0x63, 0x63, 0x65, 0x65, 0x65, 0x66, 0x66, 0x67,
2435 0x67, 0x67, 0x68, 0x68, 0x68, 0x69, 0x69, 0x69,
2436 0x6a, 0x6a, 0x6c, 0x6c, 0x6c, 0x6d, 0x6d, 0x6d,
2437 0x6e, 0x6e, 0x6e, 0x6f, 0x6f, 0x6f, 0x70, 0x70,
2438 0x70, 0x71, 0x71, 0x71, 0x73, 0x73, 0x73, 0x73,
2439 0x74, 0x74, 0x74, 0x75, 0x75, 0x75, 0x77, 0x77,
2440 0x77, 0x78, 0x78, 0x78, 0x79, 0x79, 0x79, 0x79,
2441 0x7a, 0x7a, 0x7a, 0x7b, 0x7b, 0x7b, 0x7b, 0x7c,
2442 0x7c, 0x7c, 0x7d, 0x7d, 0x7d, 0x7d, 0x7f, 0x7f,
2443 0x7f, 0x80, 0x80, 0x80, 0x80, 0x81, 0x81, 0x81,
2444 0x82, 0x82, 0x82, 0x82, 0x84, 0x84, 0x84, 0x84,
2445 0x85, 0x85, 0x85, 0x85, 0x86, 0x86, 0x86, 0x88,
2446 0x88, 0x88, 0x88, 0x89, 0x89, 0x89, 0x89, 0x8a,
2447 0x8a, 0x8a, 0x8a, 0x8b, 0x8b, 0x8b, 0x8b, 0x8d,
2448 0x8d, 0x8d, 0x8d, 0x8e, 0x8e, 0x8e, 0x8e, 0x8f,
2449 0x8f, 0x8f, 0x8f, 0x90, 0x90, 0x90, 0x90, 0x91,
2450 0x91, 0x91, 0x91, 0x91, 0x92, 0x92, 0x92, 0x92,
2451 0x93, 0x93, 0x93, 0x93, 0x94, 0x94, 0x94, 0x94,
2452 0x94, 0x96, 0x96, 0x96, 0x96, 0x97, 0x97, 0x97,
2453 0x97, 0x98, 0x98, 0x98, 0x98, 0x98, 0x99, 0x99,
2454 0x99, 0x99, 0x99, 0x9a, 0x9a, 0x9a, 0x9a, 0x9b,
2455 0x9b, 0x9b, 0x9b, 0x9b, 0x9c, 0x9c, 0x9c, 0x9c,
2456 0x9d, 0x9d, 0x9d, 0x9d, 0x9d, 0x9e, 0x9e, 0x9e,
2457 0x9e, 0x9e, 0xa0, 0xa0, 0xa0, 0xa0, 0xa0, 0xa1,
2458 0xa1, 0xa1, 0xa1, 0xa1, 0xa2, 0xa2, 0xa2, 0xa2,
2459 0xa2, 0xa3, 0xa3, 0xa3, 0xa3, 0xa3, 0xa4, 0xa4,
2460 0xa4, 0xa4, 0xa4, 0xa5, 0xa5, 0xa5, 0xa5, 0xa5,
2461 0xa6, 0xa6, 0xa6, 0xa6, 0xa6, 0xa8, 0xa8, 0xa8,
2462 0xa8, 0xa8, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xab,
2463 0xab, 0xab, 0xab, 0xab, 0xac, 0xac, 0xac, 0xac,
2464 0xac, 0xac, 0xad, 0xad, 0xad, 0xad, 0xad, 0xae,
2465 0xae, 0xae, 0xae, 0xae, 0xaf, 0xaf, 0xaf, 0xaf,
2466 0xaf, 0xaf, 0xb0, 0xb0, 0xb0, 0xb0, 0xb0, 0xb1,
2467 0xb1, 0xb1, 0xb1, 0xb1, 0xb1, 0xb2, 0xb2, 0xb2,
2468 0xb2, 0xb2, 0xb3, 0xb3, 0xb3, 0xb3, 0xb3, 0xb3,
2469 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb6, 0xb6,
2470 0xb6, 0xb6, 0xb6, 0xb7, 0xb7, 0xb7, 0xb7, 0xb7,
2471 0xb7, 0xb8, 0xb8, 0xb8, 0xb8, 0xb8, 0xb8, 0xb9,
2472 0xb9, 0xb9, 0xb9, 0xb9, 0xba, 0xba, 0xba, 0xba,
2473 0xba, 0xba, 0xbc, 0xbc, 0xbc, 0xbc, 0xbc, 0xbc,
2474 0xbd, 0xbd, 0xbd, 0xbd, 0xbd, 0xbd, 0xbe, 0xbe,
2475 0xbe, 0xbe, 0xbe, 0xbe, 0xbf, 0xbf, 0xbf, 0xbf,
2476 0xbf, 0xbf, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0,
2477 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc3, 0xc3,
2478 0xc3, 0xc3, 0xc3, 0xc3, 0xc4, 0xc4, 0xc4, 0xc4,
2479 0xc4, 0xc4, 0xc5, 0xc5, 0xc5, 0xc5, 0xc5, 0xc5,
2480 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc7, 0xc7,
2481 0xc7, 0xc7, 0xc7, 0xc7, 0xc7, 0xc9, 0xc9, 0xc9,
2482 0xc9, 0xc9, 0xc9, 0xca, 0xca, 0xca, 0xca, 0xca,
2483 0xca, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcc,
2484 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcd, 0xcd,
2485 0xcd, 0xcd, 0xcd, 0xcd, 0xce, 0xce, 0xce, 0xce,
2486 0xce, 0xce, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf,
2487 0xcf, 0xd0, 0xd0, 0xd0, 0xd0, 0xd0, 0xd0, 0xd1,
2488 0xd1, 0xd1, 0xd1, 0xd1, 0xd1, 0xd1, 0xd3, 0xd3,
2489 0xd3, 0xd3, 0xd3, 0xd3, 0xd4, 0xd4, 0xd4, 0xd4,
2490 0xd4, 0xd4, 0xd6, 0xd6, 0xd6, 0xd6, 0xd6, 0xd6,
2491 0xd6, 0xd7, 0xd7, 0xd7, 0xd7, 0xd7, 0xd7, 0xd8,
2492 0xd8, 0xd8, 0xd8, 0xd8, 0xd8, 0xd8, 0xd9, 0xd9,
2493 0xd9, 0xd9, 0xd9, 0xd9, 0xda, 0xda, 0xda, 0xda,
2494 0xda, 0xda, 0xda, 0xdb, 0xdb, 0xdb, 0xdb, 0xdb,
2495 0xdb, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd,
2496 0xde, 0xde, 0xde, 0xde, 0xde, 0xde, 0xdf, 0xdf,
2497 0xdf, 0xdf, 0xdf, 0xdf, 0xdf, 0xe0, 0xe0, 0xe0,
2498 0xe0, 0xe0, 0xe0, 0xe1, 0xe1, 0xe1, 0xe1, 0xe1,
2499 0xe1, 0xe1, 0xe2, 0xe2, 0xe2, 0xe2, 0xe2, 0xe2,
2500 0xe3, 0xe3, 0xe3, 0xe3, 0xe3, 0xe3, 0xe3, 0xe4,
2501 0xe4, 0xe4, 0xe4, 0xe4, 0xe4, 0xe5, 0xe5, 0xe5,
2502 0xe5, 0xe5, 0xe5, 0xe5, 0xe6, 0xe6, 0xe6, 0xe6,
2503 0xe6, 0xe6, 0xe6, 0xe7, 0xe7, 0xe7, 0xe7, 0xe7,
2504 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe9,
2505 0xe9, 0xe9, 0xe9, 0xe9, 0xe9, 0xeb, 0xeb, 0xeb,
2506 0xeb, 0xeb, 0xeb, 0xeb, 0xec, 0xec, 0xec, 0xec,
2507 0xec, 0xec, 0xed, 0xed, 0xed, 0xed, 0xed, 0xed,
2508 0xee, 0xee, 0xee, 0xee, 0xee, 0xee, 0xee, 0xef,
2509 0xef, 0xef, 0xef, 0xef, 0xef, 0xf0, 0xf0, 0xf0,
2510 0xf0, 0xf0, 0xf0, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1,
2511 0xf1, 0xf3, 0xf3, 0xf3, 0xf3, 0xf3, 0xf3, 0xf4,
2512 0xf4, 0xf4, 0xf4, 0xf4, 0xf4, 0xf4, 0xf5, 0xf5,
2513 0xf5, 0xf5, 0xf5, 0xf5, 0xf6, 0xf6, 0xf6, 0xf6,
2514 0xf6, 0xf6, 0xf7, 0xf7, 0xf7, 0xf7, 0xf7, 0xf7,
2515 0xf8, 0xf8, 0xf8, 0xf8, 0xf8, 0xf8, 0xf9, 0xf9,
2516 0xf9, 0xf9, 0xf9, 0xf9, 0xfa, 0xfa, 0xfa, 0xfa,
2517 0xfa, 0xfa, 0xfa, 0xfa, 0xfa, 0xfa, 0xfa, 0xfb,
2518 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
2519 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
2520 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
2521 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
2522 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
2523 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
2524 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
2525 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
2526 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
2527 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
2528 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
2529 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
2530 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
2531 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
2532 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
2533 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
2534 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
2535 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
2536 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
2537 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
2538 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
2539 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
2540 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
2541 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
2542 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
2543 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
2544 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
2545 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb},
2546 {0x00, 0x00, 0x00, 0x01, 0x02, 0x05, 0x07, 0x08,
2547 0x09, 0x0a, 0x0c, 0x0e, 0x10, 0x11, 0x12, 0x14,
2548 0x15, 0x16, 0x17, 0x18, 0x1a, 0x1b, 0x1c, 0x1e,
2549 0x1f, 0x20, 0x20, 0x22, 0x23, 0x25, 0x26, 0x27,
2550 0x28, 0x28, 0x29, 0x2b, 0x2c, 0x2d, 0x2d, 0x2f,
2551 0x30, 0x31, 0x31, 0x33, 0x34, 0x35, 0x35, 0x37,
2552 0x38, 0x38, 0x39, 0x3a, 0x3a, 0x3b, 0x3c, 0x3c,
2553 0x3d, 0x3f, 0x3f, 0x40, 0x40, 0x42, 0x43, 0x43,
2554 0x44, 0x44, 0x45, 0x47, 0x47, 0x48, 0x48, 0x49,
2555 0x4a, 0x4a, 0x4b, 0x4b, 0x4c, 0x4c, 0x4d, 0x4d,
2556 0x4f, 0x4f, 0x50, 0x50, 0x52, 0x52, 0x53, 0x53,
2557 0x54, 0x54, 0x55, 0x55, 0x56, 0x56, 0x58, 0x58,
2558 0x59, 0x59, 0x5a, 0x5a, 0x5b, 0x5b, 0x5c, 0x5c,
2559 0x5c, 0x5e, 0x5e, 0x5f, 0x5f, 0x60, 0x60, 0x61,
2560 0x61, 0x61, 0x62, 0x62, 0x63, 0x63, 0x65, 0x65,
2561 0x65, 0x66, 0x66, 0x67, 0x67, 0x67, 0x68, 0x68,
2562 0x69, 0x69, 0x69, 0x6a, 0x6a, 0x6a, 0x6c, 0x6c,
2563 0x6d, 0x6d, 0x6d, 0x6e, 0x6e, 0x6e, 0x6f, 0x6f,
2564 0x70, 0x70, 0x70, 0x71, 0x71, 0x71, 0x73, 0x73,
2565 0x73, 0x74, 0x74, 0x74, 0x75, 0x75, 0x75, 0x77,
2566 0x77, 0x78, 0x78, 0x78, 0x79, 0x79, 0x79, 0x7a,
2567 0x7a, 0x7a, 0x7a, 0x7b, 0x7b, 0x7b, 0x7c, 0x7c,
2568 0x7c, 0x7d, 0x7d, 0x7d, 0x7f, 0x7f, 0x7f, 0x80,
2569 0x80, 0x80, 0x81, 0x81, 0x81, 0x81, 0x82, 0x82,
2570 0x82, 0x84, 0x84, 0x84, 0x85, 0x85, 0x85, 0x85,
2571 0x86, 0x86, 0x86, 0x88, 0x88, 0x88, 0x88, 0x89,
2572 0x89, 0x89, 0x8a, 0x8a, 0x8a, 0x8a, 0x8b, 0x8b,
2573 0x8b, 0x8b, 0x8d, 0x8d, 0x8d, 0x8e, 0x8e, 0x8e,
2574 0x8e, 0x8f, 0x8f, 0x8f, 0x8f, 0x90, 0x90, 0x90,
2575 0x91, 0x91, 0x91, 0x91, 0x92, 0x92, 0x92, 0x92,
2576 0x93, 0x93, 0x93, 0x93, 0x94, 0x94, 0x94, 0x94,
2577 0x96, 0x96, 0x96, 0x96, 0x97, 0x97, 0x97, 0x97,
2578 0x98, 0x98, 0x98, 0x98, 0x99, 0x99, 0x99, 0x99,
2579 0x9a, 0x9a, 0x9a, 0x9a, 0x9b, 0x9b, 0x9b, 0x9b,
2580 0x9b, 0x9c, 0x9c, 0x9c, 0x9c, 0x9d, 0x9d, 0x9d,
2581 0x9d, 0x9e, 0x9e, 0x9e, 0x9e, 0x9e, 0xa0, 0xa0,
2582 0xa0, 0xa0, 0xa1, 0xa1, 0xa1, 0xa1, 0xa2, 0xa2,
2583 0xa2, 0xa2, 0xa2, 0xa3, 0xa3, 0xa3, 0xa3, 0xa4,
2584 0xa4, 0xa4, 0xa4, 0xa4, 0xa5, 0xa5, 0xa5, 0xa5,
2585 0xa5, 0xa6, 0xa6, 0xa6, 0xa6, 0xa8, 0xa8, 0xa8,
2586 0xa8, 0xa8, 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xab,
2587 0xab, 0xab, 0xab, 0xab, 0xac, 0xac, 0xac, 0xac,
2588 0xad, 0xad, 0xad, 0xad, 0xad, 0xae, 0xae, 0xae,
2589 0xae, 0xae, 0xaf, 0xaf, 0xaf, 0xaf, 0xaf, 0xb0,
2590 0xb0, 0xb0, 0xb0, 0xb0, 0xb1, 0xb1, 0xb1, 0xb1,
2591 0xb1, 0xb2, 0xb2, 0xb2, 0xb2, 0xb2, 0xb3, 0xb3,
2592 0xb3, 0xb3, 0xb3, 0xb4, 0xb3, 0xb4, 0xb4, 0xb4,
2593 0xb6, 0xb6, 0xb6, 0xb6, 0xb6, 0xb6, 0xb7, 0xb7,
2594 0xb7, 0xb7, 0xb7, 0xb8, 0xb8, 0xb8, 0xb8, 0xb8,
2595 0xb9, 0xb9, 0xb9, 0xb9, 0xb9, 0xb9, 0xba, 0xba,
2596 0xba, 0xba, 0xba, 0xbc, 0xbc, 0xbc, 0xbc, 0xbc,
2597 0xbd, 0xbd, 0xbd, 0xbd, 0xbd, 0xbd, 0xbe, 0xbe,
2598 0xbe, 0xbe, 0xbe, 0xbf, 0xbf, 0xbf, 0xbf, 0xbf,
2599 0xbf, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc2, 0xc2,
2600 0xc2, 0xc2, 0xc2, 0xc2, 0xc3, 0xc3, 0xc3, 0xc3,
2601 0xc3, 0xc3, 0xc4, 0xc4, 0xc4, 0xc4, 0xc4, 0xc5,
2602 0xc5, 0xc5, 0xc5, 0xc5, 0xc5, 0xc6, 0xc6, 0xc6,
2603 0xc6, 0xc6, 0xc6, 0xc7, 0xc7, 0xc7, 0xc7, 0xc7,
2604 0xc9, 0xc9, 0xc9, 0xc9, 0xc9, 0xc9, 0xca, 0xca,
2605 0xca, 0xca, 0xca, 0xca, 0xcb, 0xcb, 0xcb, 0xcb,
2606 0xcb, 0xcb, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc,
2607 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xce, 0xce,
2608 0xce, 0xce, 0xce, 0xce, 0xcf, 0xcf, 0xcf, 0xcf,
2609 0xcf, 0xcf, 0xd0, 0xd0, 0xd0, 0xd0, 0xd0, 0xd0,
2610 0xd1, 0xd1, 0xd1, 0xd1, 0xd1, 0xd1, 0xd3, 0xd3,
2611 0xd3, 0xd3, 0xd3, 0xd3, 0xd4, 0xd4, 0xd4, 0xd4,
2612 0xd4, 0xd4, 0xd6, 0xd6, 0xd6, 0xd6, 0xd6, 0xd6,
2613 0xd7, 0xd7, 0xd7, 0xd7, 0xd7, 0xd7, 0xd8, 0xd8,
2614 0xd8, 0xd8, 0xd8, 0xd8, 0xd9, 0xd9, 0xd9, 0xd9,
2615 0xd9, 0xd9, 0xda, 0xda, 0xda, 0xda, 0xda, 0xda,
2616 0xda, 0xdb, 0xdb, 0xdb, 0xdb, 0xdb, 0xdb, 0xdd,
2617 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xde, 0xde, 0xde,
2618 0xde, 0xde, 0xde, 0xdf, 0xdf, 0xdf, 0xdf, 0xdf,
2619 0xdf, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0,
2620 0xe1, 0xe1, 0xe1, 0xe1, 0xe1, 0xe1, 0xe2, 0xe2,
2621 0xe2, 0xe2, 0xe2, 0xe2, 0xe3, 0xe3, 0xe3, 0xe3,
2622 0xe3, 0xe3, 0xe4, 0xe4, 0xe4, 0xe4, 0xe4, 0xe4,
2623 0xe4, 0xe5, 0xe5, 0xe5, 0xe5, 0xe5, 0xe5, 0xe6,
2624 0xe6, 0xe6, 0xe6, 0xe6, 0xe6, 0xe7, 0xe7, 0xe7,
2625 0xe7, 0xe7, 0xe7, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8,
2626 0xe8, 0xe8, 0xe9, 0xe9, 0xe9, 0xe9, 0xe9, 0xe9,
2627 0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0xec, 0xec,
2628 0xec, 0xec, 0xec, 0xec, 0xec, 0xed, 0xed, 0xed,
2629 0xed, 0xed, 0xed, 0xee, 0xee, 0xee, 0xee, 0xee,
2630 0xee, 0xef, 0xef, 0xef, 0xef, 0xef, 0xef, 0xf0,
2631 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf1, 0xf1,
2632 0xf1, 0xf1, 0xf1, 0xf1, 0xf3, 0xf3, 0xf3, 0xf3,
2633 0xf3, 0xf3, 0xf4, 0xf4, 0xf4, 0xf4, 0xf4, 0xf4,
2634 0xf5, 0xf5, 0xf5, 0xf5, 0xf5, 0xf5, 0xf6, 0xf6,
2635 0xf6, 0xf6, 0xf6, 0xf6, 0xf7, 0xf7, 0xf7, 0xf7,
2636 0xf7, 0xf7, 0xf8, 0xf8, 0xf8, 0xf8, 0xf8, 0xf8,
2637 0xf8, 0xf9, 0xf9, 0xf9, 0xf9, 0xf9, 0xf9, 0xfa,
2638 0xfa, 0xfa, 0xfa, 0xfa, 0xfa, 0xfa, 0xfa, 0xfa,
2639 0xfa, 0xfa, 0xfa, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
2640 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
2641 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
2642 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
2643 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
2644 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
2645 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
2646 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
2647 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
2648 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
2649 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
2650 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
2651 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
2652 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
2653 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
2654 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
2655 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
2656 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
2657 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
2658 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
2659 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
2660 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
2661 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
2662 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
2663 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
2664 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
2665 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
2666 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
2667 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
2668 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
2669 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
2670 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
2671 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
2672 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
2673 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb}
2674 },
2675 { /* gamma 3 - from tp6810 + cx0342 */
2676 {0x08, 0x09, 0x0c, 0x0d, 0x10, 0x11, 0x14, 0x15,
2677 0x17, 0x18, 0x1a, 0x1c, 0x1e, 0x1f, 0x20, 0x23,
2678 0x25, 0x26, 0x27, 0x28, 0x2b, 0x2c, 0x2d, 0x2f,
2679 0x30, 0x31, 0x33, 0x34, 0x35, 0x37, 0x38, 0x39,
2680 0x3a, 0x3b, 0x3c, 0x3d, 0x3f, 0x40, 0x42, 0x43,
2681 0x44, 0x45, 0x47, 0x48, 0x48, 0x49, 0x4a, 0x4b,
2682 0x4c, 0x4d, 0x4d, 0x4f, 0x50, 0x52, 0x53, 0x53,
2683 0x54, 0x55, 0x56, 0x56, 0x58, 0x59, 0x5a, 0x5a,
2684 0x5b, 0x5c, 0x5c, 0x5e, 0x5f, 0x5f, 0x60, 0x61,
2685 0x61, 0x62, 0x63, 0x63, 0x65, 0x66, 0x66, 0x67,
2686 0x68, 0x68, 0x69, 0x69, 0x6a, 0x6c, 0x6c, 0x6d,
2687 0x6d, 0x6e, 0x6f, 0x6f, 0x70, 0x70, 0x71, 0x73,
2688 0x73, 0x74, 0x74, 0x75, 0x75, 0x77, 0x77, 0x78,
2689 0x78, 0x79, 0x7a, 0x7a, 0x7b, 0x7b, 0x7c, 0x7c,
2690 0x7d, 0x7d, 0x7f, 0x7f, 0x80, 0x80, 0x81, 0x81,
2691 0x82, 0x82, 0x84, 0x84, 0x85, 0x85, 0x86, 0x86,
2692 0x86, 0x88, 0x88, 0x89, 0x89, 0x8a, 0x8a, 0x8b,
2693 0x8b, 0x8d, 0x8d, 0x8d, 0x8e, 0x8e, 0x8f, 0x8f,
2694 0x90, 0x90, 0x91, 0x91, 0x91, 0x92, 0x92, 0x93,
2695 0x93, 0x93, 0x94, 0x94, 0x96, 0x96, 0x97, 0x97,
2696 0x97, 0x98, 0x98, 0x99, 0x99, 0x99, 0x9a, 0x9a,
2697 0x9a, 0x9b, 0x9b, 0x9c, 0x9c, 0x9c, 0x9d, 0x9d,
2698 0x9e, 0x9e, 0x9e, 0xa0, 0xa0, 0xa0, 0xa1, 0xa1,
2699 0xa2, 0xa2, 0xa2, 0xa3, 0xa3, 0xa3, 0xa4, 0xa4,
2700 0xa4, 0xa5, 0xa5, 0xa5, 0xa6, 0xa6, 0xa8, 0xa8,
2701 0xa8, 0xa9, 0xa9, 0xa9, 0xab, 0xab, 0xab, 0xac,
2702 0xac, 0xac, 0xad, 0xad, 0xad, 0xae, 0xae, 0xae,
2703 0xaf, 0xaf, 0xaf, 0xb0, 0xb0, 0xb0, 0xb1, 0xb1,
2704 0xb1, 0xb2, 0xb2, 0xb2, 0xb2, 0xb3, 0xb3, 0xb3,
2705 0xb4, 0xb4, 0xb4, 0xb6, 0xb6, 0xb6, 0xb7, 0xb7,
2706 0xb7, 0xb8, 0xb8, 0xb8, 0xb8, 0xb9, 0xb9, 0xb9,
2707 0xba, 0xba, 0xba, 0xbc, 0xbc, 0xbc, 0xbc, 0xbd,
2708 0xbd, 0xbd, 0xbe, 0xbe, 0xbe, 0xbe, 0xbf, 0xbf,
2709 0xbf, 0xc0, 0xc0, 0xc0, 0xc0, 0xc2, 0xc2, 0xc2,
2710 0xc3, 0xc3, 0xc3, 0xc3, 0xc4, 0xc4, 0xc4, 0xc5,
2711 0xc5, 0xc5, 0xc5, 0xc6, 0xc6, 0xc6, 0xc6, 0xc7,
2712 0xc7, 0xc7, 0xc9, 0xc9, 0xc9, 0xc9, 0xca, 0xca,
2713 0xca, 0xca, 0xcb, 0xcb, 0xcb, 0xcb, 0xcc, 0xcc,
2714 0xcc, 0xcd, 0xcd, 0xcd, 0xcd, 0xce, 0xce, 0xce,
2715 0xce, 0xcf, 0xcf, 0xcf, 0xcf, 0xd0, 0xd0, 0xd0,
2716 0xd0, 0xd1, 0xd1, 0xd1, 0xd1, 0xd3, 0xd3, 0xd3,
2717 0xd3, 0xd4, 0xd4, 0xd4, 0xd4, 0xd6, 0xd6, 0xd6,
2718 0xd6, 0xd7, 0xd7, 0xd7, 0xd7, 0xd8, 0xd8, 0xd8,
2719 0xd8, 0xd9, 0xd9, 0xd9, 0xd9, 0xda, 0xda, 0xda,
2720 0xda, 0xda, 0xdb, 0xdb, 0xdb, 0xdb, 0xdd, 0xdd,
2721 0xdd, 0xdd, 0xde, 0xde, 0xde, 0xde, 0xdf, 0xdf,
2722 0xdf, 0xdf, 0xdf, 0xe0, 0xe0, 0xe0, 0xe0, 0xe1,
2723 0xe1, 0xe1, 0xe1, 0xe2, 0xe2, 0xe2, 0xe2, 0xe2,
2724 0xe3, 0xe3, 0xe3, 0xe3, 0xe4, 0xe4, 0xe4, 0xe4,
2725 0xe5, 0xe5, 0xe5, 0xe5, 0xe5, 0xe6, 0xe6, 0xe6,
2726 0xe6, 0xe7, 0xe7, 0xe7, 0xe7, 0xe7, 0xe8, 0xe8,
2727 0xe8, 0xe8, 0xe8, 0xe9, 0xe9, 0xe9, 0xe9, 0xeb,
2728 0xeb, 0xeb, 0xeb, 0xeb, 0xec, 0xec, 0xec, 0xec,
2729 0xed, 0xed, 0xed, 0xed, 0xed, 0xee, 0xee, 0xee,
2730 0xee, 0xee, 0xef, 0xef, 0xef, 0xef, 0xf0, 0xf0,
2731 0xf0, 0xf0, 0xf0, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1,
2732 0xf3, 0xf3, 0xf3, 0xf3, 0xf3, 0xf4, 0xf4, 0xf4,
2733 0xf4, 0xf4, 0xf5, 0xf5, 0xf5, 0xf5, 0xf6, 0xf6,
2734 0xf6, 0xf6, 0xf6, 0xf7, 0xf7, 0xf7, 0xf7, 0xf7,
2735 0xf8, 0xf8, 0xf8, 0xf8, 0xf8, 0xf9, 0xf9, 0xf9,
2736 0xf9, 0xf9, 0xfa, 0xfa, 0xfa, 0xfa, 0xfa, 0xfa,
2737 0xfa, 0xfa, 0xfa, 0xfa, 0xfb, 0xfb, 0xfb, 0xfb,
2738 0xfb, 0xfc, 0xfc, 0xfc, 0xfc, 0xfc, 0xfc, 0xfc,
2739 0xfc, 0xfc, 0xfc, 0xfd, 0xfd, 0xfd, 0xfd, 0xfd,
2740 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xff, 0xff, 0xff,
2741 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2742 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2743 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2744 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2745 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2746 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2747 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2748 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2749 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2750 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2751 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2752 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2753 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2754 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2755 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2756 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2757 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2758 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2759 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2760 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2761 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2762 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2763 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2764 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2765 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2766 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2767 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2768 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2769 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2770 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2771 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2772 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2773 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2774 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2775 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2776 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2777 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2778 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2779 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2780 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2781 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2782 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2783 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2784 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2785 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2786 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2787 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2788 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2789 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2790 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2791 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2792 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2793 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2794 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2795 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2796 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2797 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2798 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2799 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2800 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2801 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2802 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2803 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff},
2804 {0x03, 0x05, 0x07, 0x09, 0x0a, 0x0c, 0x0d, 0x10,
2805 0x11, 0x12, 0x14, 0x15, 0x17, 0x18, 0x1a, 0x1b,
2806 0x1c, 0x1e, 0x1f, 0x20, 0x22, 0x23, 0x25, 0x26,
2807 0x27, 0x28, 0x29, 0x2b, 0x2c, 0x2c, 0x2d, 0x2f,
2808 0x30, 0x31, 0x33, 0x33, 0x34, 0x35, 0x37, 0x38,
2809 0x38, 0x39, 0x3a, 0x3b, 0x3b, 0x3c, 0x3d, 0x3f,
2810 0x3f, 0x40, 0x42, 0x42, 0x43, 0x44, 0x45, 0x45,
2811 0x47, 0x47, 0x48, 0x49, 0x49, 0x4a, 0x4b, 0x4b,
2812 0x4c, 0x4d, 0x4d, 0x4f, 0x4f, 0x50, 0x52, 0x52,
2813 0x53, 0x53, 0x54, 0x54, 0x55, 0x55, 0x56, 0x58,
2814 0x58, 0x59, 0x59, 0x5a, 0x5a, 0x5b, 0x5b, 0x5c,
2815 0x5c, 0x5e, 0x5e, 0x5f, 0x5f, 0x60, 0x60, 0x61,
2816 0x61, 0x62, 0x62, 0x63, 0x63, 0x65, 0x65, 0x66,
2817 0x66, 0x67, 0x67, 0x67, 0x68, 0x68, 0x69, 0x69,
2818 0x6a, 0x6a, 0x6c, 0x6c, 0x6c, 0x6d, 0x6d, 0x6e,
2819 0x6e, 0x6f, 0x6f, 0x6f, 0x70, 0x70, 0x71, 0x71,
2820 0x71, 0x73, 0x73, 0x74, 0x74, 0x74, 0x75, 0x75,
2821 0x77, 0x77, 0x77, 0x78, 0x78, 0x79, 0x79, 0x79,
2822 0x7a, 0x7a, 0x7a, 0x7b, 0x7b, 0x7b, 0x7c, 0x7c,
2823 0x7d, 0x7d, 0x7d, 0x7f, 0x7f, 0x7f, 0x80, 0x80,
2824 0x80, 0x81, 0x81, 0x81, 0x82, 0x82, 0x82, 0x84,
2825 0x84, 0x84, 0x85, 0x85, 0x85, 0x86, 0x86, 0x86,
2826 0x88, 0x88, 0x88, 0x89, 0x89, 0x89, 0x8a, 0x8a,
2827 0x8a, 0x8b, 0x8b, 0x8b, 0x8d, 0x8d, 0x8d, 0x8e,
2828 0x8e, 0x8e, 0x8e, 0x8f, 0x8f, 0x8f, 0x90, 0x90,
2829 0x90, 0x91, 0x91, 0x91, 0x91, 0x92, 0x92, 0x92,
2830 0x93, 0x93, 0x93, 0x93, 0x94, 0x94, 0x94, 0x96,
2831 0x96, 0x96, 0x96, 0x97, 0x97, 0x97, 0x98, 0x98,
2832 0x98, 0x98, 0x99, 0x99, 0x99, 0x9a, 0x9a, 0x9a,
2833 0x9a, 0x9b, 0x9b, 0x9b, 0x9b, 0x9c, 0x9c, 0x9c,
2834 0x9c, 0x9d, 0x9d, 0x9d, 0x9e, 0x9e, 0x9e, 0x9e,
2835 0xa0, 0xa0, 0xa0, 0xa0, 0xa1, 0xa1, 0xa1, 0xa1,
2836 0xa2, 0xa2, 0xa2, 0xa2, 0xa3, 0xa3, 0xa3, 0xa3,
2837 0xa4, 0xa4, 0xa4, 0xa4, 0xa5, 0xa5, 0xa5, 0xa5,
2838 0xa6, 0xa6, 0xa6, 0xa6, 0xa8, 0xa8, 0xa8, 0xa8,
2839 0xa9, 0xa9, 0xa9, 0xa9, 0xa9, 0xab, 0xab, 0xab,
2840 0xab, 0xac, 0xac, 0xac, 0xac, 0xad, 0xad, 0xad,
2841 0xad, 0xad, 0xae, 0xae, 0xae, 0xae, 0xaf, 0xaf,
2842 0xaf, 0xaf, 0xb0, 0xb0, 0xb0, 0xb0, 0xb0, 0xb1,
2843 0xb1, 0xb1, 0xb1, 0xb2, 0xb2, 0xb2, 0xb2, 0xb2,
2844 0xb3, 0xb3, 0xb3, 0xb3, 0xb3, 0xb4, 0xb4, 0xb4,
2845 0xb4, 0xb6, 0xb6, 0xb6, 0xb6, 0xb6, 0xb7, 0xb7,
2846 0xb7, 0xb7, 0xb7, 0xb8, 0xb8, 0xb8, 0xb8, 0xb9,
2847 0xb9, 0xb9, 0xb9, 0xb9, 0xba, 0xba, 0xba, 0xba,
2848 0xba, 0xbc, 0xbc, 0xbc, 0xbc, 0xbc, 0xbd, 0xbd,
2849 0xbd, 0xbd, 0xbd, 0xbe, 0xbe, 0xbe, 0xbe, 0xbe,
2850 0xbf, 0xbf, 0xbf, 0xbf, 0xbf, 0xc0, 0xc0, 0xc0,
2851 0xc0, 0xc0, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc3,
2852 0xc3, 0xc3, 0xc3, 0xc3, 0xc4, 0xc4, 0xc4, 0xc4,
2853 0xc4, 0xc5, 0xc5, 0xc5, 0xc5, 0xc5, 0xc6, 0xc6,
2854 0xc6, 0xc6, 0xc6, 0xc7, 0xc7, 0xc7, 0xc7, 0xc7,
2855 0xc7, 0xc9, 0xc9, 0xc9, 0xc9, 0xc9, 0xca, 0xca,
2856 0xca, 0xca, 0xca, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb,
2857 0xcb, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcd, 0xcd,
2858 0xcd, 0xcd, 0xcd, 0xcd, 0xce, 0xce, 0xce, 0xce,
2859 0xce, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xd0,
2860 0xd0, 0xd0, 0xd0, 0xd0, 0xd1, 0xd1, 0xd1, 0xd1,
2861 0xd1, 0xd1, 0xd3, 0xd3, 0xd3, 0xd3, 0xd3, 0xd4,
2862 0xd4, 0xd4, 0xd4, 0xd4, 0xd4, 0xd6, 0xd6, 0xd6,
2863 0xd6, 0xd6, 0xd6, 0xd7, 0xd7, 0xd7, 0xd7, 0xd7,
2864 0xd8, 0xd8, 0xd8, 0xd8, 0xd8, 0xd8, 0xd9, 0xd9,
2865 0xd9, 0xd9, 0xd9, 0xd9, 0xda, 0xda, 0xda, 0xda,
2866 0xda, 0xdb, 0xdb, 0xdb, 0xdb, 0xdb, 0xdb, 0xdd,
2867 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xde, 0xde, 0xde,
2868 0xde, 0xde, 0xde, 0xdf, 0xdf, 0xdf, 0xdf, 0xdf,
2869 0xdf, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe1,
2870 0xe1, 0xe1, 0xe1, 0xe1, 0xe1, 0xe2, 0xe2, 0xe2,
2871 0xe2, 0xe2, 0xe2, 0xe3, 0xe3, 0xe3, 0xe3, 0xe3,
2872 0xe3, 0xe4, 0xe4, 0xe4, 0xe4, 0xe4, 0xe4, 0xe5,
2873 0xe5, 0xe5, 0xe5, 0xe5, 0xe5, 0xe6, 0xe6, 0xe6,
2874 0xe6, 0xe6, 0xe6, 0xe7, 0xe7, 0xe7, 0xe7, 0xe7,
2875 0xe7, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe9,
2876 0xe9, 0xe9, 0xe9, 0xe9, 0xe9, 0xeb, 0xeb, 0xeb,
2877 0xeb, 0xeb, 0xeb, 0xec, 0xec, 0xec, 0xec, 0xec,
2878 0xec, 0xed, 0xed, 0xed, 0xed, 0xed, 0xed, 0xee,
2879 0xee, 0xee, 0xee, 0xee, 0xee, 0xef, 0xef, 0xef,
2880 0xef, 0xef, 0xef, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0,
2881 0xf0, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf3,
2882 0xf3, 0xf3, 0xf3, 0xf3, 0xf3, 0xf4, 0xf4, 0xf4,
2883 0xf4, 0xf4, 0xf4, 0xf5, 0xf5, 0xf5, 0xf5, 0xf5,
2884 0xf5, 0xf5, 0xf6, 0xf6, 0xf6, 0xf6, 0xf6, 0xf6,
2885 0xf7, 0xf7, 0xf7, 0xf7, 0xf7, 0xf7, 0xf8, 0xf8,
2886 0xf8, 0xf8, 0xf8, 0xf8, 0xf9, 0xf9, 0xf9, 0xf9,
2887 0xf9, 0xf9, 0xfa, 0xfa, 0xfa, 0xfa, 0xfa, 0xfa,
2888 0xfa, 0xfa, 0xfa, 0xfa, 0xfa, 0xfa, 0xfb, 0xfb,
2889 0xfb, 0xfb, 0xfb, 0xfb, 0xfc, 0xfc, 0xfc, 0xfc,
2890 0xfc, 0xfc, 0xfc, 0xfc, 0xfc, 0xfc, 0xfc, 0xfc,
2891 0xfd, 0xfd, 0xfd, 0xfd, 0xfd, 0xfd, 0xfe, 0xfe,
2892 0xfe, 0xfe, 0xfe, 0xfe, 0xff, 0xff, 0xff, 0xff,
2893 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2894 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2895 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2896 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2897 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2898 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2899 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2900 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2901 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2902 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2903 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2904 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2905 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2906 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2907 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2908 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2909 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2910 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2911 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2912 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2913 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2914 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2915 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2916 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2917 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2918 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2919 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2920 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2921 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2922 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2923 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2924 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2925 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2926 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2927 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2928 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2929 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2930 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
2931 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff},
2932 {0x07, 0x08, 0x0a, 0x0c, 0x0e, 0x10, 0x12, 0x14,
2933 0x16, 0x17, 0x18, 0x1b, 0x1c, 0x1e, 0x1f, 0x20,
2934 0x23, 0x25, 0x26, 0x27, 0x28, 0x29, 0x2b, 0x2d,
2935 0x2f, 0x30, 0x31, 0x33, 0x34, 0x35, 0x37, 0x38,
2936 0x39, 0x3a, 0x3b, 0x3b, 0x3c, 0x3d, 0x3f, 0x40,
2937 0x42, 0x43, 0x44, 0x44, 0x45, 0x47, 0x48, 0x49,
2938 0x4a, 0x4a, 0x4b, 0x4c, 0x4d, 0x4d, 0x4f, 0x50,
2939 0x52, 0x52, 0x53, 0x54, 0x55, 0x55, 0x56, 0x58,
2940 0x58, 0x59, 0x5a, 0x5b, 0x5b, 0x5c, 0x5e, 0x5e,
2941 0x5f, 0x5f, 0x60, 0x61, 0x61, 0x62, 0x63, 0x63,
2942 0x65, 0x65, 0x66, 0x67, 0x67, 0x68, 0x68, 0x69,
2943 0x6a, 0x6a, 0x6c, 0x6c, 0x6d, 0x6d, 0x6e, 0x6e,
2944 0x6f, 0x70, 0x70, 0x71, 0x71, 0x73, 0x73, 0x74,
2945 0x74, 0x75, 0x75, 0x77, 0x77, 0x78, 0x78, 0x79,
2946 0x79, 0x7a, 0x7a, 0x7b, 0x7b, 0x7c, 0x7c, 0x7d,
2947 0x7d, 0x7f, 0x7f, 0x80, 0x80, 0x81, 0x81, 0x81,
2948 0x82, 0x82, 0x84, 0x84, 0x85, 0x85, 0x86, 0x86,
2949 0x88, 0x88, 0x88, 0x89, 0x89, 0x8a, 0x8a, 0x8b,
2950 0x8b, 0x8b, 0x8d, 0x8d, 0x8e, 0x8e, 0x8e, 0x8f,
2951 0x8f, 0x90, 0x90, 0x90, 0x91, 0x91, 0x92, 0x92,
2952 0x92, 0x93, 0x93, 0x94, 0x94, 0x94, 0x96, 0x96,
2953 0x96, 0x97, 0x97, 0x98, 0x98, 0x98, 0x99, 0x99,
2954 0x99, 0x9a, 0x9a, 0x9b, 0x9b, 0x9b, 0x9c, 0x9c,
2955 0x9c, 0x9d, 0x9d, 0x9d, 0x9e, 0x9e, 0x9e, 0xa0,
2956 0xa0, 0xa1, 0xa1, 0xa1, 0xa2, 0xa2, 0xa2, 0xa3,
2957 0xa3, 0xa3, 0xa4, 0xa4, 0xa4, 0xa5, 0xa5, 0xa5,
2958 0xa6, 0xa6, 0xa6, 0xa8, 0xa8, 0xa8, 0xa8, 0xa9,
2959 0xa9, 0xa9, 0xab, 0xab, 0xab, 0xac, 0xac, 0xac,
2960 0xad, 0xad, 0xad, 0xae, 0xae, 0xae, 0xaf, 0xaf,
2961 0xaf, 0xaf, 0xb0, 0xb0, 0xb0, 0xb1, 0xb1, 0xb1,
2962 0xb2, 0xb2, 0xb2, 0xb2, 0xb3, 0xb3, 0xb3, 0xb4,
2963 0xb4, 0xb4, 0xb4, 0xb6, 0xb6, 0xb6, 0xb7, 0xb7,
2964 0xb7, 0xb7, 0xb8, 0xb8, 0xb8, 0xb9, 0xb9, 0xb9,
2965 0xb9, 0xba, 0xba, 0xba, 0xbc, 0xbc, 0xbc, 0xbc,
2966 0xbd, 0xbd, 0xbd, 0xbd, 0xbe, 0xbe, 0xbe, 0xbf,
2967 0xbf, 0xbf, 0xbf, 0xc0, 0xc0, 0xc0, 0xc0, 0xc2,
2968 0xc2, 0xc2, 0xc2, 0xc3, 0xc3, 0xc3, 0xc3, 0xc4,
2969 0xc4, 0xc4, 0xc5, 0xc5, 0xc5, 0xc5, 0xc6, 0xc6,
2970 0xc6, 0xc6, 0xc7, 0xc7, 0xc7, 0xc7, 0xc9, 0xc9,
2971 0xc9, 0xc9, 0xca, 0xca, 0xca, 0xca, 0xcb, 0xcb,
2972 0xcb, 0xcb, 0xcc, 0xcc, 0xcc, 0xcc, 0xcd, 0xcd,
2973 0xcd, 0xcd, 0xcd, 0xce, 0xce, 0xce, 0xce, 0xcf,
2974 0xcf, 0xcf, 0xcf, 0xd0, 0xd0, 0xd0, 0xd0, 0xd1,
2975 0xd1, 0xd1, 0xd1, 0xd3, 0xd3, 0xd3, 0xd3, 0xd3,
2976 0xd4, 0xd4, 0xd4, 0xd4, 0xd6, 0xd6, 0xd6, 0xd6,
2977 0xd7, 0xd7, 0xd7, 0xd7, 0xd7, 0xd8, 0xd8, 0xd8,
2978 0xd8, 0xd9, 0xd9, 0xd9, 0xd9, 0xd9, 0xda, 0xda,
2979 0xda, 0xda, 0xdb, 0xdb, 0xdb, 0xdb, 0xdb, 0xdd,
2980 0xdd, 0xdd, 0xdd, 0xde, 0xde, 0xde, 0xde, 0xde,
2981 0xdf, 0xdf, 0xdf, 0xdf, 0xe0, 0xe0, 0xe0, 0xe0,
2982 0xe0, 0xe1, 0xe1, 0xe1, 0xe1, 0xe1, 0xe2, 0xe2,
2983 0xe2, 0xe2, 0xe3, 0xe3, 0xe3, 0xe3, 0xe3, 0xe4,
2984 0xe4, 0xe4, 0xe4, 0xe4, 0xe5, 0xe5, 0xe5, 0xe5,
2985 0xe6, 0xe6, 0xe6, 0xe6, 0xe6, 0xe7, 0xe7, 0xe7,
2986 0xe7, 0xe7, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe9,
2987 0xe9, 0xe9, 0xe9, 0xe9, 0xeb, 0xeb, 0xeb, 0xeb,
2988 0xeb, 0xec, 0xec, 0xec, 0xec, 0xec, 0xed, 0xed,
2989 0xed, 0xed, 0xed, 0xee, 0xee, 0xee, 0xee, 0xee,
2990 0xef, 0xef, 0xef, 0xef, 0xef, 0xf0, 0xf0, 0xf0,
2991 0xf0, 0xf0, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf3,
2992 0xf3, 0xf3, 0xf3, 0xf3, 0xf4, 0xf4, 0xf4, 0xf4,
2993 0xf4, 0xf5, 0xf5, 0xf5, 0xf5, 0xf5, 0xf6, 0xf6,
2994 0xf6, 0xf6, 0xf6, 0xf7, 0xf7, 0xf7, 0xf7, 0xf7,
2995 0xf8, 0xf8, 0xf8, 0xf8, 0xf8, 0xf9, 0xf9, 0xf9,
2996 0xf9, 0xf9, 0xf9, 0xfa, 0xfa, 0xfa, 0xfa, 0xfa,
2997 0xfa, 0xfa, 0xfa, 0xfa, 0xfa, 0xfb, 0xfb, 0xfb,
2998 0xfb, 0xfb, 0xfc, 0xfc, 0xfc, 0xfc, 0xfc, 0xfc,
2999 0xfc, 0xfc, 0xfc, 0xfc, 0xfc, 0xfd, 0xfd, 0xfd,
3000 0xfd, 0xfd, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xff,
3001 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3002 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3003 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3004 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3005 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3006 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3007 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3008 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3009 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3010 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3011 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3012 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3013 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3014 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3015 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3016 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3017 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3018 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3019 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3020 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3021 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3022 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3023 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3024 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3025 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3026 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3027 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3028 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3029 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3030 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3031 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3032 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3033 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3034 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3035 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3036 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3037 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3038 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3039 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3040 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3041 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3042 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3043 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3044 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3045 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3046 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3047 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3048 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3049 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3050 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3051 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3052 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3053 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3054 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3055 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3056 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3057 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3058 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3059 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff}
3060 },
3061 { /* gamma 4 - from tp6800 + soi763a */
3062 {0x11, 0x14, 0x15, 0x17, 0x1a, 0x1b, 0x1e, 0x1f,
3063 0x22, 0x23, 0x25, 0x27, 0x28, 0x2b, 0x2c, 0x2d,
3064 0x2f, 0x31, 0x33, 0x34, 0x35, 0x38, 0x39, 0x3a,
3065 0x3b, 0x3c, 0x3d, 0x40, 0x42, 0x43, 0x44, 0x45,
3066 0x47, 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4f,
3067 0x50, 0x52, 0x53, 0x53, 0x54, 0x55, 0x56, 0x58,
3068 0x59, 0x5a, 0x5b, 0x5b, 0x5c, 0x5e, 0x5f, 0x60,
3069 0x61, 0x61, 0x62, 0x63, 0x65, 0x65, 0x66, 0x67,
3070 0x68, 0x68, 0x69, 0x6a, 0x6c, 0x6c, 0x6d, 0x6e,
3071 0x6f, 0x6f, 0x70, 0x71, 0x71, 0x73, 0x74, 0x74,
3072 0x75, 0x77, 0x77, 0x78, 0x79, 0x79, 0x7a, 0x7a,
3073 0x7b, 0x7c, 0x7c, 0x7d, 0x7f, 0x7f, 0x80, 0x80,
3074 0x81, 0x81, 0x82, 0x84, 0x84, 0x85, 0x85, 0x86,
3075 0x86, 0x88, 0x89, 0x89, 0x8a, 0x8a, 0x8b, 0x8b,
3076 0x8d, 0x8d, 0x8e, 0x8e, 0x8f, 0x90, 0x90, 0x91,
3077 0x91, 0x92, 0x92, 0x93, 0x93, 0x94, 0x94, 0x96,
3078 0x96, 0x97, 0x97, 0x98, 0x98, 0x98, 0x99, 0x99,
3079 0x9a, 0x9a, 0x9b, 0x9b, 0x9c, 0x9c, 0x9d, 0x9d,
3080 0x9e, 0x9e, 0xa0, 0xa0, 0xa0, 0xa1, 0xa1, 0xa2,
3081 0xa2, 0xa3, 0xa3, 0xa3, 0xa4, 0xa4, 0xa5, 0xa5,
3082 0xa6, 0xa6, 0xa6, 0xa8, 0xa8, 0xa9, 0xa9, 0xab,
3083 0xab, 0xab, 0xac, 0xac, 0xad, 0xad, 0xad, 0xae,
3084 0xae, 0xaf, 0xaf, 0xaf, 0xb0, 0xb0, 0xb1, 0xb1,
3085 0xb1, 0xb2, 0xb2, 0xb2, 0xb3, 0xb3, 0xb4, 0xb4,
3086 0xb4, 0xb6, 0xb6, 0xb6, 0xb7, 0xb7, 0xb8, 0xb8,
3087 0xb8, 0xb9, 0xb9, 0xb9, 0xba, 0xba, 0xba, 0xbc,
3088 0xbc, 0xbd, 0xbd, 0xbd, 0xbe, 0xbe, 0xbe, 0xbf,
3089 0xbf, 0xbf, 0xc0, 0xc0, 0xc0, 0xc2, 0xc2, 0xc2,
3090 0xc3, 0xc3, 0xc3, 0xc4, 0xc4, 0xc4, 0xc5, 0xc5,
3091 0xc5, 0xc6, 0xc6, 0xc6, 0xc7, 0xc7, 0xc7, 0xc9,
3092 0xc9, 0xc9, 0xca, 0xca, 0xca, 0xcb, 0xcb, 0xcb,
3093 0xcb, 0xcc, 0xcc, 0xcc, 0xcd, 0xcd, 0xcd, 0xce,
3094 0xce, 0xce, 0xcf, 0xcf, 0xcf, 0xcf, 0xd0, 0xd0,
3095 0xd0, 0xd1, 0xd1, 0xd1, 0xd3, 0xd3, 0xd3, 0xd3,
3096 0xd4, 0xd4, 0xd4, 0xd6, 0xd6, 0xd6, 0xd7, 0xd7,
3097 0xd7, 0xd7, 0xd8, 0xd8, 0xd8, 0xd9, 0xd9, 0xd9,
3098 0xd9, 0xda, 0xda, 0xda, 0xdb, 0xdb, 0xdb, 0xdb,
3099 0xdd, 0xdd, 0xdd, 0xde, 0xde, 0xde, 0xde, 0xdf,
3100 0xdf, 0xdf, 0xdf, 0xe0, 0xe0, 0xe0, 0xe1, 0xe1,
3101 0xe1, 0xe1, 0xe2, 0xe2, 0xe2, 0xe2, 0xe3, 0xe3,
3102 0xe3, 0xe3, 0xe4, 0xe4, 0xe4, 0xe5, 0xe5, 0xe5,
3103 0xe5, 0xe6, 0xe6, 0xe6, 0xe6, 0xe7, 0xe7, 0xe7,
3104 0xe7, 0xe8, 0xe8, 0xe8, 0xe8, 0xe9, 0xe9, 0xe9,
3105 0xe9, 0xeb, 0xeb, 0xeb, 0xeb, 0xec, 0xec, 0xec,
3106 0xec, 0xed, 0xed, 0xed, 0xed, 0xee, 0xee, 0xee,
3107 0xee, 0xef, 0xef, 0xef, 0xef, 0xf0, 0xf0, 0xf0,
3108 0xf0, 0xf1, 0xf1, 0xf1, 0xf1, 0xf3, 0xf3, 0xf3,
3109 0xf3, 0xf4, 0xf4, 0xf4, 0xf4, 0xf5, 0xf5, 0xf5,
3110 0xf5, 0xf6, 0xf6, 0xf6, 0xf6, 0xf6, 0xf7, 0xf7,
3111 0xf7, 0xf7, 0xf8, 0xf8, 0xf8, 0xf8, 0xf9, 0xf9,
3112 0xf9, 0xf9, 0xfa, 0xf9, 0xfa, 0xfa, 0xfa, 0xfa,
3113 0xfa, 0xfa, 0xfa, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3114 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3115 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3116 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3117 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3118 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3119 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3120 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3121 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3122 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3123 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3124 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3125 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3126 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3127 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3128 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3129 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3130 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3131 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3132 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3133 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3134 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3135 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3136 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3137 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3138 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3139 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3140 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3141 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3142 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3143 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3144 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3145 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3146 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3147 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3148 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3149 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3150 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3151 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3152 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3153 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3154 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3155 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3156 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3157 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3158 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3159 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3160 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3161 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3162 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3163 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3164 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3165 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3166 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3167 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3168 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3169 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3170 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3171 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3172 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3173 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3174 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3175 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3176 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3177 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3178 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3179 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3180 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3181 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3182 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3183 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3184 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3185 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3186 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3187 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3188 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3189 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb},
3190 {0x08, 0x0a, 0x0c, 0x0e, 0x10, 0x11, 0x14, 0x15,
3191 0x16, 0x17, 0x1a, 0x1b, 0x1c, 0x1e, 0x1f, 0x20,
3192 0x23, 0x25, 0x26, 0x27, 0x28, 0x29, 0x2b, 0x2c,
3193 0x2d, 0x2f, 0x30, 0x31, 0x33, 0x34, 0x34, 0x35,
3194 0x37, 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3c, 0x3d,
3195 0x3f, 0x40, 0x42, 0x42, 0x43, 0x44, 0x45, 0x45,
3196 0x47, 0x48, 0x49, 0x49, 0x4a, 0x4b, 0x4b, 0x4c,
3197 0x4d, 0x4f, 0x4f, 0x50, 0x52, 0x52, 0x53, 0x54,
3198 0x54, 0x55, 0x55, 0x56, 0x58, 0x58, 0x59, 0x5a,
3199 0x5a, 0x5b, 0x5b, 0x5c, 0x5e, 0x5e, 0x5f, 0x5f,
3200 0x60, 0x60, 0x61, 0x61, 0x62, 0x63, 0x63, 0x65,
3201 0x65, 0x66, 0x66, 0x67, 0x67, 0x68, 0x68, 0x69,
3202 0x69, 0x6a, 0x6a, 0x6c, 0x6c, 0x6d, 0x6d, 0x6e,
3203 0x6e, 0x6f, 0x6f, 0x70, 0x70, 0x71, 0x71, 0x73,
3204 0x73, 0x74, 0x74, 0x74, 0x75, 0x75, 0x77, 0x77,
3205 0x78, 0x78, 0x79, 0x79, 0x79, 0x7a, 0x7a, 0x7b,
3206 0x7b, 0x7c, 0x7c, 0x7c, 0x7d, 0x7d, 0x7f, 0x7f,
3207 0x7f, 0x80, 0x80, 0x81, 0x81, 0x81, 0x82, 0x82,
3208 0x84, 0x84, 0x84, 0x85, 0x85, 0x86, 0x86, 0x86,
3209 0x88, 0x88, 0x88, 0x89, 0x89, 0x8a, 0x8a, 0x8a,
3210 0x8b, 0x8b, 0x8b, 0x8d, 0x8d, 0x8d, 0x8e, 0x8e,
3211 0x8e, 0x8f, 0x8f, 0x90, 0x90, 0x90, 0x91, 0x91,
3212 0x91, 0x92, 0x92, 0x92, 0x93, 0x93, 0x93, 0x94,
3213 0x94, 0x94, 0x96, 0x96, 0x96, 0x97, 0x97, 0x97,
3214 0x98, 0x98, 0x98, 0x98, 0x99, 0x99, 0x99, 0x9a,
3215 0x9a, 0x9a, 0x9b, 0x9b, 0x9b, 0x9c, 0x9c, 0x9c,
3216 0x9c, 0x9d, 0x9d, 0x9d, 0x9e, 0x9e, 0x9e, 0xa0,
3217 0xa0, 0xa0, 0xa0, 0xa1, 0xa1, 0xa1, 0xa2, 0xa2,
3218 0xa2, 0xa3, 0xa3, 0xa3, 0xa3, 0xa4, 0xa4, 0xa4,
3219 0xa5, 0xa5, 0xa5, 0xa5, 0xa6, 0xa6, 0xa6, 0xa6,
3220 0xa8, 0xa8, 0xa8, 0xa9, 0xa9, 0xa9, 0xa9, 0xab,
3221 0xaa, 0xab, 0xab, 0xac, 0xac, 0xac, 0xad, 0xad,
3222 0xad, 0xad, 0xae, 0xae, 0xae, 0xae, 0xaf, 0xaf,
3223 0xaf, 0xaf, 0xb0, 0xb0, 0xb0, 0xb0, 0xb1, 0xb1,
3224 0xb1, 0xb1, 0xb2, 0xb2, 0xb2, 0xb2, 0xb3, 0xb3,
3225 0xb3, 0xb3, 0xb4, 0xb4, 0xb4, 0xb4, 0xb6, 0xb6,
3226 0xb6, 0xb6, 0xb7, 0xb7, 0xb7, 0xb7, 0xb8, 0xb8,
3227 0xb8, 0xb8, 0xb9, 0xb9, 0xb9, 0xb9, 0xba, 0xba,
3228 0xba, 0xba, 0xba, 0xbc, 0xbc, 0xbc, 0xbc, 0xbd,
3229 0xbd, 0xbd, 0xbd, 0xbe, 0xbe, 0xbe, 0xbe, 0xbe,
3230 0xbf, 0xbf, 0xbf, 0xbf, 0xc0, 0xc0, 0xc0, 0xc0,
3231 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc3, 0xc3, 0xc3,
3232 0xc3, 0xc4, 0xc4, 0xc4, 0xc4, 0xc4, 0xc5, 0xc5,
3233 0xc5, 0xc5, 0xc6, 0xc6, 0xc6, 0xc6, 0xc6, 0xc7,
3234 0xc7, 0xc7, 0xc7, 0xc7, 0xc9, 0xc9, 0xc9, 0xc9,
3235 0xca, 0xca, 0xca, 0xca, 0xca, 0xcb, 0xcb, 0xcb,
3236 0xcb, 0xcb, 0xcc, 0xcc, 0xcc, 0xcc, 0xcc, 0xcd,
3237 0xcd, 0xcd, 0xcd, 0xcd, 0xce, 0xce, 0xce, 0xce,
3238 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xd0, 0xd0, 0xd0,
3239 0xd0, 0xd0, 0xd1, 0xd1, 0xd1, 0xd1, 0xd1, 0xd3,
3240 0xd3, 0xd3, 0xd3, 0xd3, 0xd4, 0xd4, 0xd4, 0xd4,
3241 0xd4, 0xd6, 0xd6, 0xd6, 0xd6, 0xd6, 0xd7, 0xd7,
3242 0xd7, 0xd7, 0xd7, 0xd8, 0xd8, 0xd8, 0xd8, 0xd8,
3243 0xd8, 0xd9, 0xd9, 0xd9, 0xd9, 0xd9, 0xda, 0xda,
3244 0xda, 0xda, 0xda, 0xdb, 0xdb, 0xdb, 0xdb, 0xdb,
3245 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xde, 0xde, 0xde,
3246 0xde, 0xde, 0xde, 0xdf, 0xdf, 0xdf, 0xdf, 0xdf,
3247 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe1, 0xe1, 0xe1,
3248 0xe1, 0xe1, 0xe1, 0xe2, 0xe2, 0xe2, 0xe2, 0xe2,
3249 0xe3, 0xe3, 0xe3, 0xe3, 0xe3, 0xe3, 0xe4, 0xe4,
3250 0xe4, 0xe4, 0xe4, 0xe5, 0xe5, 0xe5, 0xe5, 0xe5,
3251 0xe5, 0xe6, 0xe6, 0xe6, 0xe6, 0xe6, 0xe7, 0xe7,
3252 0xe7, 0xe7, 0xe7, 0xe7, 0xe8, 0xe8, 0xe8, 0xe8,
3253 0xe8, 0xe9, 0xe9, 0xe9, 0xe9, 0xe9, 0xe9, 0xeb,
3254 0xeb, 0xeb, 0xeb, 0xeb, 0xec, 0xec, 0xec, 0xec,
3255 0xec, 0xec, 0xed, 0xed, 0xed, 0xed, 0xed, 0xed,
3256 0xee, 0xee, 0xee, 0xee, 0xee, 0xef, 0xef, 0xef,
3257 0xef, 0xef, 0xef, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0,
3258 0xf0, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf3,
3259 0xf3, 0xf3, 0xf3, 0xf3, 0xf4, 0xf4, 0xf4, 0xf4,
3260 0xf4, 0xf4, 0xf5, 0xf5, 0xf5, 0xf5, 0xf5, 0xf5,
3261 0xf6, 0xf6, 0xf6, 0xf6, 0xf6, 0xf6, 0xf7, 0xf7,
3262 0xf7, 0xf7, 0xf7, 0xf8, 0xf8, 0xf8, 0xf8, 0xf8,
3263 0xf8, 0xf9, 0xf9, 0xf9, 0xf9, 0xf9, 0xf9, 0xfa,
3264 0xfa, 0xfa, 0xfa, 0xfa, 0xfa, 0xfa, 0xfa, 0xfa,
3265 0xfa, 0xfa, 0xfa, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3266 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3267 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3268 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3269 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3270 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3271 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3272 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3273 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3274 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3275 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3276 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3277 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3278 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3279 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3280 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3281 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3282 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3283 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3284 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3285 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3286 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3287 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3288 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3289 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3290 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3291 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3292 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3293 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3294 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3295 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3296 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3297 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3298 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3299 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3300 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3301 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3302 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3303 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3304 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3305 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3306 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3307 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3308 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3309 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3310 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3311 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3312 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3313 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3314 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3315 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3316 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3317 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb},
3318 {0x0d, 0x10, 0x11, 0x14, 0x15, 0x17, 0x18, 0x1b,
3319 0x1c, 0x1e, 0x20, 0x22, 0x23, 0x26, 0x27, 0x28,
3320 0x29, 0x2b, 0x2d, 0x2f, 0x30, 0x31, 0x33, 0x34,
3321 0x35, 0x37, 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d,
3322 0x3f, 0x40, 0x42, 0x43, 0x44, 0x45, 0x47, 0x48,
3323 0x49, 0x4a, 0x4b, 0x4b, 0x4c, 0x4d, 0x4f, 0x50,
3324 0x52, 0x52, 0x53, 0x54, 0x55, 0x56, 0x56, 0x58,
3325 0x59, 0x5a, 0x5a, 0x5b, 0x5c, 0x5e, 0x5e, 0x5f,
3326 0x60, 0x60, 0x61, 0x62, 0x62, 0x63, 0x65, 0x65,
3327 0x66, 0x67, 0x67, 0x68, 0x69, 0x69, 0x6a, 0x6c,
3328 0x6c, 0x6d, 0x6d, 0x6e, 0x6f, 0x6f, 0x70, 0x70,
3329 0x71, 0x73, 0x73, 0x74, 0x74, 0x75, 0x75, 0x77,
3330 0x78, 0x78, 0x79, 0x79, 0x7a, 0x7a, 0x7b, 0x7b,
3331 0x7c, 0x7c, 0x7d, 0x7d, 0x7f, 0x7f, 0x80, 0x80,
3332 0x81, 0x81, 0x82, 0x82, 0x84, 0x84, 0x85, 0x85,
3333 0x86, 0x86, 0x88, 0x88, 0x89, 0x89, 0x8a, 0x8a,
3334 0x8b, 0x8b, 0x8d, 0x8d, 0x8d, 0x8e, 0x8e, 0x8f,
3335 0x8f, 0x90, 0x90, 0x91, 0x91, 0x91, 0x92, 0x92,
3336 0x93, 0x93, 0x94, 0x94, 0x94, 0x96, 0x96, 0x97,
3337 0x97, 0x98, 0x98, 0x98, 0x99, 0x99, 0x9a, 0x9a,
3338 0x9a, 0x9b, 0x9b, 0x9c, 0x9c, 0x9c, 0x9d, 0x9d,
3339 0x9d, 0x9e, 0x9e, 0xa0, 0xa0, 0xa0, 0xa1, 0xa1,
3340 0xa1, 0xa2, 0xa2, 0xa3, 0xa3, 0xa3, 0xa4, 0xa4,
3341 0xa4, 0xa5, 0xa5, 0xa5, 0xa6, 0xa6, 0xa8, 0xa8,
3342 0xa8, 0xa9, 0xa9, 0xa9, 0xab, 0xab, 0xab, 0xac,
3343 0xac, 0xac, 0xad, 0xad, 0xad, 0xae, 0xae, 0xae,
3344 0xaf, 0xaf, 0xaf, 0xb0, 0xb0, 0xb0, 0xb1, 0xb1,
3345 0xb1, 0xb2, 0xb2, 0xb2, 0xb3, 0xb3, 0xb3, 0xb4,
3346 0xb4, 0xb4, 0xb6, 0xb6, 0xb6, 0xb6, 0xb7, 0xb7,
3347 0xb7, 0xb8, 0xb8, 0xb8, 0xb9, 0xb9, 0xb9, 0xba,
3348 0xba, 0xba, 0xba, 0xbc, 0xbc, 0xbc, 0xbd, 0xbd,
3349 0xbd, 0xbe, 0xbe, 0xbe, 0xbe, 0xbf, 0xbf, 0xbf,
3350 0xc0, 0xc0, 0xc0, 0xc0, 0xc2, 0xc2, 0xc2, 0xc3,
3351 0xc3, 0xc3, 0xc3, 0xc4, 0xc4, 0xc4, 0xc5, 0xc5,
3352 0xc5, 0xc5, 0xc6, 0xc6, 0xc6, 0xc6, 0xc7, 0xc7,
3353 0xc7, 0xc9, 0xc9, 0xc9, 0xc9, 0xca, 0xca, 0xca,
3354 0xca, 0xcb, 0xcb, 0xcb, 0xcc, 0xcc, 0xcc, 0xcc,
3355 0xcd, 0xcd, 0xcd, 0xcd, 0xce, 0xce, 0xce, 0xce,
3356 0xcf, 0xcf, 0xcf, 0xcf, 0xd0, 0xd0, 0xd0, 0xd0,
3357 0xd1, 0xd1, 0xd1, 0xd1, 0xd3, 0xd3, 0xd3, 0xd3,
3358 0xd4, 0xd4, 0xd4, 0xd4, 0xd6, 0xd6, 0xd6, 0xd6,
3359 0xd7, 0xd7, 0xd7, 0xd7, 0xd8, 0xd8, 0xd8, 0xd8,
3360 0xd9, 0xd9, 0xd9, 0xd9, 0xda, 0xda, 0xda, 0xda,
3361 0xdb, 0xdb, 0xdb, 0xdb, 0xdd, 0xdd, 0xdd, 0xdd,
3362 0xdd, 0xde, 0xde, 0xde, 0xde, 0xdf, 0xdf, 0xdf,
3363 0xdf, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe1, 0xe1,
3364 0xe1, 0xe1, 0xe2, 0xe2, 0xe2, 0xe2, 0xe3, 0xe3,
3365 0xe3, 0xe3, 0xe3, 0xe4, 0xe4, 0xe4, 0xe4, 0xe5,
3366 0xe5, 0xe5, 0xe5, 0xe5, 0xe6, 0xe6, 0xe6, 0xe6,
3367 0xe7, 0xe7, 0xe7, 0xe7, 0xe7, 0xe8, 0xe8, 0xe8,
3368 0xe8, 0xe9, 0xe9, 0xe9, 0xe9, 0xe9, 0xeb, 0xeb,
3369 0xeb, 0xeb, 0xec, 0xec, 0xec, 0xec, 0xec, 0xed,
3370 0xed, 0xed, 0xed, 0xed, 0xee, 0xee, 0xee, 0xee,
3371 0xef, 0xef, 0xef, 0xef, 0xef, 0xf0, 0xf0, 0xf0,
3372 0xf0, 0xf0, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf3,
3373 0xf3, 0xf3, 0xf3, 0xf4, 0xf4, 0xf4, 0xf4, 0xf4,
3374 0xf5, 0xf5, 0xf5, 0xf5, 0xf5, 0xf6, 0xf6, 0xf6,
3375 0xf6, 0xf6, 0xf7, 0xf7, 0xf7, 0xf7, 0xf7, 0xf8,
3376 0xf8, 0xf8, 0xf8, 0xf8, 0xf9, 0xf9, 0xf9, 0xf9,
3377 0xf9, 0xfa, 0xfa, 0xfa, 0xfa, 0xfa, 0xfa, 0xfa,
3378 0xfa, 0xfa, 0xfa, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3379 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3380 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3381 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3382 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3383 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3384 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3385 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3386 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3387 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3388 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3389 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3390 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3391 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3392 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3393 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3394 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3395 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3396 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3397 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3398 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3399 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3400 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3401 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3402 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3403 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3404 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3405 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3406 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3407 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3408 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3409 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3410 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3411 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3412 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3413 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3414 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3415 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3416 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3417 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3418 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3419 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3420 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3421 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3422 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3423 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3424 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3425 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3426 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3427 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3428 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3429 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3430 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3431 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3432 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3433 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3434 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3435 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3436 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3437 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3438 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3439 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3440 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3441 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3442 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3443 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3444 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb,
3445 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb}
3446 },
3447 { /* gamma 5 */
3448 {0x16, 0x18, 0x19, 0x1b, 0x1d, 0x1e, 0x20, 0x21,
3449 0x23, 0x24, 0x25, 0x27, 0x28, 0x2a, 0x2b, 0x2c,
3450 0x2d, 0x2f, 0x30, 0x31, 0x32, 0x34, 0x35, 0x36,
3451 0x37, 0x38, 0x39, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f,
3452 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47,
3453 0x48, 0x49, 0x4a, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e,
3454 0x4f, 0x50, 0x51, 0x51, 0x52, 0x53, 0x54, 0x55,
3455 0x56, 0x56, 0x57, 0x58, 0x59, 0x59, 0x5a, 0x5b,
3456 0x5c, 0x5c, 0x5d, 0x5e, 0x5f, 0x5f, 0x60, 0x61,
3457 0x62, 0x62, 0x63, 0x64, 0x64, 0x65, 0x66, 0x66,
3458 0x67, 0x68, 0x68, 0x69, 0x6a, 0x6a, 0x6b, 0x6b,
3459 0x6c, 0x6d, 0x6d, 0x6e, 0x6f, 0x6f, 0x70, 0x70,
3460 0x71, 0x71, 0x72, 0x73, 0x73, 0x74, 0x74, 0x75,
3461 0x75, 0x76, 0x77, 0x77, 0x78, 0x78, 0x79, 0x79,
3462 0x7a, 0x7a, 0x7b, 0x7b, 0x7c, 0x7d, 0x7d, 0x7e,
3463 0x7e, 0x7f, 0x7f, 0x80, 0x80, 0x81, 0x81, 0x82,
3464 0x82, 0x83, 0x83, 0x84, 0x84, 0x84, 0x85, 0x85,
3465 0x86, 0x86, 0x87, 0x87, 0x88, 0x88, 0x89, 0x89,
3466 0x8a, 0x8a, 0x8b, 0x8b, 0x8b, 0x8c, 0x8c, 0x8d,
3467 0x8d, 0x8e, 0x8e, 0x8e, 0x8f, 0x8f, 0x90, 0x90,
3468 0x91, 0x91, 0x91, 0x92, 0x92, 0x93, 0x93, 0x94,
3469 0x94, 0x94, 0x95, 0x95, 0x96, 0x96, 0x96, 0x97,
3470 0x97, 0x98, 0x98, 0x98, 0x99, 0x99, 0x9a, 0x9a,
3471 0x9a, 0x9b, 0x9b, 0x9b, 0x9c, 0x9c, 0x9d, 0x9d,
3472 0x9d, 0x9e, 0x9e, 0x9e, 0x9f, 0x9f, 0xa0, 0xa0,
3473 0xa0, 0xa1, 0xa1, 0xa1, 0xa2, 0xa2, 0xa2, 0xa3,
3474 0xa3, 0xa4, 0xa4, 0xa4, 0xa5, 0xa5, 0xa5, 0xa6,
3475 0xa6, 0xa6, 0xa7, 0xa7, 0xa7, 0xa8, 0xa8, 0xa8,
3476 0xa9, 0xa9, 0xa9, 0xaa, 0xaa, 0xaa, 0xab, 0xab,
3477 0xab, 0xac, 0xac, 0xac, 0xad, 0xad, 0xad, 0xae,
3478 0xae, 0xae, 0xaf, 0xaf, 0xaf, 0xb0, 0xb0, 0xb0,
3479 0xb0, 0xb1, 0xb1, 0xb1, 0xb2, 0xb2, 0xb2, 0xb3,
3480 0xb3, 0xb3, 0xb4, 0xb4, 0xb4, 0xb4, 0xb5, 0xb5,
3481 0xb5, 0xb6, 0xb6, 0xb6, 0xb7, 0xb7, 0xb7, 0xb7,
3482 0xb8, 0xb8, 0xb8, 0xb9, 0xb9, 0xb9, 0xba, 0xba,
3483 0xba, 0xba, 0xbb, 0xbb, 0xbb, 0xbc, 0xbc, 0xbc,
3484 0xbc, 0xbd, 0xbd, 0xbd, 0xbe, 0xbe, 0xbe, 0xbe,
3485 0xbf, 0xbf, 0xbf, 0xc0, 0xc0, 0xc0, 0xc0, 0xc1,
3486 0xc1, 0xc1, 0xc1, 0xc2, 0xc2, 0xc2, 0xc3, 0xc3,
3487 0xc3, 0xc3, 0xc4, 0xc4, 0xc4, 0xc4, 0xc5, 0xc5,
3488 0xc5, 0xc5, 0xc6, 0xc6, 0xc6, 0xc7, 0xc7, 0xc7,
3489 0xc7, 0xc8, 0xc8, 0xc8, 0xc8, 0xc9, 0xc9, 0xc9,
3490 0xc9, 0xca, 0xca, 0xca, 0xca, 0xcb, 0xcb, 0xcb,
3491 0xcb, 0xcc, 0xcc, 0xcc, 0xcc, 0xcd, 0xcd, 0xcd,
3492 0xcd, 0xce, 0xce, 0xce, 0xce, 0xcf, 0xcf, 0xcf,
3493 0xcf, 0xd0, 0xd0, 0xd0, 0xd0, 0xd1, 0xd1, 0xd1,
3494 0xd1, 0xd2, 0xd2, 0xd2, 0xd2, 0xd3, 0xd3, 0xd3,
3495 0xd3, 0xd4, 0xd4, 0xd4, 0xd4, 0xd5, 0xd5, 0xd5,
3496 0xd5, 0xd6, 0xd6, 0xd6, 0xd6, 0xd6, 0xd7, 0xd7,
3497 0xd7, 0xd7, 0xd8, 0xd8, 0xd8, 0xd8, 0xd9, 0xd9,
3498 0xd9, 0xd9, 0xda, 0xda, 0xda, 0xda, 0xda, 0xdb,
3499 0xdb, 0xdb, 0xdb, 0xdc, 0xdc, 0xdc, 0xdc, 0xdd,
3500 0xdd, 0xdd, 0xdd, 0xdd, 0xde, 0xde, 0xde, 0xde,
3501 0xdf, 0xdf, 0xdf, 0xdf, 0xdf, 0xe0, 0xe0, 0xe0,
3502 0xe0, 0xe1, 0xe1, 0xe1, 0xe1, 0xe1, 0xe2, 0xe2,
3503 0xe2, 0xe2, 0xe3, 0xe3, 0xe3, 0xe3, 0xe3, 0xe4,
3504 0xe4, 0xe4, 0xe4, 0xe5, 0xe5, 0xe5, 0xe5, 0xe5,
3505 0xe6, 0xe6, 0xe6, 0xe6, 0xe7, 0xe7, 0xe7, 0xe7,
3506 0xe7, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe9, 0xe9,
3507 0xe9, 0xe9, 0xea, 0xea, 0xea, 0xea, 0xea, 0xeb,
3508 0xeb, 0xeb, 0xeb, 0xeb, 0xec, 0xec, 0xec, 0xec,
3509 0xed, 0xed, 0xed, 0xed, 0xed, 0xee, 0xee, 0xee,
3510 0xee, 0xee, 0xef, 0xef, 0xef, 0xef, 0xef, 0xf0,
3511 0xf0, 0xf0, 0xf0, 0xf1, 0xf1, 0xf1, 0xf1, 0xf1,
3512 0xf2, 0xf2, 0xf2, 0xf2, 0xf2, 0xf3, 0xf3, 0xf3,
3513 0xf3, 0xf3, 0xf4, 0xf4, 0xf4, 0xf4, 0xf4, 0xf5,
3514 0xf5, 0xf5, 0xf5, 0xf5, 0xf6, 0xf6, 0xf6, 0xf6,
3515 0xf7, 0xf7, 0xf7, 0xf7, 0xf7, 0xf8, 0xf8, 0xf8,
3516 0xf8, 0xf8, 0xf9, 0xf9, 0xf9, 0xf9, 0xf9, 0xfa,
3517 0xfa, 0xfa, 0xfa, 0xfa, 0xfb, 0xfb, 0xfb, 0xfb,
3518 0xfb, 0xfc, 0xfc, 0xfc, 0xfc, 0xfc, 0xfd, 0xfd,
3519 0xfd, 0xfd, 0xfd, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe,
3520 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3521 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3522 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3523 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3524 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3525 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3526 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3527 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3528 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3529 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3530 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3531 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3532 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3533 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3534 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3535 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3536 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3537 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3538 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3539 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3540 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3541 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3542 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3543 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3544 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3545 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3546 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3547 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3548 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3549 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3550 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3551 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3552 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3553 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3554 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3555 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3556 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3557 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3558 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3559 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3560 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3561 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3562 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3563 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3564 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3565 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3566 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3567 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3568 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3569 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3570 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3571 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3572 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3573 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3574 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3575 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff},
3576 {0x0f, 0x11, 0x12, 0x14, 0x15, 0x16, 0x18, 0x19,
3577 0x1a, 0x1b, 0x1d, 0x1e, 0x1f, 0x20, 0x21, 0x22,
3578 0x24, 0x25, 0x26, 0x27, 0x28, 0x29, 0x2a, 0x2b,
3579 0x2c, 0x2d, 0x2e, 0x2f, 0x30, 0x31, 0x31, 0x32,
3580 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x38, 0x39,
3581 0x3a, 0x3b, 0x3c, 0x3c, 0x3d, 0x3e, 0x3f, 0x3f,
3582 0x40, 0x41, 0x42, 0x42, 0x43, 0x44, 0x44, 0x45,
3583 0x46, 0x47, 0x47, 0x48, 0x49, 0x49, 0x4a, 0x4b,
3584 0x4b, 0x4c, 0x4c, 0x4d, 0x4e, 0x4e, 0x4f, 0x50,
3585 0x50, 0x51, 0x51, 0x52, 0x53, 0x53, 0x54, 0x54,
3586 0x55, 0x55, 0x56, 0x56, 0x57, 0x58, 0x58, 0x59,
3587 0x59, 0x5a, 0x5a, 0x5b, 0x5b, 0x5c, 0x5c, 0x5d,
3588 0x5d, 0x5e, 0x5e, 0x5f, 0x5f, 0x60, 0x60, 0x61,
3589 0x61, 0x62, 0x62, 0x63, 0x63, 0x64, 0x64, 0x65,
3590 0x65, 0x66, 0x66, 0x66, 0x67, 0x67, 0x68, 0x68,
3591 0x69, 0x69, 0x6a, 0x6a, 0x6a, 0x6b, 0x6b, 0x6c,
3592 0x6c, 0x6d, 0x6d, 0x6d, 0x6e, 0x6e, 0x6f, 0x6f,
3593 0x6f, 0x70, 0x70, 0x71, 0x71, 0x71, 0x72, 0x72,
3594 0x73, 0x73, 0x73, 0x74, 0x74, 0x75, 0x75, 0x75,
3595 0x76, 0x76, 0x76, 0x77, 0x77, 0x78, 0x78, 0x78,
3596 0x79, 0x79, 0x79, 0x7a, 0x7a, 0x7a, 0x7b, 0x7b,
3597 0x7b, 0x7c, 0x7c, 0x7d, 0x7d, 0x7d, 0x7e, 0x7e,
3598 0x7e, 0x7f, 0x7f, 0x7f, 0x80, 0x80, 0x80, 0x81,
3599 0x81, 0x81, 0x82, 0x82, 0x82, 0x83, 0x83, 0x83,
3600 0x84, 0x84, 0x84, 0x84, 0x85, 0x85, 0x85, 0x86,
3601 0x86, 0x86, 0x87, 0x87, 0x87, 0x88, 0x88, 0x88,
3602 0x88, 0x89, 0x89, 0x89, 0x8a, 0x8a, 0x8a, 0x8b,
3603 0x8b, 0x8b, 0x8b, 0x8c, 0x8c, 0x8c, 0x8d, 0x8d,
3604 0x8d, 0x8e, 0x8e, 0x8e, 0x8e, 0x8f, 0x8f, 0x8f,
3605 0x90, 0x90, 0x90, 0x90, 0x91, 0x91, 0x91, 0x91,
3606 0x92, 0x92, 0x92, 0x93, 0x93, 0x93, 0x93, 0x94,
3607 0x94, 0x94, 0x94, 0x95, 0x95, 0x95, 0x96, 0x96,
3608 0x96, 0x96, 0x97, 0x97, 0x97, 0x97, 0x98, 0x98,
3609 0x98, 0x98, 0x99, 0x99, 0x99, 0x99, 0x9a, 0x9a,
3610 0x9a, 0x9a, 0x9b, 0x9b, 0x9b, 0x9b, 0x9c, 0x9c,
3611 0x9c, 0x9c, 0x9d, 0x9d, 0x9d, 0x9d, 0x9e, 0x9e,
3612 0x9e, 0x9e, 0x9f, 0x9f, 0x9f, 0x9f, 0xa0, 0xa0,
3613 0xa0, 0xa0, 0xa1, 0xa1, 0xa1, 0xa1, 0xa2, 0xa2,
3614 0xa2, 0xa2, 0xa2, 0xa3, 0xa3, 0xa3, 0xa3, 0xa4,
3615 0xa4, 0xa4, 0xa4, 0xa5, 0xa5, 0xa5, 0xa5, 0xa5,
3616 0xa6, 0xa6, 0xa6, 0xa6, 0xa7, 0xa7, 0xa7, 0xa7,
3617 0xa8, 0xa8, 0xa8, 0xa8, 0xa8, 0xa9, 0xa9, 0xa9,
3618 0xa9, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xab, 0xab,
3619 0xab, 0xab, 0xac, 0xac, 0xac, 0xac, 0xac, 0xad,
3620 0xad, 0xad, 0xad, 0xad, 0xae, 0xae, 0xae, 0xae,
3621 0xaf, 0xaf, 0xaf, 0xaf, 0xaf, 0xb0, 0xb0, 0xb0,
3622 0xb0, 0xb0, 0xb1, 0xb1, 0xb1, 0xb1, 0xb1, 0xb2,
3623 0xb2, 0xb2, 0xb2, 0xb2, 0xb3, 0xb3, 0xb3, 0xb3,
3624 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb5, 0xb5, 0xb5,
3625 0xb5, 0xb5, 0xb6, 0xb6, 0xb6, 0xb6, 0xb6, 0xb7,
3626 0xb7, 0xb7, 0xb7, 0xb7, 0xb8, 0xb8, 0xb8, 0xb8,
3627 0xb8, 0xb9, 0xb9, 0xb9, 0xb9, 0xb9, 0xba, 0xba,
3628 0xba, 0xba, 0xba, 0xbb, 0xbb, 0xbb, 0xbb, 0xbb,
3629 0xbb, 0xbc, 0xbc, 0xbc, 0xbc, 0xbc, 0xbd, 0xbd,
3630 0xbd, 0xbd, 0xbd, 0xbe, 0xbe, 0xbe, 0xbe, 0xbe,
3631 0xbf, 0xbf, 0xbf, 0xbf, 0xbf, 0xc0, 0xc0, 0xc0,
3632 0xc0, 0xc0, 0xc0, 0xc1, 0xc1, 0xc1, 0xc1, 0xc1,
3633 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc3, 0xc3, 0xc3,
3634 0xc3, 0xc3, 0xc3, 0xc4, 0xc4, 0xc4, 0xc4, 0xc4,
3635 0xc5, 0xc5, 0xc5, 0xc5, 0xc5, 0xc5, 0xc6, 0xc6,
3636 0xc6, 0xc6, 0xc6, 0xc7, 0xc7, 0xc7, 0xc7, 0xc7,
3637 0xc7, 0xc8, 0xc8, 0xc8, 0xc8, 0xc8, 0xc9, 0xc9,
3638 0xc9, 0xc9, 0xc9, 0xc9, 0xca, 0xca, 0xca, 0xca,
3639 0xca, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcc,
3640 0xcc, 0xcc, 0xcc, 0xcc, 0xcd, 0xcd, 0xcd, 0xcd,
3641 0xcd, 0xcd, 0xce, 0xce, 0xce, 0xce, 0xce, 0xce,
3642 0xcf, 0xcf, 0xcf, 0xcf, 0xcf, 0xd0, 0xd0, 0xd0,
3643 0xd0, 0xd0, 0xd0, 0xd1, 0xd1, 0xd1, 0xd1, 0xd1,
3644 0xd1, 0xd2, 0xd2, 0xd2, 0xd2, 0xd2, 0xd2, 0xd3,
3645 0xd3, 0xd3, 0xd3, 0xd3, 0xd4, 0xd4, 0xd4, 0xd4,
3646 0xd4, 0xd4, 0xd5, 0xd5, 0xd5, 0xd5, 0xd5, 0xd5,
3647 0xd6, 0xd6, 0xd6, 0xd6, 0xd6, 0xd6, 0xd7, 0xd7,
3648 0xd7, 0xd7, 0xd7, 0xd8, 0xd8, 0xd8, 0xd8, 0xd8,
3649 0xd8, 0xd9, 0xd9, 0xd9, 0xd9, 0xd9, 0xd9, 0xda,
3650 0xda, 0xda, 0xda, 0xda, 0xda, 0xdb, 0xdb, 0xdb,
3651 0xdb, 0xdb, 0xdb, 0xdc, 0xdc, 0xdc, 0xdc, 0xdc,
3652 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xde, 0xde,
3653 0xde, 0xde, 0xde, 0xde, 0xdf, 0xdf, 0xdf, 0xdf,
3654 0xdf, 0xdf, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0,
3655 0xe1, 0xe1, 0xe1, 0xe1, 0xe1, 0xe1, 0xe2, 0xe2,
3656 0xe2, 0xe2, 0xe2, 0xe2, 0xe3, 0xe3, 0xe3, 0xe3,
3657 0xe3, 0xe4, 0xe4, 0xe4, 0xe4, 0xe4, 0xe4, 0xe5,
3658 0xe5, 0xe5, 0xe5, 0xe5, 0xe5, 0xe6, 0xe6, 0xe6,
3659 0xe6, 0xe6, 0xe6, 0xe7, 0xe7, 0xe7, 0xe7, 0xe7,
3660 0xe7, 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe9, 0xe9,
3661 0xe9, 0xe9, 0xe9, 0xe9, 0xea, 0xea, 0xea, 0xea,
3662 0xea, 0xea, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0xeb,
3663 0xec, 0xec, 0xec, 0xec, 0xec, 0xec, 0xed, 0xed,
3664 0xed, 0xed, 0xed, 0xee, 0xee, 0xee, 0xee, 0xee,
3665 0xee, 0xef, 0xef, 0xef, 0xef, 0xef, 0xef, 0xf0,
3666 0xf0, 0xf0, 0xf0, 0xf0, 0xf1, 0xf1, 0xf1, 0xf1,
3667 0xf1, 0xf1, 0xf2, 0xf2, 0xf2, 0xf2, 0xf2, 0xf2,
3668 0xf3, 0xf3, 0xf3, 0xf3, 0xf3, 0xf4, 0xf4, 0xf4,
3669 0xf4, 0xf4, 0xf4, 0xf5, 0xf5, 0xf5, 0xf5, 0xf5,
3670 0xf6, 0xf6, 0xf6, 0xf6, 0xf6, 0xf6, 0xf7, 0xf7,
3671 0xf7, 0xf7, 0xf7, 0xf8, 0xf8, 0xf8, 0xf8, 0xf8,
3672 0xf8, 0xf9, 0xf9, 0xf9, 0xf9, 0xf9, 0xfa, 0xfa,
3673 0xfa, 0xfa, 0xfa, 0xfa, 0xfb, 0xfb, 0xfb, 0xfb,
3674 0xfb, 0xfc, 0xfc, 0xfc, 0xfc, 0xfc, 0xfd, 0xfd,
3675 0xfd, 0xfd, 0xfd, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe,
3676 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3677 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3678 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3679 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3680 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3681 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3682 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3683 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3684 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3685 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3686 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3687 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3688 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3689 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3690 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3691 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3692 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3693 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3694 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3695 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3696 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3697 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3698 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3699 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3700 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3701 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3702 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3703 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff},
3704 {0x13, 0x15, 0x16, 0x18, 0x19, 0x1b, 0x1c, 0x1e,
3705 0x1f, 0x20, 0x22, 0x23, 0x24, 0x26, 0x27, 0x28,
3706 0x29, 0x2a, 0x2c, 0x2d, 0x2e, 0x2f, 0x30, 0x31,
3707 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39,
3708 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f, 0x40, 0x41,
3709 0x42, 0x43, 0x44, 0x44, 0x45, 0x46, 0x47, 0x48,
3710 0x49, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4d, 0x4e,
3711 0x4f, 0x50, 0x50, 0x51, 0x52, 0x53, 0x53, 0x54,
3712 0x55, 0x55, 0x56, 0x57, 0x57, 0x58, 0x59, 0x59,
3713 0x5a, 0x5b, 0x5b, 0x5c, 0x5d, 0x5d, 0x5e, 0x5f,
3714 0x5f, 0x60, 0x60, 0x61, 0x62, 0x62, 0x63, 0x63,
3715 0x64, 0x65, 0x65, 0x66, 0x66, 0x67, 0x67, 0x68,
3716 0x69, 0x69, 0x6a, 0x6a, 0x6b, 0x6b, 0x6c, 0x6c,
3717 0x6d, 0x6d, 0x6e, 0x6e, 0x6f, 0x6f, 0x70, 0x70,
3718 0x71, 0x71, 0x72, 0x72, 0x73, 0x73, 0x74, 0x74,
3719 0x75, 0x75, 0x76, 0x76, 0x77, 0x77, 0x78, 0x78,
3720 0x79, 0x79, 0x7a, 0x7a, 0x7a, 0x7b, 0x7b, 0x7c,
3721 0x7c, 0x7d, 0x7d, 0x7e, 0x7e, 0x7e, 0x7f, 0x7f,
3722 0x80, 0x80, 0x81, 0x81, 0x81, 0x82, 0x82, 0x83,
3723 0x83, 0x84, 0x84, 0x84, 0x85, 0x85, 0x86, 0x86,
3724 0x86, 0x87, 0x87, 0x88, 0x88, 0x88, 0x89, 0x89,
3725 0x89, 0x8a, 0x8a, 0x8b, 0x8b, 0x8b, 0x8c, 0x8c,
3726 0x8c, 0x8d, 0x8d, 0x8e, 0x8e, 0x8e, 0x8f, 0x8f,
3727 0x8f, 0x90, 0x90, 0x90, 0x91, 0x91, 0x92, 0x92,
3728 0x92, 0x93, 0x93, 0x93, 0x94, 0x94, 0x94, 0x95,
3729 0x95, 0x95, 0x96, 0x96, 0x96, 0x97, 0x97, 0x97,
3730 0x98, 0x98, 0x98, 0x99, 0x99, 0x99, 0x9a, 0x9a,
3731 0x9a, 0x9b, 0x9b, 0x9b, 0x9c, 0x9c, 0x9c, 0x9d,
3732 0x9d, 0x9d, 0x9e, 0x9e, 0x9e, 0x9e, 0x9f, 0x9f,
3733 0x9f, 0xa0, 0xa0, 0xa0, 0xa1, 0xa1, 0xa1, 0xa2,
3734 0xa2, 0xa2, 0xa2, 0xa3, 0xa3, 0xa3, 0xa4, 0xa4,
3735 0xa4, 0xa5, 0xa5, 0xa5, 0xa5, 0xa6, 0xa6, 0xa6,
3736 0xa7, 0xa7, 0xa7, 0xa7, 0xa8, 0xa8, 0xa8, 0xa9,
3737 0xa9, 0xa9, 0xa9, 0xaa, 0xaa, 0xaa, 0xab, 0xab,
3738 0xab, 0xab, 0xac, 0xac, 0xac, 0xac, 0xad, 0xad,
3739 0xad, 0xae, 0xae, 0xae, 0xae, 0xaf, 0xaf, 0xaf,
3740 0xaf, 0xb0, 0xb0, 0xb0, 0xb1, 0xb1, 0xb1, 0xb1,
3741 0xb2, 0xb2, 0xb2, 0xb2, 0xb3, 0xb3, 0xb3, 0xb3,
3742 0xb4, 0xb4, 0xb4, 0xb4, 0xb5, 0xb5, 0xb5, 0xb5,
3743 0xb6, 0xb6, 0xb6, 0xb6, 0xb7, 0xb7, 0xb7, 0xb7,
3744 0xb8, 0xb8, 0xb8, 0xb8, 0xb9, 0xb9, 0xb9, 0xb9,
3745 0xba, 0xba, 0xba, 0xba, 0xbb, 0xbb, 0xbb, 0xbb,
3746 0xbc, 0xbc, 0xbc, 0xbc, 0xbd, 0xbd, 0xbd, 0xbd,
3747 0xbe, 0xbe, 0xbe, 0xbe, 0xbf, 0xbf, 0xbf, 0xbf,
3748 0xbf, 0xc0, 0xc0, 0xc0, 0xc0, 0xc1, 0xc1, 0xc1,
3749 0xc1, 0xc2, 0xc2, 0xc2, 0xc2, 0xc2, 0xc3, 0xc3,
3750 0xc3, 0xc3, 0xc4, 0xc4, 0xc4, 0xc4, 0xc5, 0xc5,
3751 0xc5, 0xc5, 0xc5, 0xc6, 0xc6, 0xc6, 0xc6, 0xc7,
3752 0xc7, 0xc7, 0xc7, 0xc7, 0xc8, 0xc8, 0xc8, 0xc8,
3753 0xc9, 0xc9, 0xc9, 0xc9, 0xc9, 0xca, 0xca, 0xca,
3754 0xca, 0xcb, 0xcb, 0xcb, 0xcb, 0xcb, 0xcc, 0xcc,
3755 0xcc, 0xcc, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xce,
3756 0xce, 0xce, 0xce, 0xce, 0xcf, 0xcf, 0xcf, 0xcf,
3757 0xd0, 0xd0, 0xd0, 0xd0, 0xd0, 0xd1, 0xd1, 0xd1,
3758 0xd1, 0xd1, 0xd2, 0xd2, 0xd2, 0xd2, 0xd2, 0xd3,
3759 0xd3, 0xd3, 0xd3, 0xd4, 0xd4, 0xd4, 0xd4, 0xd4,
3760 0xd5, 0xd5, 0xd5, 0xd5, 0xd5, 0xd6, 0xd6, 0xd6,
3761 0xd6, 0xd6, 0xd7, 0xd7, 0xd7, 0xd7, 0xd7, 0xd8,
3762 0xd8, 0xd8, 0xd8, 0xd8, 0xd9, 0xd9, 0xd9, 0xd9,
3763 0xd9, 0xda, 0xda, 0xda, 0xda, 0xda, 0xdb, 0xdb,
3764 0xdb, 0xdb, 0xdb, 0xdc, 0xdc, 0xdc, 0xdc, 0xdc,
3765 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xde, 0xde, 0xde,
3766 0xde, 0xde, 0xdf, 0xdf, 0xdf, 0xdf, 0xdf, 0xe0,
3767 0xe0, 0xe0, 0xe0, 0xe0, 0xe1, 0xe1, 0xe1, 0xe1,
3768 0xe1, 0xe2, 0xe2, 0xe2, 0xe2, 0xe2, 0xe3, 0xe3,
3769 0xe3, 0xe3, 0xe3, 0xe4, 0xe4, 0xe4, 0xe4, 0xe4,
3770 0xe4, 0xe5, 0xe5, 0xe5, 0xe5, 0xe5, 0xe6, 0xe6,
3771 0xe6, 0xe6, 0xe6, 0xe7, 0xe7, 0xe7, 0xe7, 0xe7,
3772 0xe8, 0xe8, 0xe8, 0xe8, 0xe8, 0xe9, 0xe9, 0xe9,
3773 0xe9, 0xe9, 0xe9, 0xea, 0xea, 0xea, 0xea, 0xea,
3774 0xeb, 0xeb, 0xeb, 0xeb, 0xeb, 0xec, 0xec, 0xec,
3775 0xec, 0xec, 0xed, 0xed, 0xed, 0xed, 0xed, 0xed,
3776 0xee, 0xee, 0xee, 0xee, 0xee, 0xef, 0xef, 0xef,
3777 0xef, 0xef, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0,
3778 0xf1, 0xf1, 0xf1, 0xf1, 0xf1, 0xf2, 0xf2, 0xf2,
3779 0xf2, 0xf2, 0xf3, 0xf3, 0xf3, 0xf3, 0xf3, 0xf3,
3780 0xf4, 0xf4, 0xf4, 0xf4, 0xf4, 0xf5, 0xf5, 0xf5,
3781 0xf5, 0xf5, 0xf6, 0xf6, 0xf6, 0xf6, 0xf6, 0xf6,
3782 0xf7, 0xf7, 0xf7, 0xf7, 0xf7, 0xf8, 0xf8, 0xf8,
3783 0xf8, 0xf8, 0xf9, 0xf9, 0xf9, 0xf9, 0xf9, 0xf9,
3784 0xfa, 0xfa, 0xfa, 0xfa, 0xfa, 0xfb, 0xfb, 0xfb,
3785 0xfb, 0xfb, 0xfc, 0xfc, 0xfc, 0xfc, 0xfc, 0xfc,
3786 0xfd, 0xfd, 0xfd, 0xfd, 0xfd, 0xfe, 0xfe, 0xfe,
3787 0xfe, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3788 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3789 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3790 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3791 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3792 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3793 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3794 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3795 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3796 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3797 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3798 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3799 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3800 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3801 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3802 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3803 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3804 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3805 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3806 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3807 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3808 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3809 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3810 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3811 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3812 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3813 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3814 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3815 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3816 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3817 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3818 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3819 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3820 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3821 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3822 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3823 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3824 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3825 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3826 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3827 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3828 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3829 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3830 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
3831 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff},
3832 },
3833 };
3834
3835 reg_w(gspca_dev, TP6800_R21_ENDP_1_CTL, 0x00);
3836 if (sd->bridge == BRIDGE_TP6810)
3837 reg_w(gspca_dev, 0x02, 0x28);
3838 /* msleep(50); */
3839 gamma = sd->ctrls[GAMMA].val;
3840 bulk_w(gspca_dev, 0x00, gamma_tb[gamma][0], 1024);
3841 bulk_w(gspca_dev, 0x01, gamma_tb[gamma][1], 1024);
3842 bulk_w(gspca_dev, 0x02, gamma_tb[gamma][2], 1024);
3843 if (sd->bridge == BRIDGE_TP6810) {
3844 int i;
3845
3846 reg_w(gspca_dev, 0x02, 0x2b);
3847 reg_w(gspca_dev, 0x02, 0x28);
3848 for (i = 0; i < 6; i++)
3849 reg_w(gspca_dev, TP6800_R55_GAMMA_R,
3850 gamma_tb[gamma][0][i]);
3851 reg_w(gspca_dev, 0x02, 0x2b);
3852 reg_w(gspca_dev, 0x02, 0x28);
3853 for (i = 0; i < 6; i++)
3854 reg_w(gspca_dev, TP6800_R56_GAMMA_G,
3855 gamma_tb[gamma][1][i]);
3856 reg_w(gspca_dev, 0x02, 0x2b);
3857 reg_w(gspca_dev, 0x02, 0x28);
3858 for (i = 0; i < 6; i++)
3859 reg_w(gspca_dev, TP6800_R57_GAMMA_B,
3860 gamma_tb[gamma][2][i]);
3861 reg_w(gspca_dev, 0x02, 0x28);
3862 }
3863 reg_w(gspca_dev, TP6800_R21_ENDP_1_CTL, 0x03);
3864 /* msleep(50); */
3865 }
3866
3867 static void setsharpness(struct gspca_dev *gspca_dev)
3868 {
3869 struct sd *sd = (struct sd *) gspca_dev;
3870 u8 val;
3871
3872 if (sd->bridge == BRIDGE_TP6800) {
3873 val = sd->ctrls[SHARPNESS].val
3874 | 0x08; /* grid compensation enable */
3875 if (gspca_dev->width == 640)
3876 reg_w(gspca_dev, TP6800_R78_FORMAT, 0x00); /* vga */
3877 else
3878 val |= 0x04; /* scaling down enable */
3879 reg_w(gspca_dev, TP6800_R5D_DEMOSAIC_CFG, val);
3880 } else {
3881 val = (sd->ctrls[SHARPNESS].val << 5) | 0x08;
3882 reg_w(gspca_dev, 0x59, val);
3883 }
3884 }
3885
3886 static void setautogain(struct gspca_dev *gspca_dev)
3887 {
3888 struct sd *sd = (struct sd *) gspca_dev;
3889
3890 if (gspca_dev->ctrl_dis & (1 << AUTOGAIN))
3891 return;
3892 if (sd->ctrls[AUTOGAIN].val) {
3893 sd->ag_cnt = AG_CNT_START;
3894 gspca_dev->ctrl_inac |= (1 << EXPOSURE) | (1 << GAIN);
3895 } else {
3896 sd->ag_cnt = -1;
3897 gspca_dev->ctrl_inac &= ~((1 << EXPOSURE) | (1 << GAIN));
3898 }
3899 }
3900
3901 /* set the resolution for sensor cx0342 */
3902 static void set_resolution(struct gspca_dev *gspca_dev)
3903 {
3904 reg_w(gspca_dev, TP6800_R21_ENDP_1_CTL, 0x00);
3905 if (gspca_dev->width == 320) {
3906 reg_w(gspca_dev, TP6800_R3F_FRAME_RATE, 0x06);
3907 msleep(100);
3908 i2c_w(gspca_dev, CX0342_AUTO_ADC_CALIB, 0x01);
3909 msleep(100);
3910 reg_w(gspca_dev, TP6800_R21_ENDP_1_CTL, 0x03);
3911 reg_w(gspca_dev, TP6800_R78_FORMAT, 0x01); /* qvga */
3912 reg_w(gspca_dev, TP6800_R5D_DEMOSAIC_CFG, 0x0d);
3913 i2c_w(gspca_dev, CX0342_EXPO_LINE_L, 0x37);
3914 i2c_w(gspca_dev, CX0342_EXPO_LINE_H, 0x01);
3915 } else {
3916 reg_w(gspca_dev, TP6800_R3F_FRAME_RATE, 0x05);
3917 msleep(100);
3918 i2c_w(gspca_dev, CX0342_AUTO_ADC_CALIB, 0x01);
3919 msleep(100);
3920 reg_w(gspca_dev, TP6800_R21_ENDP_1_CTL, 0x03);
3921 reg_w(gspca_dev, TP6800_R78_FORMAT, 0x00); /* vga */
3922 reg_w(gspca_dev, TP6800_R5D_DEMOSAIC_CFG, 0x09);
3923 i2c_w(gspca_dev, CX0342_EXPO_LINE_L, 0xcf);
3924 i2c_w(gspca_dev, CX0342_EXPO_LINE_H, 0x00);
3925 }
3926 i2c_w(gspca_dev, CX0342_SYS_CTRL_0, 0x01);
3927 bulk_w(gspca_dev, 0x03, color_gain[SENSOR_CX0342],
3928 ARRAY_SIZE(color_gain[0]));
3929 setgamma(gspca_dev);
3930 setquality(gspca_dev);
3931 }
3932
3933 /* convert the frame rate to a tp68x0 value */
3934 static int get_fr_idx(struct gspca_dev *gspca_dev)
3935 {
3936 struct sd *sd = (struct sd *) gspca_dev;
3937 int i;
3938
3939 if (sd->bridge == BRIDGE_TP6800) {
3940 for (i = 0; i < ARRAY_SIZE(rates) - 1; i++) {
3941 if (sd->framerate >= rates[i])
3942 break;
3943 }
3944 i = 6 - i; /* 1 = 5fps .. 6 = 30fps */
3945
3946 /* 640x480 * 30 fps does not work */
3947 if (i == 6 /* if 30 fps */
3948 && gspca_dev->width == 640)
3949 i = 0x86; /* 15 fps */
3950 } else {
3951 for (i = 0; i < ARRAY_SIZE(rates_6810) - 1; i++) {
3952 if (sd->framerate >= rates_6810[i])
3953 break;
3954 }
3955 i = 7 - i; /* 3 = 5fps .. 7 = 30fps */
3956
3957 /* 640x480 * 30 fps does not work */
3958 if (i == 7 /* if 30 fps */
3959 && gspca_dev->width == 640)
3960 i = 6; /* 15 fps */
3961 i |= 0x80; /* clock * 1 */
3962 }
3963 return i;
3964 }
3965
3966 static void setframerate(struct gspca_dev *gspca_dev)
3967 {
3968 struct sd *sd = (struct sd *) gspca_dev;
3969 u8 fr_idx;
3970
3971 fr_idx = get_fr_idx(gspca_dev);
3972
3973 if (sd->bridge == BRIDGE_TP6810) {
3974 reg_r(gspca_dev, 0x7b);
3975 reg_w(gspca_dev, 0x7b,
3976 sd->sensor == SENSOR_CX0342 ? 0x10 : 0x90);
3977 if (sd->ctrls[EXPOSURE].val >= 128)
3978 fr_idx = 0xf0; /* lower frame rate */
3979 }
3980
3981 reg_w(gspca_dev, TP6800_R3F_FRAME_RATE, fr_idx);
3982
3983 if (sd->sensor == SENSOR_CX0342)
3984 i2c_w(gspca_dev, CX0342_AUTO_ADC_CALIB, 0x01);
3985 }
3986
3987 static void setrgain(struct gspca_dev *gspca_dev)
3988 {
3989 struct sd *sd = (struct sd *) gspca_dev;
3990 int rgain;
3991
3992 rgain = sd->ctrls[RGAIN].val;
3993 i2c_w(gspca_dev, CX0342_RAW_RGAIN_H, rgain >> 8);
3994 i2c_w(gspca_dev, CX0342_RAW_RGAIN_L, rgain);
3995 i2c_w(gspca_dev, CX0342_SYS_CTRL_0, 0x80);
3996 }
3997
3998 static int sd_setgain(struct gspca_dev *gspca_dev, __s32 val)
3999 {
4000 struct sd *sd = (struct sd *) gspca_dev;
4001
4002 if (sd->sensor == SENSOR_CX0342) {
4003 sd->ctrls[BGAIN].val = sd->ctrls[BGAIN].val
4004 * val / sd->ctrls[GAIN].val;
4005 if (sd->ctrls[BGAIN].val > 4095)
4006 sd->ctrls[BGAIN].val = 4095;
4007 sd->ctrls[RGAIN].val = sd->ctrls[RGAIN].val
4008 * val / sd->ctrls[GAIN].val;
4009 if (sd->ctrls[RGAIN].val > 4095)
4010 sd->ctrls[RGAIN].val = 4095;
4011 }
4012 sd->ctrls[GAIN].val = val;
4013 if (gspca_dev->streaming)
4014 setexposure(gspca_dev);
4015 return gspca_dev->usb_err;
4016 }
4017
4018 static void setbgain(struct gspca_dev *gspca_dev)
4019 {
4020 struct sd *sd = (struct sd *) gspca_dev;
4021 int bgain;
4022
4023 bgain = sd->ctrls[BGAIN].val;
4024 i2c_w(gspca_dev, CX0342_RAW_BGAIN_H, bgain >> 8);
4025 i2c_w(gspca_dev, CX0342_RAW_BGAIN_L, bgain);
4026 i2c_w(gspca_dev, CX0342_SYS_CTRL_0, 0x80);
4027 }
4028
4029 /* this function is called at probe time */
4030 static int sd_config(struct gspca_dev *gspca_dev,
4031 const struct usb_device_id *id)
4032 {
4033 struct sd *sd = (struct sd *) gspca_dev;
4034
4035 sd->bridge = id->driver_info;
4036
4037 gspca_dev->cam.cam_mode = vga_mode;
4038 gspca_dev->cam.nmodes = ARRAY_SIZE(vga_mode);
4039 gspca_dev->cam.mode_framerates = sd->bridge == BRIDGE_TP6800 ?
4040 framerates : framerates_6810;
4041
4042 sd->framerate = 30; /* default: 30 fps */
4043 gspca_dev->cam.ctrls = sd->ctrls;
4044 return 0;
4045 }
4046
4047 /* this function is called at probe and resume time */
4048 static int sd_init(struct gspca_dev *gspca_dev)
4049 {
4050 struct sd *sd = (struct sd *) gspca_dev;
4051 static const struct cmd tp6800_preinit[] = {
4052 {TP6800_R10_SIF_TYPE, 0x01}, /* sif */
4053 {TP6800_R11_SIF_CONTROL, 0x01},
4054 {TP6800_R15_GPIO_PU, 0x9f},
4055 {TP6800_R16_GPIO_PD, 0x9f},
4056 {TP6800_R17_GPIO_IO, 0x80},
4057 {TP6800_R18_GPIO_DATA, 0x40}, /* LED off */
4058 };
4059 static const struct cmd tp6810_preinit[] = {
4060 {TP6800_R2F_TIMING_CFG, 0x2f},
4061 {TP6800_R15_GPIO_PU, 0x6f},
4062 {TP6800_R16_GPIO_PD, 0x40},
4063 {TP6800_R17_GPIO_IO, 0x9f},
4064 {TP6800_R18_GPIO_DATA, 0xc1}, /* LED off */
4065 };
4066
4067 if (sd->bridge == BRIDGE_TP6800)
4068 reg_w_buf(gspca_dev, tp6800_preinit,
4069 ARRAY_SIZE(tp6800_preinit));
4070 else
4071 reg_w_buf(gspca_dev, tp6810_preinit,
4072 ARRAY_SIZE(tp6810_preinit));
4073 msleep(15);
4074 reg_r(gspca_dev, TP6800_R18_GPIO_DATA);
4075 PDEBUG(D_PROBE, "gpio: %02x", gspca_dev->usb_buf[0]);
4076 /* values:
4077 * 0x80: snapshot button
4078 * 0x40: LED
4079 * 0x20: (bridge / sensor) reset for tp6810 ?
4080 * 0x07: sensor type ?
4081 */
4082
4083 /* guess the sensor type */
4084 if (force_sensor >= 0) {
4085 sd->sensor = force_sensor;
4086 } else {
4087 if (sd->bridge == BRIDGE_TP6800) {
4088 /*fixme: not sure this is working*/
4089 switch (gspca_dev->usb_buf[0] & 0x07) {
4090 case 0:
4091 sd->sensor = SENSOR_SOI763A;
4092 break;
4093 case 1:
4094 sd->sensor = SENSOR_CX0342;
4095 break;
4096 }
4097 } else {
4098 int sensor;
4099
4100 sensor = probe_6810(gspca_dev);
4101 if (sensor < 0) {
4102 pr_warn("Unknown sensor %d - forced to soi763a\n",
4103 -sensor);
4104 sensor = SENSOR_SOI763A;
4105 }
4106 sd->sensor = sensor;
4107 }
4108 }
4109 if (sd->sensor == SENSOR_SOI763A) {
4110 pr_info("Sensor soi763a\n");
4111 sd->ctrls[GAMMA].def = sd->bridge == BRIDGE_TP6800 ? 0 : 1;
4112 sd->ctrls[GAIN].max = 15;
4113 sd->ctrls[GAIN].def = 3;
4114 gspca_dev->ctrl_dis = (1 << RGAIN) | (1 << BGAIN);
4115 if (sd->bridge == BRIDGE_TP6810) {
4116 soi763a_6810_init(gspca_dev);
4117 #if AUTOGAIN_DEF
4118 gspca_dev->ctrl_inac |= (1 << EXPOSURE) | (1 << GAIN);
4119 #endif
4120 } else {
4121 gspca_dev->ctrl_dis |= (1 << AUTOGAIN);
4122 }
4123 } else {
4124 pr_info("Sensor cx0342\n");
4125 if (sd->bridge == BRIDGE_TP6810) {
4126 cx0342_6810_init(gspca_dev);
4127 #if AUTOGAIN_DEF
4128 gspca_dev->ctrl_inac |= (1 << EXPOSURE) | (1 << GAIN);
4129 #endif
4130 } else {
4131 gspca_dev->ctrl_dis |= (1 << AUTOGAIN);
4132 }
4133 }
4134
4135 if (sd->bridge == BRIDGE_TP6810)
4136 sd->ctrls[QUALITY].def = 0; /* auto quality */
4137 set_dqt(gspca_dev, 0);
4138 return 0;
4139 }
4140
4141 /* This function is called before choosing the alt setting */
4142 static int sd_isoc_init(struct gspca_dev *gspca_dev)
4143 {
4144 struct sd *sd = (struct sd *) gspca_dev;
4145 static const struct cmd cx_sensor_init[] = {
4146 {CX0342_AUTO_ADC_CALIB, 0x81},
4147 {CX0342_EXPO_LINE_L, 0x37},
4148 {CX0342_EXPO_LINE_H, 0x01},
4149 {CX0342_RAW_GRGAIN_L, 0x00},
4150 {CX0342_RAW_GBGAIN_L, 0x00},
4151 {CX0342_RAW_RGAIN_L, 0x00},
4152 {CX0342_RAW_BGAIN_L, 0x00},
4153 {CX0342_SYS_CTRL_0, 0x81},
4154 };
4155 static const struct cmd cx_bridge_init[] = {
4156 {0x4d, 0x00},
4157 {0x4c, 0xff},
4158 {0x4e, 0xff},
4159 {0x4f, 0x00},
4160 };
4161 static const struct cmd ov_sensor_init[] = {
4162 {0x10, 0x75}, /* exposure */
4163 {0x76, 0x03},
4164 {0x00, 0x00}, /* gain */
4165 };
4166 static const struct cmd ov_bridge_init[] = {
4167 {0x7b, 0x90},
4168 {TP6800_R3F_FRAME_RATE, 0x87},
4169 };
4170
4171 if (sd->bridge == BRIDGE_TP6800)
4172 return 0;
4173 if (sd->sensor == SENSOR_CX0342) {
4174 reg_w(gspca_dev, TP6800_R12_SIF_ADDR_S, 0x20);
4175 reg_w(gspca_dev, TP6800_R3F_FRAME_RATE, 0x87);
4176 i2c_w_buf(gspca_dev, cx_sensor_init,
4177 ARRAY_SIZE(cx_sensor_init));
4178 reg_w_buf(gspca_dev, cx_bridge_init,
4179 ARRAY_SIZE(cx_bridge_init));
4180 bulk_w(gspca_dev, 0x03, color_null, sizeof color_null);
4181 reg_w(gspca_dev, 0x59, 0x40);
4182 } else {
4183 reg_w(gspca_dev, TP6800_R12_SIF_ADDR_S, 0x21);
4184 i2c_w_buf(gspca_dev, ov_sensor_init,
4185 ARRAY_SIZE(ov_sensor_init));
4186 reg_r(gspca_dev, 0x7b);
4187 reg_w_buf(gspca_dev, ov_bridge_init,
4188 ARRAY_SIZE(ov_bridge_init));
4189 }
4190 reg_w(gspca_dev, TP6800_R78_FORMAT,
4191 gspca_dev->curr_mode ? 0x00 : 0x01);
4192 return gspca_dev->usb_err;
4193 }
4194
4195 static void set_led(struct gspca_dev *gspca_dev, int on)
4196 {
4197 u8 data;
4198
4199 reg_r(gspca_dev, TP6800_R18_GPIO_DATA);
4200 data = gspca_dev->usb_buf[0];
4201 if (on)
4202 data &= ~0x40;
4203 else
4204 data |= 0x40;
4205 reg_w(gspca_dev, TP6800_R18_GPIO_DATA, data);
4206 }
4207
4208 static void cx0342_6800_start(struct gspca_dev *gspca_dev)
4209 {
4210 static const struct cmd reg_init[] = {
4211 /*fixme: is this usefull?*/
4212 {TP6800_R17_GPIO_IO, 0x9f},
4213 {TP6800_R16_GPIO_PD, 0x40},
4214 {TP6800_R10_SIF_TYPE, 0x00}, /* i2c 8 bits */
4215 {TP6800_R50, 0x00},
4216 {TP6800_R51, 0x00},
4217 {TP6800_R52, 0xff},
4218 {TP6800_R53, 0x03},
4219 {TP6800_R54_DARK_CFG, 0x07},
4220 {TP6800_R5C_EDGE_THRLD, 0x40},
4221 {TP6800_R7A_BLK_THRLD, 0x40},
4222 {TP6800_R2F_TIMING_CFG, 0x17},
4223 {TP6800_R30_SENSOR_CFG, 0x18}, /* G1B..RG0 */
4224 {TP6800_R37_FRONT_DARK_ST, 0x00},
4225 {TP6800_R38_FRONT_DARK_END, 0x00},
4226 {TP6800_R39_REAR_DARK_ST_L, 0x00},
4227 {TP6800_R3A_REAR_DARK_ST_H, 0x00},
4228 {TP6800_R3B_REAR_DARK_END_L, 0x00},
4229 {TP6800_R3C_REAR_DARK_END_H, 0x00},
4230 {TP6800_R3D_HORIZ_DARK_LINE_L, 0x00},
4231 {TP6800_R3E_HORIZ_DARK_LINE_H, 0x00},
4232 {TP6800_R21_ENDP_1_CTL, 0x03},
4233
4234 {TP6800_R31_PIXEL_START, 0x0b},
4235 {TP6800_R32_PIXEL_END_L, 0x8a},
4236 {TP6800_R33_PIXEL_END_H, 0x02},
4237 {TP6800_R34_LINE_START, 0x0e},
4238 {TP6800_R35_LINE_END_L, 0xf4},
4239 {TP6800_R36_LINE_END_H, 0x01},
4240 {TP6800_R78_FORMAT, 0x00},
4241 {TP6800_R12_SIF_ADDR_S, 0x20}, /* cx0342 i2c addr */
4242 };
4243 static const struct cmd sensor_init[] = {
4244 {CX0342_OUTPUT_CTRL, 0x07},
4245 {CX0342_BYPASS_MODE, 0x58},
4246 {CX0342_GPXLTHD_L, 0x16},
4247 {CX0342_RBPXLTHD_L, 0x16},
4248 {CX0342_PLANETHD_L, 0xc0},
4249 {CX0342_PLANETHD_H, 0x03},
4250 {CX0342_RB_GAP_L, 0xff},
4251 {CX0342_RB_GAP_H, 0x07},
4252 {CX0342_G_GAP_L, 0xff},
4253 {CX0342_G_GAP_H, 0x07},
4254 {CX0342_RST_OVERFLOW_L, 0x5c},
4255 {CX0342_RST_OVERFLOW_H, 0x01},
4256 {CX0342_DATA_OVERFLOW_L, 0xfc},
4257 {CX0342_DATA_OVERFLOW_H, 0x03},
4258 {CX0342_DATA_UNDERFLOW_L, 0x00},
4259 {CX0342_DATA_UNDERFLOW_H, 0x00},
4260 {CX0342_SYS_CTRL_0, 0x40},
4261 {CX0342_GLOBAL_GAIN, 0x01},
4262 {CX0342_CLOCK_GEN, 0x00},
4263 {CX0342_SYS_CTRL_0, 0x02},
4264 {CX0342_IDLE_CTRL, 0x05},
4265 {CX0342_ADCGN, 0x00},
4266 {CX0342_ADC_CTL, 0x00},
4267 {CX0342_LVRST_BLBIAS, 0x01},
4268 {CX0342_VTHSEL, 0x0b},
4269 {CX0342_RAMP_RIV, 0x0b},
4270 {CX0342_LDOSEL, 0x07},
4271 {CX0342_SPV_VALUE_L, 0x40},
4272 {CX0342_SPV_VALUE_H, 0x02},
4273 };
4274
4275 reg_w_buf(gspca_dev, reg_init, ARRAY_SIZE(reg_init));
4276 i2c_w_buf(gspca_dev, sensor_init, ARRAY_SIZE(sensor_init));
4277 i2c_w_buf(gspca_dev, cx0342_timing_seq, ARRAY_SIZE(cx0342_timing_seq));
4278 reg_w(gspca_dev, TP6800_R5C_EDGE_THRLD, 0x10);
4279 reg_w(gspca_dev, TP6800_R54_DARK_CFG, 0x00);
4280 i2c_w(gspca_dev, CX0342_EXPO_LINE_H, 0x00);
4281 i2c_w(gspca_dev, CX0342_SYS_CTRL_0, 0x01);
4282 setexposure(gspca_dev);
4283 set_led(gspca_dev, 1);
4284 set_resolution(gspca_dev);
4285 }
4286
4287 static void cx0342_6810_start(struct gspca_dev *gspca_dev)
4288 {
4289 static const struct cmd sensor_init_2[] = {
4290 {CX0342_EXPO_LINE_L, 0x6f},
4291 {CX0342_EXPO_LINE_H, 0x02},
4292 {CX0342_RAW_GRGAIN_L, 0x00},
4293 {CX0342_RAW_GBGAIN_L, 0x00},
4294 {CX0342_RAW_RGAIN_L, 0x00},
4295 {CX0342_RAW_BGAIN_L, 0x00},
4296 {CX0342_SYS_CTRL_0, 0x81},
4297 };
4298 static const struct cmd bridge_init_2[] = {
4299 {0x4d, 0x00},
4300 {0x4c, 0xff},
4301 {0x4e, 0xff},
4302 {0x4f, 0x00},
4303 {TP6800_R7A_BLK_THRLD, 0x00},
4304 {TP6800_R79_QUALITY, 0x04},
4305 {TP6800_R79_QUALITY, 0x01},
4306 };
4307 static const struct cmd bridge_init_3[] = {
4308 {TP6800_R31_PIXEL_START, 0x08},
4309 {TP6800_R32_PIXEL_END_L, 0x87},
4310 {TP6800_R33_PIXEL_END_H, 0x02},
4311 {TP6800_R34_LINE_START, 0x0e},
4312 {TP6800_R35_LINE_END_L, 0xf4},
4313 {TP6800_R36_LINE_END_H, 0x01},
4314 };
4315 static const struct cmd sensor_init_3[] = {
4316 {CX0342_AUTO_ADC_CALIB, 0x81},
4317 {CX0342_EXPO_LINE_L, 0x6f},
4318 {CX0342_EXPO_LINE_H, 0x02},
4319 {CX0342_RAW_GRGAIN_L, 0x00},
4320 {CX0342_RAW_GBGAIN_L, 0x00},
4321 {CX0342_RAW_RGAIN_L, 0x00},
4322 {CX0342_RAW_BGAIN_L, 0x00},
4323 {CX0342_SYS_CTRL_0, 0x81},
4324 };
4325 static const struct cmd bridge_init_5[] = {
4326 {0x4d, 0x00},
4327 {0x4c, 0xff},
4328 {0x4e, 0xff},
4329 {0x4f, 0x00},
4330 };
4331 static const struct cmd sensor_init_4[] = {
4332 {CX0342_EXPO_LINE_L, 0xd3},
4333 {CX0342_EXPO_LINE_H, 0x01},
4334 /*fixme: gains, but 00..80 only*/
4335 {CX0342_RAW_GRGAIN_L, 0x40},
4336 {CX0342_RAW_GBGAIN_L, 0x40},
4337 {CX0342_RAW_RGAIN_L, 0x40},
4338 {CX0342_RAW_BGAIN_L, 0x40},
4339 {CX0342_SYS_CTRL_0, 0x81},
4340 };
4341 static const struct cmd sensor_init_5[] = {
4342 {CX0342_IDLE_CTRL, 0x05},
4343 {CX0342_ADCGN, 0x00},
4344 {CX0342_ADC_CTL, 0x00},
4345 {CX0342_LVRST_BLBIAS, 0x01},
4346 {CX0342_VTHSEL, 0x0b},
4347 {CX0342_RAMP_RIV, 0x0b},
4348 {CX0342_LDOSEL, 0x07},
4349 {CX0342_SPV_VALUE_L, 0x40},
4350 {CX0342_SPV_VALUE_H, 0x02},
4351 {CX0342_AUTO_ADC_CALIB, 0x81},
4352 };
4353
4354 reg_w(gspca_dev, 0x22, gspca_dev->alt);
4355 i2c_w_buf(gspca_dev, sensor_init_2, ARRAY_SIZE(sensor_init_2));
4356 reg_w_buf(gspca_dev, bridge_init_2, ARRAY_SIZE(bridge_init_2));
4357 reg_w_buf(gspca_dev, tp6810_cx_init_common,
4358 ARRAY_SIZE(tp6810_cx_init_common));
4359 reg_w_buf(gspca_dev, bridge_init_3, ARRAY_SIZE(bridge_init_3));
4360 if (gspca_dev->curr_mode) {
4361 reg_w(gspca_dev, 0x4a, 0x7f);
4362 reg_w(gspca_dev, 0x07, 0x05);
4363 reg_w(gspca_dev, TP6800_R78_FORMAT, 0x00); /* vga */
4364 } else {
4365 reg_w(gspca_dev, 0x4a, 0xff);
4366 reg_w(gspca_dev, 0x07, 0x85);
4367 reg_w(gspca_dev, TP6800_R78_FORMAT, 0x01); /* qvga */
4368 }
4369 setgamma(gspca_dev);
4370 reg_w_buf(gspca_dev, tp6810_bridge_start,
4371 ARRAY_SIZE(tp6810_bridge_start));
4372 setsharpness(gspca_dev);
4373 bulk_w(gspca_dev, 0x03, color_gain[SENSOR_CX0342],
4374 ARRAY_SIZE(color_gain[0]));
4375 reg_w(gspca_dev, TP6800_R3F_FRAME_RATE, 0x87);
4376 i2c_w_buf(gspca_dev, sensor_init_3, ARRAY_SIZE(sensor_init_3));
4377 reg_w_buf(gspca_dev, bridge_init_5, ARRAY_SIZE(bridge_init_5));
4378 i2c_w_buf(gspca_dev, sensor_init_4, ARRAY_SIZE(sensor_init_4));
4379 reg_w_buf(gspca_dev, bridge_init_5, ARRAY_SIZE(bridge_init_5));
4380 i2c_w_buf(gspca_dev, sensor_init_5, ARRAY_SIZE(sensor_init_5));
4381
4382 set_led(gspca_dev, 1);
4383 /* setquality(gspca_dev); */
4384 }
4385
4386 static void soi763a_6800_start(struct gspca_dev *gspca_dev)
4387 {
4388 static const struct cmd reg_init[] = {
4389 {TP6800_R79_QUALITY, 0x04},
4390 {TP6800_R79_QUALITY, 0x01},
4391 {TP6800_R10_SIF_TYPE, 0x00}, /* i2c 8 bits */
4392
4393 {TP6800_R50, 0x00},
4394 {TP6800_R51, 0x00},
4395 {TP6800_R52, 0xff},
4396 {TP6800_R53, 0x03},
4397 {TP6800_R54_DARK_CFG, 0x07},
4398 {TP6800_R5C_EDGE_THRLD, 0x40},
4399
4400 {TP6800_R79_QUALITY, 0x03},
4401 {TP6800_R7A_BLK_THRLD, 0x40},
4402
4403 {TP6800_R2F_TIMING_CFG, 0x46},
4404 {TP6800_R30_SENSOR_CFG, 0x10}, /* BG1..G0R */
4405 {TP6800_R37_FRONT_DARK_ST, 0x00},
4406 {TP6800_R38_FRONT_DARK_END, 0x00},
4407 {TP6800_R39_REAR_DARK_ST_L, 0x00},
4408 {TP6800_R3A_REAR_DARK_ST_H, 0x00},
4409 {TP6800_R3B_REAR_DARK_END_L, 0x00},
4410 {TP6800_R3C_REAR_DARK_END_H, 0x00},
4411 {TP6800_R3D_HORIZ_DARK_LINE_L, 0x00},
4412 {TP6800_R3E_HORIZ_DARK_LINE_H, 0x00},
4413 {TP6800_R21_ENDP_1_CTL, 0x03},
4414
4415 {TP6800_R3F_FRAME_RATE, 0x04}, /* 15 fps */
4416 {TP6800_R5D_DEMOSAIC_CFG, 0x0e}, /* scale down - medium edge */
4417
4418 {TP6800_R31_PIXEL_START, 0x1b},
4419 {TP6800_R32_PIXEL_END_L, 0x9a},
4420 {TP6800_R33_PIXEL_END_H, 0x02},
4421 {TP6800_R34_LINE_START, 0x0f},
4422 {TP6800_R35_LINE_END_L, 0xf4},
4423 {TP6800_R36_LINE_END_H, 0x01},
4424 {TP6800_R78_FORMAT, 0x01}, /* qvga */
4425 {TP6800_R12_SIF_ADDR_S, 0x21}, /* soi763a i2c addr */
4426 {TP6800_R1A_SIF_TX_DATA2, 0x00},
4427 };
4428 static const struct cmd sensor_init[] = {
4429 {0x12, 0x48}, /* mirror - RGB */
4430 {0x13, 0xa0}, /* clock - no AGC nor AEC */
4431 {0x03, 0xa4}, /* saturation */
4432 {0x04, 0x30}, /* hue */
4433 {0x05, 0x88}, /* contrast */
4434 {0x06, 0x60}, /* brightness */
4435 {0x10, 0x41}, /* AEC */
4436 {0x11, 0x40}, /* clock rate */
4437 {0x13, 0xa0},
4438 {0x14, 0x00}, /* 640x480 */
4439 {0x15, 0x14},
4440 {0x1f, 0x41},
4441 {0x20, 0x80},
4442 {0x23, 0xee},
4443 {0x24, 0x50},
4444 {0x25, 0x7a},
4445 {0x26, 0x00},
4446 {0x27, 0xe2},
4447 {0x28, 0xb0},
4448 {0x2a, 0x00},
4449 {0x2b, 0x00},
4450 {0x2d, 0x81},
4451 {0x2f, 0x9d},
4452 {0x60, 0x80},
4453 {0x61, 0x00},
4454 {0x62, 0x88},
4455 {0x63, 0x11},
4456 {0x64, 0x89},
4457 {0x65, 0x00},
4458 {0x67, 0x94},
4459 {0x68, 0x7a},
4460 {0x69, 0x0f},
4461 {0x6c, 0x80},
4462 {0x6d, 0x80},
4463 {0x6e, 0x80},
4464 {0x6f, 0xff},
4465 {0x71, 0x20},
4466 {0x74, 0x20},
4467 {0x75, 0x86},
4468 {0x77, 0xb5},
4469 {0x17, 0x18}, /* H href start */
4470 {0x18, 0xbf}, /* H href end */
4471 {0x19, 0x03}, /* V start */
4472 {0x1a, 0xf8}, /* V end */
4473 {0x01, 0x80}, /* blue gain */
4474 {0x02, 0x80}, /* red gain */
4475 };
4476
4477 reg_w_buf(gspca_dev, reg_init, ARRAY_SIZE(reg_init));
4478
4479 i2c_w(gspca_dev, 0x12, 0x80); /* sensor reset */
4480 msleep(10);
4481
4482 i2c_w_buf(gspca_dev, sensor_init, ARRAY_SIZE(sensor_init));
4483
4484 reg_w(gspca_dev, TP6800_R5C_EDGE_THRLD, 0x10);
4485 reg_w(gspca_dev, TP6800_R54_DARK_CFG, 0x00);
4486
4487 setsharpness(gspca_dev);
4488
4489 bulk_w(gspca_dev, 0x03, color_gain[SENSOR_SOI763A],
4490 ARRAY_SIZE(color_gain[0]));
4491
4492 set_led(gspca_dev, 1);
4493 setexposure(gspca_dev);
4494 setquality(gspca_dev);
4495 setgamma(gspca_dev);
4496 }
4497
4498 static void soi763a_6810_start(struct gspca_dev *gspca_dev)
4499 {
4500 static const struct cmd bridge_init_2[] = {
4501 {TP6800_R7A_BLK_THRLD, 0x00},
4502 {TP6800_R79_QUALITY, 0x04},
4503 {TP6800_R79_QUALITY, 0x01},
4504 };
4505 static const struct cmd bridge_init_3[] = {
4506 {TP6800_R31_PIXEL_START, 0x20},
4507 {TP6800_R32_PIXEL_END_L, 0x9f},
4508 {TP6800_R33_PIXEL_END_H, 0x02},
4509 {TP6800_R34_LINE_START, 0x13},
4510 {TP6800_R35_LINE_END_L, 0xf8},
4511 {TP6800_R36_LINE_END_H, 0x01},
4512 };
4513 static const struct cmd bridge_init_6[] = {
4514 {0x08, 0xff},
4515 {0x09, 0xff},
4516 {0x0a, 0x5f},
4517 {0x0b, 0x80},
4518 };
4519
4520 reg_w(gspca_dev, 0x22, gspca_dev->alt);
4521 bulk_w(gspca_dev, 0x03, color_null, sizeof color_null);
4522 reg_w(gspca_dev, 0x59, 0x40);
4523 setexposure(gspca_dev);
4524 reg_w_buf(gspca_dev, bridge_init_2, ARRAY_SIZE(bridge_init_2));
4525 reg_w_buf(gspca_dev, tp6810_ov_init_common,
4526 ARRAY_SIZE(tp6810_ov_init_common));
4527 reg_w_buf(gspca_dev, bridge_init_3, ARRAY_SIZE(bridge_init_3));
4528 if (gspca_dev->curr_mode) {
4529 reg_w(gspca_dev, 0x4a, 0x7f);
4530 reg_w(gspca_dev, 0x07, 0x05);
4531 reg_w(gspca_dev, TP6800_R78_FORMAT, 0x00); /* vga */
4532 } else {
4533 reg_w(gspca_dev, 0x4a, 0xff);
4534 reg_w(gspca_dev, 0x07, 0x85);
4535 reg_w(gspca_dev, TP6800_R78_FORMAT, 0x01); /* qvga */
4536 }
4537 setgamma(gspca_dev);
4538 reg_w_buf(gspca_dev, tp6810_bridge_start,
4539 ARRAY_SIZE(tp6810_bridge_start));
4540
4541 if (gspca_dev->curr_mode) {
4542 reg_w(gspca_dev, 0x4f, 0x00);
4543 reg_w(gspca_dev, 0x4e, 0x7c);
4544 }
4545
4546 reg_w(gspca_dev, 0x00, 0x00);
4547
4548 setsharpness(gspca_dev);
4549 bulk_w(gspca_dev, 0x03, color_gain[SENSOR_SOI763A],
4550 ARRAY_SIZE(color_gain[0]));
4551 set_led(gspca_dev, 1);
4552 reg_w(gspca_dev, TP6800_R3F_FRAME_RATE, 0xf0);
4553 setexposure(gspca_dev);
4554 reg_w_buf(gspca_dev, bridge_init_6, ARRAY_SIZE(bridge_init_6));
4555 }
4556
4557 /* -- start the camera -- */
4558 static int sd_start(struct gspca_dev *gspca_dev)
4559 {
4560 struct sd *sd = (struct sd *) gspca_dev;
4561
4562 jpeg_define(sd->jpeg_hdr, gspca_dev->height, gspca_dev->width);
4563 set_dqt(gspca_dev, sd->quality);
4564 if (sd->bridge == BRIDGE_TP6800) {
4565 if (sd->sensor == SENSOR_CX0342)
4566 cx0342_6800_start(gspca_dev);
4567 else
4568 soi763a_6800_start(gspca_dev);
4569 } else {
4570 if (sd->sensor == SENSOR_CX0342)
4571 cx0342_6810_start(gspca_dev);
4572 else
4573 soi763a_6810_start(gspca_dev);
4574 reg_w_buf(gspca_dev, tp6810_late_start,
4575 ARRAY_SIZE(tp6810_late_start));
4576 reg_w(gspca_dev, 0x80, 0x03);
4577 reg_w(gspca_dev, 0x82, gspca_dev->curr_mode ? 0x0a : 0x0e);
4578
4579 setexposure(gspca_dev);
4580 setquality(gspca_dev);
4581 setautogain(gspca_dev);
4582 }
4583
4584 setframerate(gspca_dev);
4585
4586 return gspca_dev->usb_err;
4587 }
4588
4589 static void sd_stopN(struct gspca_dev *gspca_dev)
4590 {
4591 struct sd *sd = (struct sd *) gspca_dev;
4592
4593 if (sd->bridge == BRIDGE_TP6800)
4594 reg_w(gspca_dev, TP6800_R2F_TIMING_CFG, 0x03);
4595 set_led(gspca_dev, 0);
4596 reg_w(gspca_dev, TP6800_R21_ENDP_1_CTL, 0x00);
4597 }
4598
4599 static void sd_pkt_scan(struct gspca_dev *gspca_dev,
4600 u8 *data,
4601 int len)
4602 {
4603 struct sd *sd = (struct sd *) gspca_dev;
4604
4605 /* the start of frame contains:
4606 * ff d8
4607 * ff fe
4608 * width / 16
4609 * height / 8
4610 * quality
4611 */
4612 if (sd->bridge == BRIDGE_TP6810) {
4613 if (*data != 0x5a) {
4614 /*fixme: don't discard the whole frame..*/
4615 if (*data == 0xaa || *data == 0x00)
4616 return;
4617 if (*data > 0xc0) {
4618 PDEBUG(D_FRAM, "bad frame");
4619 gspca_dev->last_packet_type = DISCARD_PACKET;
4620 return;
4621 }
4622 }
4623 data++;
4624 len--;
4625 if (*data == 0xff && data[1] == 0xd8) {
4626 /*fixme: there may be information in the 4 high bits*/
4627 if ((data[6] & 0x0f) != sd->quality)
4628 set_dqt(gspca_dev, data[6] & 0x0f);
4629 gspca_frame_add(gspca_dev, FIRST_PACKET,
4630 sd->jpeg_hdr, JPEG_HDR_SZ);
4631 gspca_frame_add(gspca_dev, INTER_PACKET,
4632 data + 7, len - 7);
4633 } else if (data[len - 2] == 0xff && data[len - 1] == 0xd9) {
4634 gspca_frame_add(gspca_dev, LAST_PACKET,
4635 data, len);
4636 } else {
4637 gspca_frame_add(gspca_dev, INTER_PACKET,
4638 data, len);
4639 }
4640 return;
4641 }
4642
4643 switch (*data) {
4644 case 0x55:
4645 gspca_frame_add(gspca_dev, LAST_PACKET, data, 0);
4646
4647 if (len < 8
4648 || data[1] != 0xff || data[2] != 0xd8
4649 || data[3] != 0xff || data[4] != 0xfe) {
4650
4651 /* Have only seen this with corrupt frames */
4652 gspca_dev->last_packet_type = DISCARD_PACKET;
4653 return;
4654 }
4655 if (data[7] != sd->quality)
4656 set_dqt(gspca_dev, data[7]);
4657 gspca_frame_add(gspca_dev, FIRST_PACKET,
4658 sd->jpeg_hdr, JPEG_HDR_SZ);
4659 gspca_frame_add(gspca_dev, INTER_PACKET,
4660 data + 8, len - 8);
4661 break;
4662 case 0xaa:
4663 gspca_dev->last_packet_type = DISCARD_PACKET;
4664 break;
4665 case 0xcc:
4666 if (data[1] != 0xff || data[2] != 0xd8)
4667 gspca_frame_add(gspca_dev, INTER_PACKET,
4668 data + 1, len - 1);
4669 else
4670 gspca_dev->last_packet_type = DISCARD_PACKET;
4671 break;
4672 }
4673 }
4674
4675 /* -- do autogain -- */
4676 /* gain setting is done in setexposure() for tp6810 */
4677 static void setgain(struct gspca_dev *gspca_dev) {}
4678 /* !! coarse_grained_expo_autogain is not used !! */
4679 #define exp_too_low_cnt bridge
4680 #define exp_too_high_cnt sensor
4681
4682 #include "autogain_functions.h"
4683 static void sd_dq_callback(struct gspca_dev *gspca_dev)
4684 {
4685 struct sd *sd = (struct sd *) gspca_dev;
4686 int ret, alen;
4687 int luma, expo;
4688
4689 if (sd->ag_cnt < 0)
4690 return;
4691 if (--sd->ag_cnt > 5)
4692 return;
4693 switch (sd->ag_cnt) {
4694 /* case 5: */
4695 default:
4696 reg_w(gspca_dev, 0x7d, 0x00);
4697 break;
4698 case 4:
4699 reg_w(gspca_dev, 0x27, 0xb0);
4700 break;
4701 case 3:
4702 reg_w(gspca_dev, 0x0c, 0x01);
4703 break;
4704 case 2:
4705 ret = usb_bulk_msg(gspca_dev->dev,
4706 usb_rcvbulkpipe(gspca_dev->dev, 0x02),
4707 gspca_dev->usb_buf,
4708 32,
4709 &alen,
4710 500);
4711 if (ret < 0) {
4712 pr_err("bulk err %d\n", ret);
4713 break;
4714 }
4715 /* values not used (unknown) */
4716 break;
4717 case 1:
4718 reg_w(gspca_dev, 0x27, 0xd0);
4719 break;
4720 case 0:
4721 ret = usb_bulk_msg(gspca_dev->dev,
4722 usb_rcvbulkpipe(gspca_dev->dev, 0x02),
4723 gspca_dev->usb_buf,
4724 32,
4725 &alen,
4726 500);
4727 if (ret < 0) {
4728 pr_err("bulk err %d\n", ret);
4729 break;
4730 }
4731 luma = ((gspca_dev->usb_buf[8] << 8) + gspca_dev->usb_buf[7] +
4732 (gspca_dev->usb_buf[11] << 8) + gspca_dev->usb_buf[10] +
4733 (gspca_dev->usb_buf[14] << 8) + gspca_dev->usb_buf[13] +
4734 (gspca_dev->usb_buf[17] << 8) + gspca_dev->usb_buf[16] +
4735 (gspca_dev->usb_buf[20] << 8) + gspca_dev->usb_buf[19] +
4736 (gspca_dev->usb_buf[23] << 8) + gspca_dev->usb_buf[22] +
4737 (gspca_dev->usb_buf[26] << 8) + gspca_dev->usb_buf[25] +
4738 (gspca_dev->usb_buf[29] << 8) + gspca_dev->usb_buf[28])
4739 / 8;
4740 if (gspca_dev->width == 640)
4741 luma /= 4;
4742 reg_w(gspca_dev, 0x7d, 0x00);
4743
4744 expo = sd->ctrls[EXPOSURE].val;
4745 ret = auto_gain_n_exposure(gspca_dev, luma,
4746 60, /* desired luma */
4747 6, /* dead zone */
4748 2, /* gain knee */
4749 70); /* expo knee */
4750 sd->ag_cnt = AG_CNT_START;
4751 if (sd->bridge == BRIDGE_TP6810) {
4752 if ((expo >= 128 && sd->ctrls[EXPOSURE].val < 128)
4753 || (expo < 128 && sd->ctrls[EXPOSURE].val >= 128))
4754 setframerate(gspca_dev);
4755 }
4756 break;
4757 }
4758 }
4759
4760 /* get stream parameters (framerate) */
4761 static void sd_get_streamparm(struct gspca_dev *gspca_dev,
4762 struct v4l2_streamparm *parm)
4763 {
4764 struct sd *sd = (struct sd *) gspca_dev;
4765 struct v4l2_captureparm *cp = &parm->parm.capture;
4766 struct v4l2_fract *tpf = &cp->timeperframe;
4767 int fr, i;
4768
4769 cp->capability |= V4L2_CAP_TIMEPERFRAME;
4770 tpf->numerator = 1;
4771 i = get_fr_idx(gspca_dev);
4772 if (i & 0x80) {
4773 if (sd->bridge == BRIDGE_TP6800)
4774 fr = rates[6 - (i & 0x07)];
4775 else
4776 fr = rates_6810[7 - (i & 0x07)];
4777 } else {
4778 fr = rates[6 - i];
4779 }
4780 tpf->denominator = fr;
4781 }
4782
4783 /* set stream parameters (framerate) */
4784 static void sd_set_streamparm(struct gspca_dev *gspca_dev,
4785 struct v4l2_streamparm *parm)
4786 {
4787 struct sd *sd = (struct sd *) gspca_dev;
4788 struct v4l2_captureparm *cp = &parm->parm.capture;
4789 struct v4l2_fract *tpf = &cp->timeperframe;
4790 int fr, i;
4791
4792 sd->framerate = tpf->denominator / tpf->numerator;
4793 if (gspca_dev->streaming)
4794 setframerate(gspca_dev);
4795
4796 /* Return the actual framerate */
4797 i = get_fr_idx(gspca_dev);
4798 if (i & 0x80)
4799 fr = rates_6810[7 - (i & 0x07)];
4800 else
4801 fr = rates[6 - i];
4802 tpf->numerator = 1;
4803 tpf->denominator = fr;
4804 }
4805
4806 static int sd_set_jcomp(struct gspca_dev *gspca_dev,
4807 struct v4l2_jpegcompression *jcomp)
4808 {
4809 struct sd *sd = (struct sd *) gspca_dev;
4810
4811 if (sd->sensor == SENSOR_SOI763A)
4812 jpeg_set_qual(sd->jpeg_hdr, jcomp->quality);
4813 /* else
4814 fixme: TODO
4815 */
4816 return gspca_dev->usb_err;
4817 }
4818
4819 static int sd_get_jcomp(struct gspca_dev *gspca_dev,
4820 struct v4l2_jpegcompression *jcomp)
4821 {
4822 struct sd *sd = (struct sd *) gspca_dev;
4823
4824 memset(jcomp, 0, sizeof *jcomp);
4825 jcomp->quality = jpeg_q[sd->quality];
4826 jcomp->jpeg_markers = V4L2_JPEG_MARKER_DHT
4827 | V4L2_JPEG_MARKER_DQT;
4828 return 0;
4829 }
4830
4831 static struct ctrl sd_ctrls[NCTRLS] = {
4832 [EXPOSURE] = {
4833 {
4834 .id = V4L2_CID_EXPOSURE,
4835 .type = V4L2_CTRL_TYPE_INTEGER,
4836 .name = "Exposure",
4837 .minimum = 0x01,
4838 .maximum = 0xdc,
4839 .step = 1,
4840 .default_value = 0x4e,
4841 },
4842 .set_control = setexposure
4843 },
4844 [QUALITY] = {
4845 {
4846 .id = V4L2_CID_PRIVATE_BASE,
4847 .type = V4L2_CTRL_TYPE_INTEGER,
4848 .name = "Compression quality",
4849 .minimum = 0,
4850 .maximum = 15,
4851 .step = 1,
4852 .default_value = 13,
4853 },
4854 .set_control = setquality
4855 },
4856 [RGAIN] = {
4857 {
4858 .id = V4L2_CID_RED_BALANCE,
4859 .type = V4L2_CTRL_TYPE_INTEGER,
4860 .name = "Red balance",
4861 .minimum = 0,
4862 .maximum = 4095,
4863 .step = 1,
4864 .default_value = 256,
4865 },
4866 .set_control = setrgain
4867 },
4868 [GAIN] = {
4869 {
4870 .id = V4L2_CID_GAIN,
4871 .type = V4L2_CTRL_TYPE_INTEGER,
4872 .name = "Gain",
4873 .minimum = 0,
4874 .maximum = 4095,
4875 .step = 1,
4876 .default_value = 256,
4877 },
4878 .set = sd_setgain
4879 },
4880 [BGAIN] = {
4881 {
4882 .id = V4L2_CID_BLUE_BALANCE,
4883 .type = V4L2_CTRL_TYPE_INTEGER,
4884 .name = "Blue balance",
4885 .minimum = 0,
4886 .maximum = 4095,
4887 .step = 1,
4888 .default_value = 256,
4889 },
4890 .set_control = setbgain
4891 },
4892 [SHARPNESS] = {
4893 {
4894 .id = V4L2_CID_SHARPNESS,
4895 .type = V4L2_CTRL_TYPE_INTEGER,
4896 .name = "Sharpness",
4897 .minimum = 0,
4898 .maximum = 3,
4899 .step = 1,
4900 .default_value = 2,
4901 },
4902 .set_control = setsharpness
4903 },
4904 [GAMMA] = {
4905 {
4906 .id = V4L2_CID_GAMMA,
4907 .type = V4L2_CTRL_TYPE_INTEGER,
4908 .name = "Gamma",
4909 .minimum = 0,
4910 .maximum = NGAMMA - 1,
4911 .step = 1,
4912 .default_value = 1,
4913 },
4914 .set_control = setgamma
4915 },
4916 [AUTOGAIN] = {
4917 {
4918 .id = V4L2_CID_AUTOGAIN,
4919 .type = V4L2_CTRL_TYPE_BOOLEAN,
4920 .name = "Auto Gain",
4921 .minimum = 0,
4922 .maximum = 1,
4923 .step = 1,
4924 .default_value = AUTOGAIN_DEF
4925 },
4926 .set_control = setautogain
4927 },
4928 };
4929
4930 static const struct sd_desc sd_desc = {
4931 .name = KBUILD_MODNAME,
4932 .ctrls = sd_ctrls,
4933 .nctrls = NCTRLS,
4934 .config = sd_config,
4935 .init = sd_init,
4936 .isoc_init = sd_isoc_init,
4937 .start = sd_start,
4938 .stopN = sd_stopN,
4939 .pkt_scan = sd_pkt_scan,
4940 .dq_callback = sd_dq_callback,
4941 .get_streamparm = sd_get_streamparm,
4942 .set_streamparm = sd_set_streamparm,
4943 .get_jcomp = sd_get_jcomp,
4944 .set_jcomp = sd_set_jcomp,
4945 };
4946
4947 static const struct usb_device_id device_table[] = {
4948 {USB_DEVICE(0x06a2, 0x0003), .driver_info = BRIDGE_TP6800},
4949 {USB_DEVICE(0x06a2, 0x6810), .driver_info = BRIDGE_TP6810},
4950 {} /* Terminating entry */
4951 };
4952
4953 MODULE_DEVICE_TABLE(usb, device_table);
4954
4955 static int sd_probe(struct usb_interface *interface,
4956 const struct usb_device_id *id)
4957 {
4958 return gspca_dev_probe(interface, id, &sd_desc, sizeof(struct sd),
4959 THIS_MODULE);
4960 }
4961
4962 static struct usb_driver sd_driver = {
4963 .name = KBUILD_MODNAME,
4964 .id_table = device_table,
4965 .probe = sd_probe,
4966 .disconnect = gspca_disconnect,
4967 #ifdef CONFIG_PM
4968 .suspend = gspca_suspend,
4969 .resume = gspca_resume,
4970 .reset_resume = gspca_resume,
4971 #endif
4972 };
4973
4974 module_usb_driver(sd_driver);
4975
4976 module_param(force_sensor, int, 0644);
4977 MODULE_PARM_DESC(force_sensor,
4978 "Force sensor. 0: cx0342, 1: soi763a");