Version:  2.0.40 2.2.26 2.4.37 3.13 3.14 3.15 3.16 3.17 3.18 3.19 4.0 4.1 4.2 4.3 4.4 4.5 4.6 4.7 4.8 4.9 4.10

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

This page was automatically generated by LXR 0.3.1 (source).  •  Linux is a registered trademark of Linus Torvalds  •  Contact us