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