diff --git a/NEWS b/NEWS
index c9d2b9ce..26fdc064 100644
--- a/NEWS
+++ b/NEWS
@@ -1,6 +1,25 @@
This file lists notable changes in each release. For the full history of all
changes, see ChangeLog.
+2015-02-03: v0.6.0 release
+
+* Drivers:
+ - Reduce duplication between AES3500 and AES4000 drivers and
+ add support for AES3500 device
+ - Add support for UPEK 147e:2020 and Upek Eikon 2 devices
+ - Add EgisTec ES603 driver
+ - Add VFS5011 driver
+ - Always perform 5 scans for image enrollment
+ - Better verification with AES1660 driver
+ - Better verification for a number of AES drivers
+
+* Library:
+ - Always use Pixman for image manipulation, gdk-pixbuf and ImageMagick
+ are not supported any more.
+
+* Udev rules:
+ - Fix warning when USB hub or system does not support power management
+
2013-08-11: v0.5.1 release
* Drivers
diff --git a/configure.ac b/configure.ac
index d4536f69..a9586aa9 100644
--- a/configure.ac
+++ b/configure.ac
@@ -1,5 +1,5 @@
-AC_INIT([libfprint], [0.5.1])
-AM_INIT_AUTOMAKE([1.11 no-dist-gzip dist-xz check-news])
+AC_INIT([libfprint], [0.6.0])
+AM_INIT_AUTOMAKE([1.11 no-dist-gzip dist-xz check-news subdir-objects])
AC_CONFIG_MACRO_DIR([m4])
AC_CONFIG_SRCDIR([libfprint/core.c])
AC_CONFIG_HEADERS([config.h])
@@ -23,11 +23,12 @@ AC_SUBST(lt_major)
AC_SUBST(lt_revision)
AC_SUBST(lt_age)
-all_drivers="upeke2 upekts upektc upeksonly vcom5s uru4000 fdu2000 aes1610 aes1660 aes2501 aes2550 aes2660 aes4000 vfs101 vfs301"
+all_drivers="upekts upektc upeksonly vcom5s uru4000 fdu2000 aes1610 aes1660 aes2501 aes2550 aes2660 aes3500 aes4000 vfs101 vfs301 vfs5011 upektc_img etes603"
require_imaging='no'
require_aeslib='no'
require_aesX660='no'
+require_aes3k='no'
enable_upeke2='no'
enable_upekts='no'
enable_upektc='no'
@@ -40,9 +41,13 @@ enable_aes1660='no'
enable_aes2501='no'
enable_aes2550='no'
enable_aes2660='no'
+enable_aes3500='no'
enable_aes4000='no'
enable_vfs101='no'
enable_vfs301='no'
+enable_vfs5011='no'
+enable_upektc_img='no'
+enable_etes603='no'
AC_ARG_WITH([drivers],[AS_HELP_STRING([--with-drivers],
[List of drivers to enable])],
@@ -111,10 +116,18 @@ for driver in `echo ${drivers} | sed -e 's/,/ /g' -e 's/,$//g'`; do
require_aesX660="yes"
enable_aes2660="yes"
;;
+ aes3500)
+ AC_DEFINE([ENABLE_AES3500], [], [Build AuthenTec AES3500 driver])
+ require_aeslib="yes"
+ require_imaging="yes"
+ require_aes3k="yes"
+ enable_aes3500="yes"
+ ;;
aes4000)
AC_DEFINE([ENABLE_AES4000], [], [Build AuthenTec AES4000 driver])
require_aeslib="yes"
require_imaging="yes"
+ require_aes3k="yes"
enable_aes4000="yes"
;;
vfs101)
@@ -125,6 +138,18 @@ for driver in `echo ${drivers} | sed -e 's/,/ /g' -e 's/,$//g'`; do
AC_DEFINE([ENABLE_VFS301], [], [Build Validity VFS301/VFS300 driver])
enable_vfs301="yes"
;;
+ vfs5011)
+ AC_DEFINE([ENABLE_VFS5011], [], [Build Validity VFS5011 driver])
+ enable_vfs5011="yes"
+ ;;
+ upektc_img)
+ AC_DEFINE([ENABLE_UPEKTC_IMG], [], [Build Upek TouchChip Fingerprint Coprocessor driver])
+ enable_upektc_img="yes"
+ ;;
+ etes603)
+ AC_DEFINE([ENABLE_ETES603], [], [Build EgisTec ES603 driver])
+ enable_etes603="yes"
+ ;;
esac
done
@@ -140,11 +165,16 @@ AM_CONDITIONAL([ENABLE_AES1660], [test "$enable_aes1660" = "yes"])
AM_CONDITIONAL([ENABLE_AES2501], [test "$enable_aes2501" = "yes"])
AM_CONDITIONAL([ENABLE_AES2550], [test "$enable_aes2550" = "yes"])
AM_CONDITIONAL([ENABLE_AES2660], [test "$enable_aes2660" = "yes"])
+AM_CONDITIONAL([ENABLE_AES3500], [test "$enable_aes3500" = "yes"])
AM_CONDITIONAL([ENABLE_AES4000], [test "$enable_aes4000" = "yes"])
AM_CONDITIONAL([REQUIRE_AESLIB], [test "$require_aeslib" = "yes"])
AM_CONDITIONAL([REQUIRE_AESX660], [test "$require_aesX660" = "yes"])
+AM_CONDITIONAL([REQUIRE_AES3K], [test "$require_aes3k" = "yes"])
AM_CONDITIONAL([ENABLE_VFS101], [test "$enable_vfs101" = "yes"])
AM_CONDITIONAL([ENABLE_VFS301], [test "$enable_vfs301" = "yes"])
+AM_CONDITIONAL([ENABLE_VFS5011], [test "$enable_vfs5011" = "yes"])
+AM_CONDITIONAL([ENABLE_UPEKTC_IMG], [test "$enable_upektc_img" = "yes"])
+AM_CONDITIONAL([ENABLE_ETES603], [test "$enable_etes603" = "yes"])
PKG_CHECK_MODULES(LIBUSB, [libusb-1.0 >= 0.9.1])
@@ -160,8 +190,7 @@ PKG_CHECK_MODULES(GLIB, [glib-2.0 >= 2.28])
AC_SUBST(GLIB_CFLAGS)
AC_SUBST(GLIB_LIBS)
-imagemagick_found=no
-gdkpixbuf_found=no
+pixman_found=no
AC_ARG_ENABLE(udev-rules,
AC_HELP_STRING([--enable-udev-rules],[Update the udev rules]),
@@ -189,20 +218,13 @@ AC_MSG_NOTICE([installing udev rules in ${ac_with_udev_rules_dir}])
AC_SUBST([udev_rulesdir],[${ac_with_udev_rules_dir}])
if test "$require_imaging" = "yes"; then
- PKG_CHECK_MODULES(IMAGING, gthread-2.0 gdk-pixbuf-2.0, [gdkpixbuf_found=yes], [gdkpixbuf_found=no])
- if test "$gdkpixbuf_found" != "yes"; then
- PKG_CHECK_MODULES(IMAGING, ImageMagick, [imagemagick_found=yes], [imagemagick_found=no])
+ PKG_CHECK_MODULES(IMAGING, pixman-1, [pixman_found=yes], [pixman_found=no])
+ if test "$pixman_found" != "yes"; then
+ AC_MSG_ERROR([pixman is required for imaging support])
fi
fi
-if test "$require_imaging" = "yes"; then
- if test "$gdkpixbuf_found" != "yes" && test "$imagemagick_found" != "yes"; then
- AC_MSG_ERROR([gdk-pixbuf or ImageMagick is required for imaging support])
- fi
-fi
-
-AM_CONDITIONAL([REQUIRE_GDKPIXBUF], [test "$gdkpixbuf_found" = "yes"])
-AM_CONDITIONAL([REQUIRE_IMAGEMAGICK], [test "$imagemagick_found" = "yes"])
+AM_CONDITIONAL([REQUIRE_PIXMAN], [test "$pixman_found" = "yes"])
AC_SUBST(IMAGING_CFLAGS)
AC_SUBST(IMAGING_LIBS)
@@ -272,10 +294,8 @@ AM_CFLAGS="-std=gnu99 $inline_cflags -Wall -Wundef -Wunused -Wstrict-prototypes
AC_SUBST(AM_CFLAGS)
if test "$require_imaging" = "yes"; then
- if test x$gdkpixbuf_found != no; then
- AC_MSG_NOTICE([** Using gdk-pixbuf for imaging])
- else
- AC_MSG_NOTICE([** Using ImageMagick for imaging])
+ if test x$pixman_found != no; then
+ AC_MSG_NOTICE([** Using pixman for imaging])
fi
else
AC_MSG_NOTICE([ Imaging support disabled])
@@ -341,6 +361,11 @@ if test x$enable_aes2660 != xno ; then
else
AC_MSG_NOTICE([ aes2660 driver disabled])
fi
+if test x$enable_aes3500 != xno ; then
+ AC_MSG_NOTICE([** aes3500 driver enabled])
+else
+ AC_MSG_NOTICE([ aes3500 driver disabled])
+fi
if test x$enable_aes4000 != xno ; then
AC_MSG_NOTICE([** aes4000 driver enabled])
else
@@ -356,6 +381,21 @@ if test x$enable_vfs301 != xno ; then
else
AC_MSG_NOTICE([ vfs301 driver disabled])
fi
+if test x$enable_vfs5011 != xno ; then
+ AC_MSG_NOTICE([** vfs5011 driver enabled])
+else
+ AC_MSG_NOTICE([ vfs5011 driver disabled])
+fi
+if test x$enable_upektc_img != xno ; then
+ AC_MSG_NOTICE([** upektc_img driver enabled])
+else
+ AC_MSG_NOTICE([ upektc_img driver disabled])
+fi
+if test x$enable_etes603 != xno ; then
+ AC_MSG_NOTICE([** etes603 driver enabled])
+else
+ AC_MSG_NOTICE([ etes603 driver disabled])
+fi
if test x$require_aeslib != xno ; then
AC_MSG_NOTICE([** aeslib helper functions enabled])
else
@@ -366,6 +406,11 @@ if test x$require_aesX660 != xno ; then
else
AC_MSG_NOTICE([ aesX660 common routines disabled])
fi
+if test x$require_aes3k != xno ; then
+ AC_MSG_NOTICE([** aes3k common routines enabled])
+else
+ AC_MSG_NOTICE([ aes3k common routines disabled])
+fi
AC_CONFIG_FILES([libfprint.pc] [Makefile] [libfprint/Makefile] [examples/Makefile] [doc/Makefile])
AC_OUTPUT
diff --git a/libfprint/Makefile.am b/libfprint/Makefile.am
index 4dee3011..b86d0f8e 100644
--- a/libfprint/Makefile.am
+++ b/libfprint/Makefile.am
@@ -12,11 +12,15 @@ AES1660_SRC = drivers/aes1660.c drivers/aes1660.h
AES2501_SRC = drivers/aes2501.c drivers/aes2501.h
AES2550_SRC = drivers/aes2550.c drivers/aes2550.h
AES2660_SRC = drivers/aes2660.c drivers/aes2660.h
+AES3500_SRC = drivers/aes3500.c
AES4000_SRC = drivers/aes4000.c
FDU2000_SRC = drivers/fdu2000.c
VCOM5S_SRC = drivers/vcom5s.c
VFS101_SRC = drivers/vfs101.c
VFS301_SRC = drivers/vfs301.c drivers/vfs301_proto.c drivers/vfs301_proto.h drivers/vfs301_proto_fragments.h
+VFS5011_SRC = drivers/vfs5011.c drivers/vfs5011_proto.h
+UPEKTC_IMG_SRC = drivers/upektc_img.c drivers/upektc_img.h
+ETES603_SRC = drivers/etes603.c
EXTRA_DIST = \
$(UPEKE2_SRC) \
@@ -29,17 +33,22 @@ EXTRA_DIST = \
$(AES2501_SRC) \
$(AES2550_SRC) \
$(AES2660_SRC) \
+ $(AES3500_SRC) \
$(AES4000_SRC) \
$(FDU2000_SRC) \
$(VCOM5S_SRC) \
$(VFS101_SRC) \
$(VFS301_SRC) \
+ $(VFS5011_SRC) \
+ $(UPEKTC_IMG_SRC) \
+ $(ETES603_SRC) \
drivers/aesx660.c \
drivers/aesx660.h \
+ drivers/aes3k.c \
+ drivers/aes3k.h \
drivers/driver_ids.h \
aeslib.c aeslib.h \
- imagemagick.c \
- gdkpixbuf.c \
+ pixman.c \
60-fprint-autosuspend.rules
DRIVER_SRC =
@@ -87,7 +96,7 @@ libfprint_la_LDFLAGS = -version-info @lt_major@:@lt_revision@:@lt_age@
libfprint_la_LIBADD = -lm $(LIBUSB_LIBS) $(GLIB_LIBS) $(CRYPTO_LIBS)
fprint_list_udev_rules_SOURCES = fprint-list-udev-rules.c
-fprint_list_udev_rules_CFLAGS = -fvisibility=hidden -I$(srcdir)/nbis/include $(LIBUSB_CFLAGS) $(GLIB_CFLAGS) $(IMAGEMAGICK_CFLAGS) $(CRYPTO_CFLAGS) $(AM_CFLAGS)
+fprint_list_udev_rules_CFLAGS = -fvisibility=hidden -I$(srcdir)/nbis/include $(LIBUSB_CFLAGS) $(GLIB_CFLAGS) $(CRYPTO_CFLAGS) $(AM_CFLAGS)
fprint_list_udev_rules_LDADD = $(builddir)/libfprint.la $(GLIB_LIBS)
udev_rules_DATA = 60-fprint-autosuspend.rules
@@ -145,6 +154,10 @@ if ENABLE_AES2660
DRIVER_SRC += $(AES2660_SRC)
endif
+if ENABLE_AES3500
+DRIVER_SRC += $(AES3500_SRC)
+endif
+
if ENABLE_AES4000
DRIVER_SRC += $(AES4000_SRC)
endif
@@ -157,14 +170,20 @@ if ENABLE_VFS301
DRIVER_SRC += $(VFS301_SRC)
endif
-if REQUIRE_IMAGEMAGICK
-OTHER_SRC += imagemagick.c
-libfprint_la_CFLAGS += $(IMAGING_CFLAGS)
-libfprint_la_LIBADD += $(IMAGING_LIBS)
+if ENABLE_VFS5011
+DRIVER_SRC += $(VFS5011_SRC)
endif
-if REQUIRE_GDKPIXBUF
-OTHER_SRC += gdkpixbuf.c
+if ENABLE_UPEKTC_IMG
+DRIVER_SRC += $(UPEKTC_IMG_SRC)
+endif
+
+if ENABLE_ETES603
+DRIVER_SRC += $(ETES603_SRC)
+endif
+
+if REQUIRE_PIXMAN
+OTHER_SRC += pixman.c
libfprint_la_CFLAGS += $(IMAGING_CFLAGS)
libfprint_la_LIBADD += $(IMAGING_LIBS)
endif
@@ -177,6 +196,10 @@ if REQUIRE_AESX660
OTHER_SRC += drivers/aesx660.c drivers/aesx660.h
endif
+if REQUIRE_AES3K
+OTHER_SRC += drivers/aes3k.c drivers/aes3k.h
+endif
+
libfprint_la_SOURCES = \
fp_internal.h \
async.c \
diff --git a/libfprint/aeslib.c b/libfprint/aeslib.c
index 00ddfd91..8c0381a4 100644
--- a/libfprint/aeslib.c
+++ b/libfprint/aeslib.c
@@ -158,127 +158,268 @@ void aes_write_regv(struct fp_img_dev *dev, const struct aes_regwrite *regs,
continue_write_regv(wdata);
}
-void aes_assemble_image(unsigned char *input, size_t width, size_t height,
- unsigned char *output)
+static inline unsigned char aes_get_pixel(struct aes_stripe *frame,
+ unsigned int x,
+ unsigned int y,
+ unsigned int frame_width,
+ unsigned int frame_height)
{
- size_t row, column;
+ unsigned char ret;
- for (column = 0; column < width; column++) {
- for (row = 0; row < height; row += 2) {
- output[width * row + column] = (*input & 0x0f) * 17;
- output[width * (row + 1) + column] = ((*input & 0xf0) >> 4) * 17;
- input++;
+ ret = frame->data[x * (frame_height >> 1) + (y >> 1)];
+ ret = y % 2 ? ret >> 4 : ret & 0xf;
+ ret *= 17;
+
+ return ret;
+}
+
+static unsigned int calc_error(struct aes_stripe *first_frame,
+ struct aes_stripe *second_frame,
+ int dx,
+ int dy,
+ unsigned int frame_width,
+ unsigned int frame_height)
+{
+ unsigned int width, height;
+ unsigned int x1, y1, x2, y2, err, i, j;
+
+ width = frame_width - (dx > 0 ? dx : -dx);
+ height = frame_height - dy;
+
+ y1 = 0;
+ y2 = dy;
+ i = 0;
+ err = 0;
+ do {
+ x1 = dx < 0 ? 0 : dx;
+ x2 = dx < 0 ? -dx : 0;
+ j = 0;
+
+ do {
+ unsigned char v1, v2;
+
+
+ v1 = aes_get_pixel(first_frame, x1, y1, frame_width, frame_height);
+ v2 = aes_get_pixel(second_frame, x2, y2, frame_width, frame_height);
+ err += v1 > v2 ? v1 - v2 : v2 - v1;
+ j++;
+ x1++;
+ x2++;
+
+ } while (j < width);
+ i++;
+ y1++;
+ y2++;
+ } while (i < height);
+
+ /* Normalize error */
+ err *= (frame_height * frame_width);
+ err /= (height * width);
+
+ if (err == 0)
+ return INT_MAX;
+
+ return err;
+}
+
+/* This function is rather CPU-intensive. It's better to use hardware
+ * to detect movement direction when possible.
+ */
+static void find_overlap(struct aes_stripe *first_frame,
+ struct aes_stripe *second_frame,
+ unsigned int *min_error,
+ unsigned int frame_width,
+ unsigned int frame_height)
+{
+ int dx, dy;
+ unsigned int err;
+ *min_error = INT_MAX;
+
+ /* Seeking in horizontal and vertical dimensions,
+ * for horizontal dimension we'll check only 8 pixels
+ * in both directions. For vertical direction diff is
+ * rarely less than 2, so start with it.
+ */
+ for (dy = 2; dy < frame_height; dy++) {
+ for (dx = -8; dx < 8; dx++) {
+ err = calc_error(first_frame, second_frame,
+ dx, dy, frame_width, frame_height);
+ if (err < *min_error) {
+ *min_error = err;
+ second_frame->delta_x = -dx;
+ second_frame->delta_y = dy;
+ }
}
}
}
-/* find overlapping parts of frames */
-static unsigned int find_overlap(unsigned char *first_frame,
- unsigned char *second_frame, unsigned int *min_error,
- unsigned int frame_width, unsigned int frame_height)
-{
- unsigned int dy;
- unsigned int not_overlapped_height = 0;
- /* 255 is highest brightness value for an 8bpp image */
- *min_error = 255 * frame_width * frame_height;
- for (dy = 0; dy < frame_height; dy++) {
- /* Calculating difference (error) between parts of frames */
- unsigned int i;
- unsigned int error = 0;
- for (i = 0; i < frame_width * (frame_height - dy); i++) {
- /* Using ? operator to avoid abs function */
- error += first_frame[i] > second_frame[i] ?
- (first_frame[i] - second_frame[i]) :
- (second_frame[i] - first_frame[i]);
- }
-
- /* Normalize error */
- error *= 15;
- error /= i;
- if (error < *min_error) {
- *min_error = error;
- not_overlapped_height = dy;
- }
- first_frame += frame_width;
- }
-
- return not_overlapped_height;
-}
-
-/* assemble a series of frames into a single image */
-static unsigned int assemble(GSList *list_entry, size_t num_stripes,
+unsigned int aes_calc_delta(GSList *stripes, size_t num_stripes,
unsigned int frame_width, unsigned int frame_height,
- unsigned char *output, gboolean reverse, unsigned int *errors_sum)
+ gboolean reverse)
{
- uint8_t *assembled = output;
- int frame;
- uint32_t image_height = frame_height;
- unsigned int min_error, frame_size = frame_width * frame_height;
- *errors_sum = 0;
+ GSList *list_entry = stripes;
+ GTimer *timer;
+ int frame = 1;
+ int height = 0;
+ struct aes_stripe *prev_stripe = list_entry->data;
+ unsigned int min_error;
- if (reverse)
- output += (num_stripes - 1) * frame_size;
- for (frame = 0; frame < num_stripes; frame++) {
- aes_assemble_image(list_entry->data, frame_width, frame_height, output);
+ list_entry = g_slist_next(list_entry);
- if (reverse)
- output -= frame_size;
+ timer = g_timer_new();
+ do {
+ struct aes_stripe *cur_stripe = list_entry->data;
+
+ if (reverse) {
+ find_overlap(prev_stripe, cur_stripe, &min_error,
+ frame_width, frame_height);
+ prev_stripe->delta_y = -prev_stripe->delta_y;
+ prev_stripe->delta_x = -prev_stripe->delta_x;
+ }
else
- output += frame_size;
+ find_overlap(cur_stripe, prev_stripe, &min_error,
+ frame_width, frame_height);
+
+ frame++;
+ height += prev_stripe->delta_y;
+ prev_stripe = cur_stripe;
list_entry = g_slist_next(list_entry);
+
+ } while (frame < num_stripes);
+
+ if (height < 0)
+ height = -height;
+ height += frame_height;
+ g_timer_stop(timer);
+ fp_dbg("calc delta completed in %f secs", g_timer_elapsed(timer, NULL));
+ g_timer_destroy(timer);
+
+ return height;
+}
+
+static inline void aes_blit_stripe(struct fp_img *img,
+ struct aes_stripe *stripe,
+ int x, int y, unsigned int frame_width,
+ unsigned int frame_height)
+{
+ unsigned int ix, iy;
+ unsigned int fx, fy;
+ unsigned int width, height;
+
+ /* Find intersection */
+ if (x < 0) {
+ width = frame_width + x;
+ ix = 0;
+ fx = -x;
+ } else {
+ ix = x;
+ fx = 0;
+ width = frame_width;
+ }
+ if ((ix + width) > img->width)
+ width = img->width - ix;
+
+ if (y < 0) {
+ iy = 0;
+ fy = -y;
+ height = frame_height + y;
+ } else {
+ iy = y;
+ fy = 0;
+ height = frame_height;
}
- /* Detecting where frames overlaped */
- output = assembled;
- for (frame = 1; frame < num_stripes; frame++) {
- int not_overlapped;
+ if (fx > frame_width)
+ return;
- output += frame_size;
- not_overlapped = find_overlap(assembled, output, &min_error,
- frame_width, frame_height);
- *errors_sum += min_error;
- image_height += not_overlapped;
- assembled += frame_width * not_overlapped;
- memcpy(assembled, output, frame_size);
+ if (fy > frame_height)
+ return;
+
+ if (ix > img->width)
+ return;
+
+ if (iy > img->height)
+ return;
+
+ if ((iy + height) > img->height)
+ height = img->height - iy;
+
+ for (; fy < height; fy++, iy++) {
+ if (x < 0) {
+ ix = 0;
+ fx = -x;
+ } else {
+ ix = x;
+ fx = 0;
+ }
+ for (; fx < width; fx++, ix++) {
+ img->data[ix + (iy * img->width)] = aes_get_pixel(stripe, fx, fy, frame_width, frame_height);
+ }
}
- return image_height;
}
struct fp_img *aes_assemble(GSList *stripes, size_t stripes_len,
- unsigned int frame_width, unsigned int frame_height)
+ unsigned int frame_width, unsigned int frame_height, unsigned int img_width)
{
- size_t final_size;
+ GSList *stripe;
struct fp_img *img;
- unsigned int frame_size = frame_width * frame_height;
- unsigned int errors_sum, r_errors_sum;
+ int height = 0;
+ int i, y, x;
+ gboolean reverse = FALSE;
+ struct aes_stripe *aes_stripe;
BUG_ON(stripes_len == 0);
+ BUG_ON(img_width < frame_width);
- /* create buffer big enough for max image */
- img = fpi_img_new(stripes_len * frame_size);
+ /* Calculate height */
+ i = 0;
+ stripe = stripes;
- img->flags = FP_IMG_COLORS_INVERTED;
- img->height = assemble(stripes, stripes_len,
- frame_width, frame_height,
- img->data, FALSE, &errors_sum);
- img->height = assemble(stripes, stripes_len,
- frame_width, frame_height,
- img->data, TRUE, &r_errors_sum);
+ /* No offset for 1st image */
+ aes_stripe = stripe->data;
+ aes_stripe->delta_x = 0;
+ aes_stripe->delta_y = 0;
+ do {
+ aes_stripe = stripe->data;
- if (r_errors_sum > errors_sum) {
- img->height = assemble(stripes, stripes_len,
- frame_width, frame_height,
- img->data, FALSE, &errors_sum);
- img->flags |= FP_IMG_V_FLIPPED | FP_IMG_H_FLIPPED;
- fp_dbg("normal scan direction");
- } else {
- fp_dbg("reversed scan direction");
+ height += aes_stripe->delta_y;
+ i++;
+ stripe = g_slist_next(stripe);
+ } while (i < stripes_len);
+
+ fp_dbg("height is %d", height);
+
+ if (height < 0) {
+ reverse = TRUE;
+ height = -height;
}
- /* now that overlap has been removed, resize output image buffer */
- final_size = img->height * frame_width;
- img = fpi_img_resize(img, final_size);
- img->width = frame_width;
+ /* For last frame */
+ height += frame_height;
+
+ /* Create buffer big enough for max image */
+ img = fpi_img_new(img_width * height);
+ img->flags = FP_IMG_COLORS_INVERTED;
+ img->width = img_width;
+ img->height = height;
+
+ /* Assemble stripes */
+ i = 0;
+ stripe = stripes;
+ y = reverse ? (height - frame_height) : 0;
+ x = (img_width - frame_width) / 2;
+
+ do {
+ aes_stripe = stripe->data;
+
+ y += aes_stripe->delta_y;
+ x += aes_stripe->delta_x;
+
+ aes_blit_stripe(img, aes_stripe, x, y, frame_width, frame_height);
+
+ stripe = g_slist_next(stripe);
+ i++;
+ } while (i < stripes_len);
return img;
}
diff --git a/libfprint/aeslib.h b/libfprint/aeslib.h
index e366262f..7721d111 100644
--- a/libfprint/aeslib.h
+++ b/libfprint/aeslib.h
@@ -27,17 +27,24 @@ struct aes_regwrite {
unsigned char value;
};
+struct aes_stripe {
+ int delta_x;
+ int delta_y;
+ unsigned char data[0];
+};
+
typedef void (*aes_write_regv_cb)(struct fp_img_dev *dev, int result,
void *user_data);
void aes_write_regv(struct fp_img_dev *dev, const struct aes_regwrite *regs,
unsigned int num_regs, aes_write_regv_cb callback, void *user_data);
-void aes_assemble_image(unsigned char *input, size_t width, size_t height,
- unsigned char *output);
+unsigned int aes_calc_delta(GSList *stripes, size_t stripes_len,
+ unsigned int frame_width, unsigned int frame_height,
+ gboolean reverse);
struct fp_img *aes_assemble(GSList *stripes, size_t stripes_len,
- unsigned int frame_width, unsigned int frame_height);
+ unsigned int frame_width, unsigned int frame_height, unsigned int img_width);
#endif
diff --git a/libfprint/async.c b/libfprint/async.c
index 67e3481e..128b7e90 100644
--- a/libfprint/async.c
+++ b/libfprint/async.c
@@ -412,3 +412,101 @@ void fpi_drvcb_identify_stopped(struct fp_dev *dev)
dev->identify_stop_cb(dev, dev->identify_stop_cb_data);
}
+API_EXPORTED int fp_async_capture_start(struct fp_dev *dev, int unconditional,
+ fp_capture_cb callback, void *user_data)
+{
+ struct fp_driver *drv = dev->drv;
+ int r;
+
+ fp_dbg("");
+ if (!drv->capture_start)
+ return -ENOTSUP;
+
+ dev->state = DEV_STATE_CAPTURE_STARTING;
+ dev->capture_cb = callback;
+ dev->capture_cb_data = user_data;
+ dev->unconditional_capture = unconditional;
+
+ r = drv->capture_start(dev);
+ if (r < 0) {
+ dev->capture_cb = NULL;
+ dev->state = DEV_STATE_ERROR;
+ fp_err("failed to start verification, error %d", r);
+ }
+ return r;
+}
+
+/* Drivers call this when capture has started */
+void fpi_drvcb_capture_started(struct fp_dev *dev, int status)
+{
+ fp_dbg("");
+ BUG_ON(dev->state != DEV_STATE_CAPTURE_STARTING);
+ if (status) {
+ if (status > 0) {
+ status = -status;
+ fp_dbg("adjusted to %d", status);
+ }
+ dev->state = DEV_STATE_ERROR;
+ if (dev->capture_cb)
+ dev->capture_cb(dev, status, NULL, dev->capture_cb_data);
+ } else {
+ dev->state = DEV_STATE_CAPTURING;
+ }
+}
+
+/* Drivers call this to report a capture result (which might mark completion) */
+void fpi_drvcb_report_capture_result(struct fp_dev *dev, int result,
+ struct fp_img *img)
+{
+ fp_dbg("result %d", result);
+ BUG_ON(dev->state != DEV_STATE_CAPTURING);
+ if (result < 0 || result == FP_CAPTURE_COMPLETE)
+ dev->state = DEV_STATE_CAPTURE_DONE;
+
+ if (dev->capture_cb)
+ dev->capture_cb(dev, result, img, dev->capture_cb_data);
+ else
+ fp_dbg("ignoring capture result as no callback is subscribed");
+}
+
+/* Drivers call this when capture has stopped */
+void fpi_drvcb_capture_stopped(struct fp_dev *dev)
+{
+ fp_dbg("");
+ BUG_ON(dev->state != DEV_STATE_CAPTURE_STOPPING);
+ dev->state = DEV_STATE_INITIALIZED;
+ if (dev->capture_stop_cb)
+ dev->capture_stop_cb(dev, dev->capture_stop_cb_data);
+}
+
+API_EXPORTED int fp_async_capture_stop(struct fp_dev *dev,
+ fp_capture_stop_cb callback, void *user_data)
+{
+ struct fp_driver *drv = dev->drv;
+ int r;
+
+ fp_dbg("");
+ BUG_ON(dev->state != DEV_STATE_ERROR
+ && dev->state != DEV_STATE_CAPTURING
+ && dev->state != DEV_STATE_CAPTURE_DONE);
+
+ dev->capture_cb = NULL;
+ dev->capture_stop_cb = callback;
+ dev->capture_stop_cb_data = user_data;
+ dev->state = DEV_STATE_CAPTURE_STOPPING;
+
+ if (!drv->capture_start)
+ return -ENOTSUP;
+ if (!drv->capture_stop) {
+ dev->state = DEV_STATE_INITIALIZED;
+ fpi_drvcb_capture_stopped(dev);
+ return 0;
+ }
+
+ r = drv->capture_stop(dev);
+ if (r < 0) {
+ fp_err("failed to stop verification");
+ dev->capture_stop_cb = NULL;
+ }
+ return r;
+}
diff --git a/libfprint/core.c b/libfprint/core.c
index 5315fdc7..2ae76497 100644
--- a/libfprint/core.c
+++ b/libfprint/core.c
@@ -349,6 +349,9 @@ static struct fp_driver * const primitive_drivers[] = {
};
static struct fp_img_driver * const img_drivers[] = {
+#ifdef ENABLE_AES3500
+ &aes3500_driver,
+#endif
#ifdef ENABLE_AES4000
&aes4000_driver,
#endif
@@ -383,9 +386,18 @@ static struct fp_img_driver * const img_drivers[] = {
#ifdef ENABLE_VFS301
&vfs301_driver,
#endif
+#ifdef ENABLE_VFS5011
+ &vfs5011_driver,
+#endif
#ifdef ENABLE_UPEKTC
&upektc_driver,
#endif
+#ifdef ENABLE_UPEKTC_IMG
+ &upektc_img_driver,
+#endif
+#ifdef ENABLE_ETES603
+ &etes603_driver,
+#endif
/*#ifdef ENABLE_FDU2000
&fdu2000_driver,
#endif
@@ -801,7 +813,7 @@ static struct fp_img_dev *dev_to_img_dev(struct fp_dev *dev)
*/
API_EXPORTED int fp_dev_supports_imaging(struct fp_dev *dev)
{
- return dev->drv->type == DRIVER_IMAGING;
+ return dev->drv->capture_start != NULL;
}
/** \ingroup dev
@@ -816,38 +828,6 @@ API_EXPORTED int fp_dev_supports_identification(struct fp_dev *dev)
return dev->drv->identify_start != NULL;
}
-/** \ingroup dev
- * Captures an \ref img "image" from a device. The returned image is the raw
- * image provided by the device, you may wish to \ref img_std "standardize" it.
- *
- * If set, the unconditional flag indicates that the device should
- * capture an image unconditionally, regardless of whether a finger is there
- * or not. If unset, this function will block until a finger is detected on
- * the sensor.
- *
- * \param dev the device
- * \param unconditional whether to unconditionally capture an image, or to only capture when a finger is detected
- * \param image a location to return the captured image. Must be freed with
- * fp_img_free() after use.
- * \return 0 on success, non-zero on error. -ENOTSUP indicates that either the
- * unconditional flag was set but the device does not support this, or that the
- * device does not support imaging.
- * \sa fp_dev_supports_imaging()
- */
-API_EXPORTED int fp_dev_img_capture(struct fp_dev *dev, int unconditional,
- struct fp_img **image)
-{
- struct fp_img_dev *imgdev = dev_to_img_dev(dev);
- if (!imgdev) {
- fp_dbg("image capture on non-imaging device");
- return -ENOTSUP;
- }
-
- //return fpi_imgdev_capture(imgdev, unconditional, image);
- /* FIXME reimplement async */
- return -ENOTSUP;
-}
-
/** \ingroup dev
* Gets the expected width of images that will be captured from the device.
* This function will return -1 for devices that are not
diff --git a/libfprint/data.c b/libfprint/data.c
index bfbf8fb5..3c138c3c 100644
--- a/libfprint/data.c
+++ b/libfprint/data.c
@@ -95,21 +95,33 @@ static const char *finger_num_to_str(enum fp_finger finger)
#endif
static struct fp_print_data *print_data_new(uint16_t driver_id,
- uint32_t devtype, enum fp_print_data_type type, size_t length)
+ uint32_t devtype, enum fp_print_data_type type)
{
- struct fp_print_data *data = g_malloc0(sizeof(*data) + length);
- fp_dbg("length=%zd driver=%02x devtype=%04x", length, driver_id, devtype);
+ struct fp_print_data *data = g_malloc0(sizeof(*data));
+ fp_dbg("driver=%02x devtype=%04x", driver_id, devtype);
data->driver_id = driver_id;
data->devtype = devtype;
data->type = type;
- data->length = length;
return data;
}
-struct fp_print_data *fpi_print_data_new(struct fp_dev *dev, size_t length)
+void fpi_print_data_item_free(struct fp_print_data_item *item)
+{
+ g_free(item);
+}
+
+struct fp_print_data_item *fpi_print_data_item_new(size_t length)
+{
+ struct fp_print_data_item *item = g_malloc(sizeof(*item) + length);
+ item->length = length;
+
+ return item;
+}
+
+struct fp_print_data *fpi_print_data_new(struct fp_dev *dev)
{
return print_data_new(dev->drv->id, dev->devtype,
- fpi_driver_get_data_type(dev->drv), length);
+ fpi_driver_get_data_type(dev->drv));
}
/** \ingroup print_data
@@ -124,27 +136,115 @@ struct fp_print_data *fpi_print_data_new(struct fp_dev *dev, size_t length)
API_EXPORTED size_t fp_print_data_get_data(struct fp_print_data *data,
unsigned char **ret)
{
- struct fpi_print_data_fp1 *buf;
- size_t buflen;
+ struct fpi_print_data_fp2 *out_data;
+ struct fpi_print_data_item_fp2 *out_item;
+ struct fp_print_data_item *item;
+ size_t buflen = 0;
+ GSList *list_item;
+ unsigned char *buf;
fp_dbg("");
- buflen = sizeof(*buf) + data->length;
- buf = malloc(buflen);
- if (!buf)
- return 0;
+ list_item = data->prints;
+ while (list_item) {
+ item = list_item->data;
+ buflen += sizeof(*out_item);
+ buflen += item->length;
+ list_item = g_slist_next(list_item);
+ }
+
+ buflen += sizeof(*out_data);
+ out_data = g_malloc(buflen);
+
+ *ret = (unsigned char *) out_data;
+ buf = out_data->data;
+ out_data->prefix[0] = 'F';
+ out_data->prefix[1] = 'P';
+ out_data->prefix[2] = '2';
+ out_data->driver_id = GUINT16_TO_LE(data->driver_id);
+ out_data->devtype = GUINT32_TO_LE(data->devtype);
+ out_data->data_type = data->type;
+
+ list_item = data->prints;
+ while (list_item) {
+ item = list_item->data;
+ out_item = (struct fpi_print_data_item_fp2 *)buf;
+ out_item->length = GUINT32_TO_LE(item->length);
+ /* FIXME: fp_print_data_item->data content is not endianess agnostic */
+ memcpy(out_item->data, item->data, item->length);
+ buf += sizeof(*out_item);
+ buf += item->length;
+ list_item = g_slist_next(list_item);
+ }
- *ret = (unsigned char *) buf;
- buf->prefix[0] = 'F';
- buf->prefix[1] = 'P';
- buf->prefix[2] = '1';
- buf->driver_id = GUINT16_TO_LE(data->driver_id);
- buf->devtype = GUINT32_TO_LE(data->devtype);
- buf->data_type = data->type;
- memcpy(buf->data, data->data, data->length);
return buflen;
}
+static struct fp_print_data *fpi_print_data_from_fp1_data(unsigned char *buf,
+ size_t buflen)
+{
+ size_t print_data_len;
+ struct fp_print_data *data;
+ struct fp_print_data_item *item;
+ struct fpi_print_data_fp2 *raw = (struct fpi_print_data_fp2 *) buf;
+
+ print_data_len = buflen - sizeof(*raw);
+ data = print_data_new(GUINT16_FROM_LE(raw->driver_id),
+ GUINT32_FROM_LE(raw->devtype), raw->data_type);
+ item = fpi_print_data_item_new(print_data_len);
+ /* FIXME: fp_print_data->data content is not endianess agnostic */
+ memcpy(item->data, raw->data, print_data_len);
+ data->prints = g_slist_prepend(data->prints, item);
+
+ return data;
+}
+
+static struct fp_print_data *fpi_print_data_from_fp2_data(unsigned char *buf,
+ size_t buflen)
+{
+ size_t total_data_len, item_len;
+ struct fp_print_data *data;
+ struct fp_print_data_item *item;
+ struct fpi_print_data_fp2 *raw = (struct fpi_print_data_fp2 *) buf;
+ unsigned char *raw_buf;
+ struct fpi_print_data_item_fp2 *raw_item;
+
+ total_data_len = buflen - sizeof(*raw);
+ data = print_data_new(GUINT16_FROM_LE(raw->driver_id),
+ GUINT32_FROM_LE(raw->devtype), raw->data_type);
+ raw_buf = raw->data;
+ while (total_data_len) {
+ if (total_data_len < sizeof(*raw_item))
+ break;
+ total_data_len -= sizeof(*raw_item);
+
+ raw_item = (struct fpi_print_data_item_fp2 *)raw_buf;
+ item_len = GUINT32_FROM_LE(raw_item->length);
+ fp_dbg("item len %d, total_data_len %d", item_len, total_data_len);
+ if (total_data_len < item_len) {
+ fp_err("corrupted fingerprint data");
+ break;
+ }
+ total_data_len -= item_len;
+
+ item = fpi_print_data_item_new(item_len);
+ /* FIXME: fp_print_data->data content is not endianess agnostic */
+ memcpy(item->data, raw_item->data, item_len);
+ data->prints = g_slist_prepend(data->prints, item);
+
+ raw_buf += sizeof(*raw_item);
+ raw_buf += item_len;
+ }
+
+ if (g_slist_length(data->prints) == 0) {
+ fp_print_data_free(data);
+ data = NULL;
+ }
+
+ return data;
+
+}
+
/** \ingroup print_data
* Load a stored print from a data buffer. The contents of said buffer must
* be the untouched contents of a buffer previously supplied to you by the
@@ -157,24 +257,21 @@ API_EXPORTED size_t fp_print_data_get_data(struct fp_print_data *data,
API_EXPORTED struct fp_print_data *fp_print_data_from_data(unsigned char *buf,
size_t buflen)
{
- struct fpi_print_data_fp1 *raw = (struct fpi_print_data_fp1 *) buf;
- size_t print_data_len;
- struct fp_print_data *data;
+ struct fpi_print_data_fp2 *raw = (struct fpi_print_data_fp2 *) buf;
fp_dbg("buffer size %zd", buflen);
if (buflen < sizeof(*raw))
return NULL;
- if (strncmp(raw->prefix, "FP1", 3) != 0) {
+ if (strncmp(raw->prefix, "FP1", 3) == 0) {
+ return fpi_print_data_from_fp1_data(buf, buflen);
+ } else if (strncmp(raw->prefix, "FP2", 3) == 0) {
+ return fpi_print_data_from_fp2_data(buf, buflen);
+ } else {
fp_dbg("bad header prefix");
- return NULL;
}
- print_data_len = buflen - sizeof(*raw);
- data = print_data_new(GUINT16_FROM_LE(raw->driver_id),
- GUINT32_FROM_LE(raw->devtype), raw->data_type, print_data_len);
- memcpy(data->data, raw->data, print_data_len);
- return data;
+ return NULL;
}
static char *get_path_to_storedir(uint16_t driver_id, uint32_t devtype)
@@ -405,6 +502,8 @@ API_EXPORTED int fp_print_data_from_dscv_print(struct fp_dscv_print *print,
*/
API_EXPORTED void fp_print_data_free(struct fp_print_data *data)
{
+ if (data)
+ g_slist_free_full(data->prints, (GDestroyNotify)fpi_print_data_item_free);
g_free(data);
}
diff --git a/libfprint/drivers/aes1610.c b/libfprint/drivers/aes1610.c
index 2e04c593..957d0f4a 100644
--- a/libfprint/drivers/aes1610.c
+++ b/libfprint/drivers/aes1610.c
@@ -609,13 +609,24 @@ static void capture_read_strip_cb(struct libusb_transfer *transfer)
/* stop capturing if MAX_FRAMES is reached */
if (aesdev->blanks_count > 10 || g_slist_length(aesdev->strips) >= MAX_FRAMES) {
struct fp_img *img;
+ unsigned int height, rev_height;
fp_dbg("sending stop capture.... blanks=%d frames=%d", aesdev->blanks_count, g_slist_length(aesdev->strips));
/* send stop capture bits */
aes_write_regv(dev, capture_stop, G_N_ELEMENTS(capture_stop), stub_capture_stop_cb, NULL);
aesdev->strips = g_slist_reverse(aesdev->strips);
+ height = aes_calc_delta(aesdev->strips, aesdev->strips_len,
+ FRAME_WIDTH, FRAME_HEIGHT, FALSE);
+ rev_height = aes_calc_delta(aesdev->strips, aesdev->strips_len,
+ FRAME_WIDTH, FRAME_HEIGHT, TRUE);
+ fp_dbg("heights: %d rev: %d", height, rev_height);
+ if (rev_height < height) {
+ fp_dbg("Reversed direction");
+ height = aes_calc_delta(aesdev->strips, aesdev->strips_len,
+ FRAME_WIDTH, FRAME_HEIGHT, FALSE);
+ }
img = aes_assemble(aesdev->strips, aesdev->strips_len,
- FRAME_WIDTH, FRAME_HEIGHT);
+ FRAME_WIDTH, FRAME_HEIGHT, FRAME_WIDTH + FRAME_WIDTH / 2);
g_slist_free_full(aesdev->strips, g_free);
aesdev->strips = NULL;
aesdev->strips_len = 0;
@@ -829,13 +840,9 @@ struct fp_img_driver aes1610_driver = {
},
.flags = 0,
.img_height = -1,
- .img_width = 128,
+ .img_width = FRAME_WIDTH + FRAME_WIDTH / 2,
- /* temporarily lowered until we sort out image processing code
- * binarized scan quality is good, minutiae detection is accurate,
- * it's just that we get fewer minutiae than other scanners (less scanning
- * area) */
- .bz3_threshold = 10,
+ .bz3_threshold = 50,
.open = dev_init,
.close = dev_deinit,
diff --git a/libfprint/drivers/aes1660.c b/libfprint/drivers/aes1660.c
index 250ca52d..f931ba36 100644
--- a/libfprint/drivers/aes1660.c
+++ b/libfprint/drivers/aes1660.c
@@ -49,7 +49,6 @@ static int dev_init(struct fp_img_dev *dev, unsigned long driver_data)
dev->priv = aesdev = g_malloc0(sizeof(struct aesX660_dev));
aesdev->buffer = g_malloc0(AES1660_FRAME_SIZE + AESX660_HEADER_SIZE);
- aesdev->h_scale_factor = SCALE_FACTOR;
aesdev->init_seqs[0] = aes1660_init_1;
aesdev->init_seqs_len[0] = array_n_elements(aes1660_init_1);
aesdev->init_seqs[1] = aes1660_init_2;
@@ -102,13 +101,8 @@ struct fp_img_driver aes1660_driver = {
},
.flags = 0,
.img_height = -1,
- .img_width = FRAME_WIDTH * SCALE_FACTOR,
-
- /* temporarily lowered until we sort out image processing code
- * binarized scan quality is good, minutiae detection is accurate,
- * it's just that we get fewer minutiae than other scanners (less scanning
- * area) */
- .bz3_threshold = 25,
+ .img_width = FRAME_WIDTH + FRAME_WIDTH / 2,
+ .bz3_threshold = 70,
.open = dev_init,
.close = dev_deinit,
diff --git a/libfprint/drivers/aes2501.c b/libfprint/drivers/aes2501.c
index 75d19fcd..264e2dcf 100644
--- a/libfprint/drivers/aes2501.c
+++ b/libfprint/drivers/aes2501.c
@@ -481,10 +481,21 @@ static void capture_read_strip_cb(struct libusb_transfer *transfer)
aesdev->no_finger_cnt++;
if (aesdev->no_finger_cnt == 3) {
struct fp_img *img;
+ unsigned int height, rev_height;
aesdev->strips = g_slist_reverse(aesdev->strips);
+ height = aes_calc_delta(aesdev->strips, aesdev->strips_len,
+ FRAME_WIDTH, FRAME_HEIGHT, FALSE);
+ rev_height = aes_calc_delta(aesdev->strips, aesdev->strips_len,
+ FRAME_WIDTH, FRAME_HEIGHT, TRUE);
+ fp_dbg("heights: %d rev: %d", height, rev_height);
+ if (rev_height < height) {
+ fp_dbg("Reversed direction");
+ height = aes_calc_delta(aesdev->strips, aesdev->strips_len,
+ FRAME_WIDTH, FRAME_HEIGHT, FALSE);
+ }
img = aes_assemble(aesdev->strips, aesdev->strips_len,
- FRAME_WIDTH, FRAME_HEIGHT);
+ FRAME_WIDTH, FRAME_HEIGHT, FRAME_WIDTH + FRAME_WIDTH / 2);
g_slist_free_full(aesdev->strips, g_free);
aesdev->strips = NULL;
aesdev->strips_len = 0;
@@ -498,10 +509,13 @@ static void capture_read_strip_cb(struct libusb_transfer *transfer)
} else {
/* obtain next strip */
/* FIXME: would preallocating strip buffers be a decent optimization? */
- stripdata = g_malloc(192 * 8);
+ struct aes_stripe *stripe = g_malloc(FRAME_WIDTH * FRAME_HEIGHT / 2 + sizeof(struct aes_stripe));
+ stripe->delta_x = 0;
+ stripe->delta_y = 0;
+ stripdata = stripe->data;
memcpy(stripdata, data + 1, 192*8);
aesdev->no_finger_cnt = 0;
- aesdev->strips = g_slist_prepend(aesdev->strips, stripdata);
+ aesdev->strips = g_slist_prepend(aesdev->strips, stripe);
aesdev->strips_len++;
fpi_ssm_jump_to_state(ssm, CAPTURE_REQUEST_STRIP);
@@ -867,7 +881,7 @@ struct fp_img_driver aes2501_driver = {
},
.flags = 0,
.img_height = -1,
- .img_width = 192,
+ .img_width = FRAME_WIDTH + FRAME_WIDTH / 2,
.open = dev_init,
.close = dev_deinit,
diff --git a/libfprint/drivers/aes2550.c b/libfprint/drivers/aes2550.c
index dcfbc824..29e59d17 100644
--- a/libfprint/drivers/aes2550.c
+++ b/libfprint/drivers/aes2550.c
@@ -204,6 +204,7 @@ static int process_strip_data(struct fpi_ssm *ssm, unsigned char *data)
unsigned char *stripdata;
struct fp_img_dev *dev = ssm->priv;
struct aes2550_dev *aesdev = dev->priv;
+ struct aes_stripe *stripe;
int len;
if (data[0] != AES2550_EDATA_MAGIC) {
@@ -214,11 +215,16 @@ static int process_strip_data(struct fpi_ssm *ssm, unsigned char *data)
if (len != (AES2550_STRIP_SIZE - 3)) {
fp_dbg("Bogus frame len: %.4x\n", len);
}
- stripdata = g_malloc(FRAME_WIDTH * FRAME_HEIGHT / 2); /* 4 bits per pixel */
+ stripe = g_malloc(FRAME_WIDTH * FRAME_HEIGHT / 2 + sizeof(struct aes_stripe)); /* 4 bits per pixel */
+ stripe->delta_x = (int8_t)data[6];
+ stripe->delta_y = -(int8_t)data[7];
+ stripdata = stripe->data;
memcpy(stripdata, data + 33, FRAME_WIDTH * FRAME_HEIGHT / 2);
- aesdev->strips = g_slist_prepend(aesdev->strips, stripdata);
+ aesdev->strips = g_slist_prepend(aesdev->strips, stripe);
aesdev->strips_len++;
+ fp_dbg("deltas: %dx%d", stripe->delta_x, stripe->delta_y);
+
return 0;
}
@@ -242,12 +248,13 @@ static void capture_set_idle_reqs_cb(struct libusb_transfer *transfer)
struct aes2550_dev *aesdev = dev->priv;
if ((transfer->status == LIBUSB_TRANSFER_COMPLETED) &&
- (transfer->length == transfer->actual_length)) {
+ (transfer->length == transfer->actual_length) &&
+ aesdev->strips_len) {
struct fp_img *img;
aesdev->strips = g_slist_reverse(aesdev->strips);
img = aes_assemble(aesdev->strips, aesdev->strips_len,
- FRAME_WIDTH, FRAME_HEIGHT);
+ FRAME_WIDTH, FRAME_HEIGHT, FRAME_WIDTH + FRAME_WIDTH / 2);
g_slist_free_full(aesdev->strips, g_free);
aesdev->strips = NULL;
aesdev->strips_len = 0;
@@ -637,7 +644,7 @@ struct fp_img_driver aes2550_driver = {
},
.flags = 0,
.img_height = -1,
- .img_width = 192,
+ .img_width = FRAME_WIDTH + FRAME_WIDTH / 2,
.open = dev_init,
.close = dev_deinit,
diff --git a/libfprint/drivers/aes2660.c b/libfprint/drivers/aes2660.c
index 4be7475d..d7b6cefc 100644
--- a/libfprint/drivers/aes2660.c
+++ b/libfprint/drivers/aes2660.c
@@ -49,7 +49,6 @@ static int dev_init(struct fp_img_dev *dev, unsigned long driver_data)
dev->priv = aesdev = g_malloc0(sizeof(struct aesX660_dev));
aesdev->buffer = g_malloc0(AES2660_FRAME_SIZE + AESX660_HEADER_SIZE);
/* No scaling for AES2660 */
- aesdev->h_scale_factor = 1;
aesdev->init_seqs[0] = aes2660_init_1;
aesdev->init_seqs_len[0] = array_n_elements(aes2660_init_1);
aesdev->init_seqs[1] = aes2660_init_2;
@@ -103,7 +102,7 @@ struct fp_img_driver aes2660_driver = {
},
.flags = 0,
.img_height = -1,
- .img_width = FRAME_WIDTH,
+ .img_width = FRAME_WIDTH + FRAME_WIDTH / 2,
.open = dev_init,
.close = dev_deinit,
diff --git a/libfprint/drivers/aes3500.c b/libfprint/drivers/aes3500.c
new file mode 100644
index 00000000..6f4d6b07
--- /dev/null
+++ b/libfprint/drivers/aes3500.c
@@ -0,0 +1,188 @@
+/*
+ * AuthenTec AES3500 driver for libfprint
+ *
+ * AES3500 is a press-typed sensor, which captures image in 128x128
+ * pixels.
+ *
+ * Thanks Rafael Toledo for the Windows driver and the help.
+ *
+ * This work is derived from Daniel Drake's AES4000 driver.
+ *
+ * Copyright (C) 2011-2013 Juvenn Woo
+ * Copyright (C) 2007-2008 Daniel Drake
+ *
+ * This library is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of the
+ * License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ * 02110-1301 USA
+ */
+
+#define FP_COMPONENT "aes3500"
+
+#include
+
+#include
+#include
+
+#include
+#include
+
+#include "aes3k.h"
+#include "driver_ids.h"
+
+#define DATA_BUFLEN 0x2089
+
+/* image size = FRAME_WIDTH x FRAME_WIDTH */
+#define FRAME_WIDTH 128
+#define FRAME_SIZE (FRAME_WIDTH * AES3K_FRAME_HEIGHT / 2)
+#define FRAME_NUMBER (FRAME_WIDTH / AES3K_FRAME_HEIGHT)
+#define ENLARGE_FACTOR 2
+
+
+static struct aes_regwrite init_reqs[] = {
+ /* master reset */
+ { 0x80, 0x01 },
+ { 0, 0 },
+ { 0x80, 0x00 },
+ { 0, 0 },
+
+ { 0x81, 0x00 },
+ { 0x80, 0x00 },
+ { 0, 0 },
+
+ /* scan reset */
+ { 0x80, 0x02 },
+ { 0, 0 },
+ { 0x80, 0x00 },
+ { 0, 0 },
+
+ /* disable register buffering */
+ { 0x80, 0x04 },
+ { 0, 0 },
+ { 0x80, 0x00 },
+ { 0, 0 },
+
+ { 0x81, 0x00 },
+ { 0, 0 },
+ /* windows driver reads registers now (81 02) */
+ { 0x80, 0x00 },
+ { 0x81, 0x00 },
+
+ /* set excitation bias current: 2mhz drive ring frequency,
+ * 4V drive ring voltage, 16.5mA excitation bias */
+ { 0x82, 0x04 },
+
+ /* continuously sample drive ring for finger detection,
+ * 62.50ms debounce delay */
+ { 0x83, 0x13 },
+
+ { 0x84, 0x07 }, /* set calibration resistance to 12 kiloohms */
+ { 0x85, 0x3d }, /* set calibration capacitance */
+ { 0x86, 0x03 }, /* detect drive voltage */
+ { 0x87, 0x01 }, /* set detection frequency to 125khz */
+ { 0x88, 0x02 }, /* set column scan period */
+ { 0x89, 0x02 }, /* set measure drive */
+ { 0x8a, 0x33 }, /* set measure frequency and sense amplifier bias */
+ { 0x8b, 0x33 }, /* set matrix pattern */
+ { 0x8c, 0x0f }, /* set demodulation phase 1 */
+ { 0x8d, 0x04 }, /* set demodulation phase 2 */
+ { 0x8e, 0x23 }, /* set sensor gain */
+ { 0x8f, 0x07 }, /* set image parameters */
+ { 0x90, 0x00 }, /* carrier offset null */
+ { 0x91, 0x1c }, /* set A/D reference high */
+ { 0x92, 0x08 }, /* set A/D reference low */
+ { 0x93, 0x00 }, /* set start row to 0 */
+ { 0x94, 0x07 }, /* set end row */
+ { 0x95, 0x00 }, /* set start column to 0 */
+ { 0x96, 0x1f }, /* set end column */
+ { 0x97, 0x04 }, /* data format and thresholds */
+ { 0x98, 0x28 }, /* image data control */
+ { 0x99, 0x00 }, /* disable general purpose outputs */
+ { 0x9a, 0x0b }, /* set initial scan state */
+ { 0x9b, 0x00 }, /* clear challenge word bits */
+ { 0x9c, 0x00 }, /* clear challenge word bits */
+ { 0x9d, 0x09 }, /* set some challenge word bits */
+ { 0x9e, 0x53 }, /* clear challenge word bits */
+ { 0x9f, 0x6b }, /* set some challenge word bits */
+ { 0, 0 },
+
+ { 0x80, 0x00 },
+ { 0x81, 0x00 },
+ { 0, 0 },
+ { 0x81, 0x04 },
+ { 0, 0 },
+ { 0x81, 0x00 },
+};
+
+static int dev_init(struct fp_img_dev *dev, unsigned long driver_data)
+{
+ int r;
+ struct aes3k_dev *aesdev;
+
+ r = libusb_claim_interface(dev->udev, 0);
+ if (r < 0)
+ fp_err("could not claim interface 0");
+
+ aesdev = dev->priv = g_malloc0(sizeof(struct aes3k_dev));
+
+ if (!aesdev)
+ return -ENOMEM;
+
+ if (r == 0)
+ aesdev->data_buflen = DATA_BUFLEN;
+ aesdev->frame_width = FRAME_WIDTH;
+ aesdev->frame_size = FRAME_SIZE;
+ aesdev->frame_number = FRAME_NUMBER;
+ aesdev->enlarge_factor = ENLARGE_FACTOR;
+ aesdev->init_reqs = init_reqs;
+ aesdev->init_reqs_len = G_N_ELEMENTS(init_reqs);
+ fpi_imgdev_open_complete(dev, 0);
+
+ return r;
+}
+
+static void dev_deinit(struct fp_img_dev *dev)
+{
+ struct aes3k_dev *aesdev = dev->priv;
+ g_free(aesdev);
+ libusb_release_interface(dev->udev, 0);
+ fpi_imgdev_close_complete(dev);
+}
+
+
+static const struct usb_id id_table[] = {
+ { .vendor = 0x08ff, .product = 0x5731 },
+ { 0, 0, 0, },
+};
+
+struct fp_img_driver aes3500_driver = {
+ .driver = {
+ .id = AES3500_ID,
+ .name = FP_COMPONENT,
+ .full_name = "AuthenTec AES3500",
+ .id_table = id_table,
+ .scan_type = FP_SCAN_TYPE_PRESS,
+ },
+ .flags = 0,
+ .img_height = FRAME_WIDTH * ENLARGE_FACTOR,
+ .img_width = FRAME_WIDTH * ENLARGE_FACTOR,
+
+ /* temporarily lowered until image quality improves */
+ .bz3_threshold = 9,
+
+ .open = dev_init,
+ .close = dev_deinit,
+ .activate = aes3k_dev_activate,
+ .deactivate = aes3k_dev_deactivate,
+};
+
diff --git a/libfprint/drivers/aes3k.c b/libfprint/drivers/aes3k.c
new file mode 100644
index 00000000..ba969010
--- /dev/null
+++ b/libfprint/drivers/aes3k.c
@@ -0,0 +1,169 @@
+/*
+ * AuthenTec AES3500/AES4000 common routines
+ *
+ * The AES3500 and AES4000 sensors are press-typed, and could capture
+ * fingerprint images in 128x128 and 96x96 pixels respectively. They
+ * share a same communication interface: a number of frames are
+ * transferred and captured, from which a final image could be
+ * assembled. Each frame has fixed height of 16 pixels.
+ *
+ * As the imaging area is a bit small, only a part of finger could be
+ * captured, the detected minutiae are not so many that the NBIS
+ * matching works not so good. The verification rate is very low at the
+ * moment.
+ *
+ * This work is derived from Daniel Drake's AES4000 driver.
+ *
+ * Copyright (C) 2013 Juvenn Woo
+ * Copyright (C) 2007-2008 Daniel Drake
+ *
+ * This library is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of the
+ * License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ * 02110-1301 USA
+ *
+ */
+
+#define FP_COMPONENT "aes3k"
+
+#include
+
+#include
+#include
+
+#include
+#include
+
+#include "aes3k.h"
+
+#define CTRL_TIMEOUT 1000
+#define EP_IN (1 | LIBUSB_ENDPOINT_IN)
+#define EP_OUT (2 | LIBUSB_ENDPOINT_OUT)
+
+static void do_capture(struct fp_img_dev *dev);
+
+static void aes3k_assemble_image(unsigned char *input, size_t width, size_t height,
+ unsigned char *output)
+{
+ size_t row, column;
+
+ for (column = 0; column < width; column++) {
+ for (row = 0; row < height; row += 2) {
+ output[width * row + column] = (*input & 0x0f) * 17;
+ output[width * (row + 1) + column] = ((*input & 0xf0) >> 4) * 17;
+ input++;
+ }
+ }
+}
+
+static void img_cb(struct libusb_transfer *transfer)
+{
+ struct fp_img_dev *dev = transfer->user_data;
+ struct aes3k_dev *aesdev = dev->priv;
+ unsigned char *ptr = transfer->buffer;
+ struct fp_img *tmp;
+ struct fp_img *img;
+ int i;
+
+ if (transfer->status == LIBUSB_TRANSFER_CANCELLED) {
+ goto err;
+ } else if (transfer->status != LIBUSB_TRANSFER_COMPLETED) {
+ fpi_imgdev_session_error(dev, -EIO);
+ goto err;
+ } else if (transfer->length != transfer->actual_length) {
+ fpi_imgdev_session_error(dev, -EPROTO);
+ goto err;
+ }
+
+ fpi_imgdev_report_finger_status(dev, TRUE);
+
+ tmp = fpi_img_new(aesdev->frame_width * aesdev->frame_width);
+ tmp->width = aesdev->frame_width;
+ tmp->height = aesdev->frame_width;
+ tmp->flags = FP_IMG_COLORS_INVERTED | FP_IMG_V_FLIPPED | FP_IMG_H_FLIPPED;
+ for (i = 0; i < aesdev->frame_number; i++) {
+ fp_dbg("frame header byte %02x", *ptr);
+ ptr++;
+ aes3k_assemble_image(ptr, aesdev->frame_width, AES3K_FRAME_HEIGHT, tmp->data + (i * aesdev->frame_width * AES3K_FRAME_HEIGHT));
+ ptr += aesdev->frame_size;
+ }
+
+ /* FIXME: this is an ugly hack to make the image big enough for NBIS
+ * to process reliably */
+ img = fpi_im_resize(tmp, aesdev->enlarge_factor, aesdev->enlarge_factor);
+ fp_img_free(tmp);
+ fpi_imgdev_image_captured(dev, img);
+
+ /* FIXME: rather than assuming finger has gone, we should poll regs until
+ * it really has, then restart the capture */
+ fpi_imgdev_report_finger_status(dev, FALSE);
+
+ do_capture(dev);
+
+err:
+ g_free(transfer->buffer);
+ aesdev->img_trf = NULL;
+ libusb_free_transfer(transfer);
+}
+
+static void do_capture(struct fp_img_dev *dev)
+{
+ struct aes3k_dev *aesdev = dev->priv;
+ unsigned char *data;
+ int r;
+
+ aesdev->img_trf = libusb_alloc_transfer(0);
+ if (!aesdev->img_trf) {
+ fpi_imgdev_session_error(dev, -EIO);
+ return;
+ }
+
+ data = g_malloc(aesdev->data_buflen);
+ libusb_fill_bulk_transfer(aesdev->img_trf, dev->udev, EP_IN, data,
+ aesdev->data_buflen, img_cb, dev, 0);
+
+ r = libusb_submit_transfer(aesdev->img_trf);
+ if (r < 0) {
+ g_free(data);
+ libusb_free_transfer(aesdev->img_trf);
+ aesdev->img_trf = NULL;
+ fpi_imgdev_session_error(dev, r);
+ }
+}
+
+static void init_reqs_cb(struct fp_img_dev *dev, int result, void *user_data)
+{
+ fpi_imgdev_activate_complete(dev, result);
+ if (result == 0)
+ do_capture(dev);
+}
+
+int aes3k_dev_activate(struct fp_img_dev *dev, enum fp_imgdev_state state)
+{
+ struct aes3k_dev *aesdev = dev->priv;
+ aes_write_regv(dev, aesdev->init_reqs, aesdev->init_reqs_len, init_reqs_cb, NULL);
+ return 0;
+}
+
+void aes3k_dev_deactivate(struct fp_img_dev *dev)
+{
+ struct aes3k_dev *aesdev = dev->priv;
+
+ /* FIXME: should wait for cancellation to complete before returning
+ * from deactivation, otherwise app may legally exit before we've
+ * cleaned up */
+ if (aesdev->img_trf)
+ libusb_cancel_transfer(aesdev->img_trf);
+ fpi_imgdev_deactivate_complete(dev);
+}
+
diff --git a/libfprint/drivers/aes3k.h b/libfprint/drivers/aes3k.h
new file mode 100644
index 00000000..98750ede
--- /dev/null
+++ b/libfprint/drivers/aes3k.h
@@ -0,0 +1,58 @@
+/*
+ * AuthenTec AES3500/AES4000 common routines
+ *
+ * The AES3500 and AES4000 sensors are press-typed, and could capture
+ * fingerprint images in 128x128 and 96x96 pixels respectively. They
+ * share a same communication interface: a number of frames are
+ * transferred and captured, from which a final image could be
+ * assembled. Each frame has fixed height of 16 pixels.
+ *
+ * As the imaging area is a bit small, only a part of finger could be
+ * captured, the detected minutiae are not so many that the NBIS
+ * matching works not so good. The verification rate is very low at the
+ * moment.
+ *
+ * This work is derived from Daniel Drake's AES4000 driver.
+ *
+ * Copyright (C) 2013 Juvenn Woo
+ * Copyright (C) 2007-2008 Daniel Drake
+ *
+ * This library is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of the
+ * License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ * 02110-1301 USA
+ *
+ */
+
+#ifndef __AES3K_H
+#define __AES3K_H
+
+#define AES3K_FRAME_HEIGHT 16
+
+struct aes3k_dev {
+ struct libusb_transfer *img_trf;
+ size_t frame_width; /* image size = frame_width x frame_width */
+ size_t frame_size; /* 4 bits/pixel: frame_width x AES3K_FRAME_HEIGHT / 2 */
+ size_t frame_number; /* number of frames */
+ size_t enlarge_factor;
+
+ size_t data_buflen; /* buffer length of usb bulk transfer */
+ struct aes_regwrite *init_reqs; /* initial values sent to device */
+ size_t init_reqs_len;
+};
+
+
+int aes3k_dev_activate(struct fp_img_dev *dev, enum fp_imgdev_state state);
+void aes3k_dev_deactivate(struct fp_img_dev *dev);
+
+#endif
diff --git a/libfprint/drivers/aes4000.c b/libfprint/drivers/aes4000.c
index 6ff32a27..b8496514 100644
--- a/libfprint/drivers/aes4000.c
+++ b/libfprint/drivers/aes4000.c
@@ -1,5 +1,12 @@
/*
* AuthenTec AES4000 driver for libfprint
+ *
+ * AES4000 is a press-typed sensor, which captures image in 96x96
+ * pixels.
+ *
+ * This work is derived from Daniel Drake's AES4000 driver.
+ *
+ * Copyright (C) 2013 Juvenn Woo
* Copyright (C) 2007-2008 Daniel Drake
*
* This library is free software; you can redistribute it and/or
@@ -27,24 +34,19 @@
#include
#include
+#include "aes3k.h"
#include "driver_ids.h"
-#define CTRL_TIMEOUT 1000
-#define EP_IN (1 | LIBUSB_ENDPOINT_IN)
-#define EP_OUT (2 | LIBUSB_ENDPOINT_OUT)
-#define DATA_BUFLEN 0x1259
-#define NR_SUBARRAYS 6
-#define SUBARRAY_LEN 768
+#define DATA_BUFLEN 0x1259
-#define IMG_HEIGHT 96
-#define IMG_WIDTH 96
-#define ENLARGE_FACTOR 3
+/* image size = FRAME_WIDTH x FRAME_WIDTH */
+#define FRAME_WIDTH 96
+#define FRAME_SIZE (FRAME_WIDTH * AES3K_FRAME_HEIGHT / 2)
+#define FRAME_NUMBER (FRAME_WIDTH / AES3K_FRAME_HEIGHT)
+#define ENLARGE_FACTOR 3
-struct aes4k_dev {
- struct libusb_transfer *img_trf;
-};
-static const struct aes_regwrite init_reqs[] = {
+static struct aes_regwrite init_reqs[] = {
/* master reset */
{ 0x80, 0x01 },
{ 0, 0 },
@@ -119,119 +121,28 @@ static const struct aes_regwrite init_reqs[] = {
{ 0x81, 0x00 },
};
-static void do_capture(struct fp_img_dev *dev);
-
-static void img_cb(struct libusb_transfer *transfer)
-{
- struct fp_img_dev *dev = transfer->user_data;
- struct aes4k_dev *aesdev = dev->priv;
- unsigned char *ptr = transfer->buffer;
- struct fp_img *tmp;
- struct fp_img *img;
- int i;
-
- if (transfer->status == LIBUSB_TRANSFER_CANCELLED) {
- goto err;
- } else if (transfer->status != LIBUSB_TRANSFER_COMPLETED) {
- fpi_imgdev_session_error(dev, -EIO);
- goto err;
- } else if (transfer->length != transfer->actual_length) {
- fpi_imgdev_session_error(dev, -EPROTO);
- goto err;
- }
-
- fpi_imgdev_report_finger_status(dev, TRUE);
-
- tmp = fpi_img_new(IMG_WIDTH * IMG_HEIGHT);
- tmp->width = IMG_WIDTH;
- tmp->height = IMG_HEIGHT;
- tmp->flags = FP_IMG_COLORS_INVERTED | FP_IMG_V_FLIPPED | FP_IMG_H_FLIPPED;
- for (i = 0; i < NR_SUBARRAYS; i++) {
- fp_dbg("subarray header byte %02x", *ptr);
- ptr++;
- aes_assemble_image(ptr, 96, 16, tmp->data + (i * 96 * 16));
- ptr += SUBARRAY_LEN;
- }
-
- /* FIXME: this is an ugly hack to make the image big enough for NBIS
- * to process reliably */
- img = fpi_im_resize(tmp, ENLARGE_FACTOR, ENLARGE_FACTOR);
- fp_img_free(tmp);
- fpi_imgdev_image_captured(dev, img);
-
- /* FIXME: rather than assuming finger has gone, we should poll regs until
- * it really has, then restart the capture */
- fpi_imgdev_report_finger_status(dev, FALSE);
-
- do_capture(dev);
-
-err:
- g_free(transfer->buffer);
- aesdev->img_trf = NULL;
- libusb_free_transfer(transfer);
-}
-
-static void do_capture(struct fp_img_dev *dev)
-{
- struct aes4k_dev *aesdev = dev->priv;
- unsigned char *data;
- int r;
-
- aesdev->img_trf = libusb_alloc_transfer(0);
- if (!aesdev->img_trf) {
- fpi_imgdev_session_error(dev, -EIO);
- return;
- }
-
- data = g_malloc(DATA_BUFLEN);
- libusb_fill_bulk_transfer(aesdev->img_trf, dev->udev, EP_IN, data,
- DATA_BUFLEN, img_cb, dev, 0);
-
- r = libusb_submit_transfer(aesdev->img_trf);
- if (r < 0) {
- g_free(data);
- libusb_free_transfer(aesdev->img_trf);
- aesdev->img_trf = NULL;
- fpi_imgdev_session_error(dev, r);
- }
-}
-
-static void init_reqs_cb(struct fp_img_dev *dev, int result, void *user_data)
-{
- fpi_imgdev_activate_complete(dev, result);
- if (result == 0)
- do_capture(dev);
-}
-
-static int dev_activate(struct fp_img_dev *dev, enum fp_imgdev_state state)
-{
- aes_write_regv(dev, init_reqs, G_N_ELEMENTS(init_reqs), init_reqs_cb, NULL);
- return 0;
-}
-
-static void dev_deactivate(struct fp_img_dev *dev)
-{
- struct aes4k_dev *aesdev = dev->priv;
-
- /* FIXME: should wait for cancellation to complete before returning
- * from deactivation, otherwise app may legally exit before we've
- * cleaned up */
- if (aesdev->img_trf)
- libusb_cancel_transfer(aesdev->img_trf);
- fpi_imgdev_deactivate_complete(dev);
-}
-
static int dev_init(struct fp_img_dev *dev, unsigned long driver_data)
{
int r;
+ struct aes3k_dev *aesdev;
r = libusb_claim_interface(dev->udev, 0);
if (r < 0)
fp_err("could not claim interface 0");
- dev->priv = g_malloc0(sizeof(struct aes4k_dev));
+ aesdev = dev->priv = g_malloc0(sizeof(struct aes3k_dev));
+
+ if (!aesdev)
+ return -ENOMEM;
if (r == 0)
+ aesdev->data_buflen = DATA_BUFLEN;
+ aesdev->frame_width = FRAME_WIDTH;
+ aesdev->frame_size = FRAME_SIZE;
+ aesdev->frame_number = FRAME_NUMBER;
+ aesdev->enlarge_factor = ENLARGE_FACTOR;
+ aesdev->init_reqs = init_reqs;
+ aesdev->init_reqs_len = G_N_ELEMENTS(init_reqs);
fpi_imgdev_open_complete(dev, 0);
return r;
@@ -239,11 +150,13 @@ static int dev_init(struct fp_img_dev *dev, unsigned long driver_data)
static void dev_deinit(struct fp_img_dev *dev)
{
- g_free(dev->priv);
+ struct aes3k_dev *aesdev = dev->priv;
+ g_free(aesdev);
libusb_release_interface(dev->udev, 0);
fpi_imgdev_close_complete(dev);
}
+
static const struct usb_id id_table[] = {
{ .vendor = 0x08ff, .product = 0x5501 },
{ 0, 0, 0, },
@@ -258,15 +171,15 @@ struct fp_img_driver aes4000_driver = {
.scan_type = FP_SCAN_TYPE_PRESS,
},
.flags = 0,
- .img_height = IMG_HEIGHT * ENLARGE_FACTOR,
- .img_width = IMG_WIDTH * ENLARGE_FACTOR,
+ .img_height = FRAME_WIDTH * ENLARGE_FACTOR,
+ .img_width = FRAME_WIDTH * ENLARGE_FACTOR,
/* temporarily lowered until image quality improves */
.bz3_threshold = 9,
.open = dev_init,
.close = dev_deinit,
- .activate = dev_activate,
- .deactivate = dev_deactivate,
+ .activate = aes3k_dev_activate,
+ .deactivate = aes3k_dev_deactivate,
};
diff --git a/libfprint/drivers/aesx660.c b/libfprint/drivers/aesx660.c
index d030d0e7..ec28a5bd 100644
--- a/libfprint/drivers/aesx660.c
+++ b/libfprint/drivers/aesx660.c
@@ -273,19 +273,25 @@ enum capture_states {
/* Returns number of processed bytes */
static int process_stripe_data(struct fpi_ssm *ssm, unsigned char *data)
{
+ struct aes_stripe *stripe;
unsigned char *stripdata;
struct fp_img_dev *dev = ssm->priv;
struct aesX660_dev *aesdev = dev->priv;
- stripdata = g_malloc(aesdev->frame_width * FRAME_HEIGHT / 2); /* 4 bits per pixel */
+ stripe = g_malloc(aesdev->frame_width * FRAME_HEIGHT / 2 + sizeof(struct aes_stripe)); /* 4 bpp */
+ stripdata = stripe->data;
fp_dbg("Processing frame %.2x %.2x", data[AESX660_IMAGE_OK_OFFSET],
data[AESX660_LAST_FRAME_OFFSET]);
+ stripe->delta_x = (int8_t)data[AESX660_FRAME_DELTA_X_OFFSET];
+ stripe->delta_y = -(int8_t)data[AESX660_FRAME_DELTA_Y_OFFSET];
+ fp_dbg("Offset to previous frame: %d %d", stripe->delta_x, stripe->delta_y);
+
if (data[AESX660_IMAGE_OK_OFFSET] == AESX660_IMAGE_OK) {
memcpy(stripdata, data + AESX660_IMAGE_OFFSET, aesdev->frame_width * FRAME_HEIGHT / 2);
- aesdev->strips = g_slist_prepend(aesdev->strips, stripdata);
+ aesdev->strips = g_slist_prepend(aesdev->strips, stripe);
aesdev->strips_len++;
return (data[AESX660_LAST_FRAME_OFFSET] & AESX660_LAST_FRAME_BIT);
} else {
@@ -302,22 +308,15 @@ static void capture_set_idle_cmd_cb(struct libusb_transfer *transfer)
if ((transfer->status == LIBUSB_TRANSFER_COMPLETED) &&
(transfer->length == transfer->actual_length)) {
- struct fp_img *img, *tmp;
+ struct fp_img *img;
aesdev->strips = g_slist_reverse(aesdev->strips);
- tmp = aes_assemble(aesdev->strips, aesdev->strips_len,
- aesdev->frame_width, FRAME_HEIGHT);
+ img = aes_assemble(aesdev->strips, aesdev->strips_len,
+ aesdev->frame_width, FRAME_HEIGHT, aesdev->frame_width + aesdev->frame_width / 2);
g_slist_foreach(aesdev->strips, (GFunc) g_free, NULL);
g_slist_free(aesdev->strips);
aesdev->strips = NULL;
aesdev->strips_len = 0;
- if (aesdev->h_scale_factor > 1) {
- img = fpi_im_resize(tmp, aesdev->h_scale_factor, 1);
- fp_img_free(tmp);
- } else {
- img = tmp;
- tmp = NULL;
- }
fpi_imgdev_image_captured(dev, img);
fpi_imgdev_report_finger_status(dev, FALSE);
fpi_ssm_mark_completed(ssm);
@@ -355,7 +354,7 @@ static void capture_read_stripe_data_cb(struct libusb_transfer *transfer)
if (aesdev->buffer_size == aesdev->buffer_max) {
if (aesdev->buffer_max == AESX660_HEADER_SIZE) {
aesdev->buffer_max = aesdev->buffer[AESX660_RESPONSE_SIZE_LSB_OFFSET] +
- (aesdev->buffer[AESX660_RESPONSE_SIZE_MSB_OFFSEt] << 8) + AESX660_HEADER_SIZE;
+ (aesdev->buffer[AESX660_RESPONSE_SIZE_MSB_OFFSET] << 8) + AESX660_HEADER_SIZE;
fp_dbg("Got frame, type %.2x size %.4x",
aesdev->buffer[AESX660_RESPONSE_TYPE_OFFSET],
aesdev->buffer_max);
diff --git a/libfprint/drivers/aesx660.h b/libfprint/drivers/aesx660.h
index b53ad51b..0510a43a 100644
--- a/libfprint/drivers/aesx660.h
+++ b/libfprint/drivers/aesx660.h
@@ -23,7 +23,7 @@
#define AESX660_HEADER_SIZE 3
#define AESX660_RESPONSE_TYPE_OFFSET 0x00
#define AESX660_RESPONSE_SIZE_LSB_OFFSET 0x01
-#define AESX660_RESPONSE_SIZE_MSB_OFFSEt 0x02
+#define AESX660_RESPONSE_SIZE_MSB_OFFSET 0x02
#define AESX660_CALIBRATE_RESPONSE 0x06
#define AESX660_FINGER_DET_RESPONSE 0x40
@@ -35,6 +35,9 @@
#define AESX660_LAST_FRAME_OFFSET 0x04
#define AESX660_LAST_FRAME_BIT 0x01
+#define AESX660_FRAME_DELTA_X_OFFSET 16
+#define AESX660_FRAME_DELTA_Y_OFFSET 17
+
#define AESX660_IMAGE_OFFSET 43
#define AESX660_BULK_TRANSFER_SIZE 4096
diff --git a/libfprint/drivers/driver_ids.h b/libfprint/drivers/driver_ids.h
index 0f45beb6..4d8414c7 100644
--- a/libfprint/drivers/driver_ids.h
+++ b/libfprint/drivers/driver_ids.h
@@ -36,6 +36,10 @@ enum {
UPEKE2_ID = 13,
AES1660_ID = 14,
AES2660_ID = 15,
+ AES3500_ID = 16,
+ UPEKTC_IMG_ID = 17,
+ ETES603_ID = 18,
+ VFS5011_ID = 19,
};
#endif
diff --git a/libfprint/drivers/etes603.c b/libfprint/drivers/etes603.c
new file mode 100644
index 00000000..aae0f0f4
--- /dev/null
+++ b/libfprint/drivers/etes603.c
@@ -0,0 +1,1513 @@
+/*
+ * EgisTec ES603 driver for libfprint
+ * Copyright (C) 2012 Patrick Marlier
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ */
+
+/* EgisTec ES603 device information
+ * Sensor area: 192 x 4 pixels
+ * Sensor gray: 16 gray levels/sensor pixel
+ * Sensor resolution: 508 dpi
+ * USB Manufacturer ID: 1C7A
+ * USB Product ID: 0603
+ *
+ * Possible compatibility LTT-SS500/SS501
+ *
+ * Extra features not present in this driver (see https://code.google.com/p/etes603):
+ * Tuning of DTVRT for contact detection
+ * Contact detection via capacitance
+ * Capture mode using assembled frames (usually better quality)
+ *
+ */
+
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+
+#define FP_COMPONENT "etes603"
+#include
+#include "driver_ids.h"
+
+/* libusb defines */
+#define EP_IN 0x81
+#define EP_OUT 0x02
+/* Note that 1000 ms is usually enough but with CMD_READ_FE could be longer
+ * since the sensor is waiting motion. */
+#define BULK_TIMEOUT 1000
+
+/* es603 defines */
+#define FRAME_WIDTH 192 /* pixels per row */
+#define FRAME_HEIGHT 4 /* number of rows */
+#define FRAME_SIZE 384 /* size in bytes (4 bits per pixels) */
+#define FE_WIDTH 256 /* pixels per row for Fly-Estimation */
+#define FE_HEIGHT 500 /* number of rows for Fly-Estimation */
+#define FE_SIZE 64000 /* size in bytes (4 bits per pixels) */
+
+#define GAIN_SMALL_INIT 0x23 /* Initial small gain */
+#define VRT_MAX 0x3F /* Maximum value for VRT */
+#define VRB_MAX 0x3A /* Maximum value for VRB */
+#define DTVRT_MAX 0x3A /* Maximum value for DTVRT */
+#define DCOFFSET_MIN 0x00 /* Minimum value for DCoffset */
+#define DCOFFSET_MAX 0x35 /* Maximum value for DCoffset */
+
+/* es603 commands */
+#define CMD_READ_REG 0x01
+#define CMD_WRITE_REG 0x02
+#define CMD_READ_FRAME 0x03 /* Read the sensor area */
+#define CMD_READ_FE 0x06 /* Read a fingerprint using Fly-Estimation */
+#define CMD_20 0x20 /* ? */
+#define CMD_25 0x25 /* ? */
+#define CMD_60 0x60 /* ? */
+
+#define CMD_OK 0x01 /* Command successfully executed */
+
+/* es603 registers */
+#define REG_MAX 0x18 /* Maximum number of registers in one message */
+#define REG_MODE_CONTROL 0x02 /* Mode control */
+#define REG_03 0x03 /* Contact register? */
+#define REG_04 0x04 /* ? */
+#define REG_10 0x10 /* MVS FRMBUF control */
+#define REG_1A 0x1A /* ? */
+/* BEGIN init sensor */
+#define REG_20 0x20 /* (def: 0x00) */
+#define REG_21 0x21 /* Small gain (def: 0x23) */
+#define REG_22 0x22 /* Normal gain (def: 0x21) */
+#define REG_23 0x23 /* Large gain (def: 0x20) */
+#define REG_24 0x24 /* (def: 0x14) */
+#define REG_25 0x25 /* (def: 0x6A) */
+#define REG_26 0x26 /* VRB again? (def: 0x00) */
+#define REG_27 0x27 /* VRT again? (def: 0x00) */
+#define REG_28 0x28 /* (def: 0x00) */
+#define REG_29 0x29 /* (def: 0xC0) */
+#define REG_2A 0x2A /* (def: 0x50) */
+#define REG_2B 0x2B /* (def: 0x50) */
+#define REG_2C 0x2C /* (def: 0x4D) */
+#define REG_2D 0x2D /* (def: 0x03) */
+#define REG_2E 0x2E /* (def: 0x06) */
+#define REG_2F 0x2F /* (def: 0x06) */
+#define REG_30 0x30 /* (def: 0x10) */
+#define REG_31 0x31 /* (def: 0x02) */
+#define REG_32 0x32 /* (def: 0x14) */
+#define REG_33 0x33 /* (def: 0x34) */
+#define REG_34 0x34 /* (def: 0x01) */
+#define REG_35 0x35 /* (def: 0x08) */
+#define REG_36 0x36 /* (def: 0x03) */
+#define REG_37 0x37 /* (def: 0x21) */
+/* END init sensor */
+
+#define REG_ENC1 0x41 /* Encryption 1 */
+#define REG_ENC2 0x42
+#define REG_ENC3 0x43
+#define REG_ENC4 0x44
+#define REG_ENC5 0x45
+#define REG_ENC6 0x46
+#define REG_ENC7 0x47
+#define REG_ENC8 0x48 /* Encryption 8 */
+
+#define REG_50 0x50 /* ? For contact detection */
+#define REG_51 0x51 /* ? */
+#define REG_59 0x59 /* ? */
+#define REG_5A 0x5A /* ? */
+#define REG_5B 0x5B /* ? */
+
+#define REG_INFO0 0x70 /* Sensor model byte0 */
+#define REG_INFO1 0x71 /* Sensor model byte1 */
+#define REG_INFO2 0x72 /* Sensor model byte2 */
+#define REG_INFO3 0x73 /* Sensor model byte3 */
+
+#define REG_GAIN 0xE0
+#define REG_VRT 0xE1
+#define REG_VRB 0xE2
+#define REG_DTVRT 0xE3 /* used for contact detection */
+#define REG_VCO_CONTROL 0xE5 /* 0x13 (IDLE?), 0x14 (REALTIME) */
+#define REG_DCOFFSET 0xE6
+
+#define REG_F0 0xF0 /* ? init:0x00 close:0x01 */
+#define REG_F2 0xF2 /* ? init:0x00 close:0x4E */
+
+#define REG_MODE_SLEEP 0x30 /* Sleep mode */
+#define REG_MODE_CONTACT 0x31 /* Contact mode */
+#define REG_MODE_SENSOR 0x33 /* Sensor mode */
+#define REG_MODE_FP 0x34 /* FingerPrint mode (Fly-Estimation®) */
+
+#define REG_VCO_IDLE 0x13
+#define REG_VCO_RT 0x14 /* Realtime */
+
+/* The size of the message header is 5 plus 1 for the command. */
+#define MSG_HDR_SIZE 6
+
+/* This structure must be packed because it is a the raw message sent. */
+struct egis_msg {
+ uint8_t magic[5]; /* out: 'EGIS' 0x09 / in: 'SIGE' 0x0A */
+ uint8_t cmd;
+ union {
+ struct {
+ uint8_t nb;
+ uint8_t regs[REG_MAX];
+ } egis_readreg;
+ struct {
+ uint8_t regs[REG_MAX];
+ } sige_readreg;
+ struct {
+ uint8_t nb;
+ struct {
+ uint8_t reg;
+ uint8_t val;
+ } regs[REG_MAX];
+ } egis_writereg;
+ struct {
+ uint8_t length_factor;
+ uint8_t length;
+ uint8_t use_gvv;
+ uint8_t gain;
+ uint8_t vrt;
+ uint8_t vrb;
+ } egis_readf;
+ struct {
+ uint8_t len[2];
+ uint8_t val[3];
+ } egis_readfp;
+ struct {
+ uint8_t val[5];
+ } sige_misc;
+ uint8_t padding[0x40-6]; /* Ensure size of 0x40 */
+ };
+} __attribute__((packed));
+
+
+/* Structure to keep information between asynchronous functions. */
+struct etes603_dev {
+ uint8_t regs[256];
+ struct egis_msg *req;
+ size_t req_len;
+ struct egis_msg *ans;
+ size_t ans_len;
+
+ uint8_t *fp;
+ uint16_t fp_height;
+
+ uint8_t tunedc_min;
+ uint8_t tunedc_max;
+
+ /* Device parameters */
+ uint8_t gain;
+ uint8_t dcoffset;
+ uint8_t vrt;
+ uint8_t vrb;
+
+ unsigned int is_active;
+};
+
+static void m_start_fingerdetect(struct fp_img_dev *idev);
+/*
+ * Prepare the header of the message to be sent to the device.
+ */
+static void msg_header_prepare(struct egis_msg *msg)
+{
+ msg->magic[0] = 'E';
+ msg->magic[1] = 'G';
+ msg->magic[2] = 'I';
+ msg->magic[3] = 'S';
+ msg->magic[4] = 0x09;
+}
+
+/*
+ * Check that the header of the received message is correct.
+ */
+static int msg_header_check(struct egis_msg *msg)
+{
+ if (msg->magic[0] == 'S' && msg->magic[1] == 'I'
+ && msg->magic[2] == 'G' && msg->magic[3] == 'E'
+ && msg->magic[4] == 0x0A)
+ return 0;
+ return -1;
+}
+
+/*
+ * Prepare message to ask for a frame.
+ */
+static void msg_get_frame(struct etes603_dev *dev,
+ uint8_t use_gvv, uint8_t gain, uint8_t vrt, uint8_t vrb)
+{
+ struct egis_msg *msg = dev->req;
+ msg_header_prepare(msg);
+ msg->cmd = CMD_READ_FRAME;
+ msg->egis_readf.length_factor = 0x01;
+ /* length should be 0xC0 */
+ msg->egis_readf.length = FRAME_WIDTH;
+ msg->egis_readf.use_gvv = use_gvv;
+ /* if use_gvv is set, gain/vrt/vrb are used */
+ msg->egis_readf.gain = gain;
+ msg->egis_readf.vrt = vrt;
+ msg->egis_readf.vrb = vrb;
+
+ dev->req_len = MSG_HDR_SIZE + 6;
+ dev->ans_len = FRAME_SIZE;
+}
+
+/*
+ * Prepare message to ask for a fingerprint frame.
+ */
+static void msg_get_fp(struct etes603_dev *dev, uint8_t len0, uint8_t len1,
+ uint8_t v2, uint8_t v3, uint8_t v4)
+{
+ struct egis_msg *msg = dev->req;
+ msg_header_prepare(msg);
+ msg->cmd = CMD_READ_FE;
+ /* Unknown values and always same on captured frames.
+ * 1st 2nd bytes is unsigned short for height, but only on value range
+ * 0x01 0xF4 (500), 0x02 0x00 (512), 0x02 0xF4 (756) are ok
+ */
+ msg->egis_readfp.len[0] = len0;
+ msg->egis_readfp.len[1] = len1;
+ /* 3rd byte : ?? but changes frame size
+ * 4th byte : 0x00 -> can change width
+ * 5th byte : motion sensibility?
+ */
+ msg->egis_readfp.val[0] = v2;
+ msg->egis_readfp.val[1] = v3;
+ msg->egis_readfp.val[2] = v4;
+
+ dev->req_len = MSG_HDR_SIZE + 5;
+ dev->ans_len = FE_SIZE;
+}
+
+/*
+ * Prepare message to read registers from the sensor.
+ * Variadic argument pattern: int reg, ...
+ */
+static void msg_get_regs(struct etes603_dev *dev, int n_args, ... )
+{
+ struct egis_msg *msg = dev->req;
+ va_list ap;
+ int i;
+
+ assert(n_args > 0 && n_args <= REG_MAX);
+
+ msg_header_prepare(msg);
+ msg->cmd = CMD_READ_REG;
+ msg->egis_readreg.nb = n_args;
+ va_start(ap, n_args);
+ for (i = 0; i < n_args; i++) {
+ msg->egis_readreg.regs[i] = va_arg(ap, int);
+ }
+ va_end(ap);
+
+ dev->req_len = MSG_HDR_SIZE + 1 + n_args;
+ dev->ans_len = MSG_HDR_SIZE + 1 + n_args;
+}
+
+/*
+ * Parse the result of read register command.
+ */
+static int msg_parse_regs(struct etes603_dev *dev)
+{
+ size_t i, n_args;
+ struct egis_msg *msg_req = dev->req;
+ struct egis_msg *msg_ans = dev->ans;
+ n_args = dev->ans_len - MSG_HDR_SIZE;
+
+ if (msg_header_check(msg_ans)) {
+ return -1;
+ }
+ if (msg_ans->cmd != CMD_OK) {
+ return -2;
+ }
+
+ for (i = 0; i < n_args; i++) {
+ int reg = msg_req->egis_readreg.regs[i];
+ dev->regs[reg] = msg_ans->sige_readreg.regs[i];
+ }
+ return 0;
+}
+
+/*
+ * Prepare message to write sensor's registers.
+ * Variadic arguments are: int reg, int val, ...
+ */
+static void msg_set_regs(struct etes603_dev *dev, int n_args, ...)
+{
+ struct egis_msg *msg = dev->req;
+ va_list ap;
+ int i;
+
+ assert(n_args != 0 && n_args % 2 == 0 && n_args <= REG_MAX * 2);
+
+ msg_header_prepare(msg);
+ msg->cmd = CMD_WRITE_REG;
+ msg->egis_writereg.nb = n_args / 2;
+
+ va_start(ap, n_args);
+ for (i = 0; i < n_args / 2; i++) {
+ msg->egis_writereg.regs[i].reg = va_arg(ap, int);
+ msg->egis_writereg.regs[i].val = va_arg(ap, int);
+ }
+ va_end(ap);
+
+ dev->req_len = MSG_HDR_SIZE + 1 + n_args;
+ dev->ans_len = MSG_HDR_SIZE + 1;
+}
+
+static int msg_check_ok(struct etes603_dev *dev)
+{
+ struct egis_msg *msg = dev->ans;
+ if (msg_header_check(msg)) {
+ goto err;
+ }
+ if (msg->cmd != CMD_OK) {
+ goto err;
+ }
+ return 0;
+err:
+ return -1;
+}
+
+/*
+ * Check the model of the sensor.
+ */
+static int check_info(struct etes603_dev *dev)
+{
+ if (dev->regs[0x70] == 0x4A && dev->regs[0x71] == 0x44
+ && dev->regs[0x72] == 0x49 && dev->regs[0x73] == 0x31)
+ return 0;
+ fp_err("unknown device parameters (REG_70:%02X REG_71:%02X "
+ "REG_FIRMWARE:%02X REG_VERSION:%02X)",
+ dev->regs[0x70], dev->regs[0x71], dev->regs[0x72],
+ dev->regs[0x73]);
+ return -1;
+}
+
+static void msg_get_cmd20(struct etes603_dev *dev)
+{
+ struct egis_msg *msg = dev->req;
+ msg_header_prepare(msg);
+ msg->cmd = CMD_20;
+ dev->req_len = MSG_HDR_SIZE;
+}
+
+static int msg_check_cmd20(struct etes603_dev *dev)
+{
+ struct egis_msg *msg = dev->ans;
+ if (msg_header_check(msg)) {
+ fp_err("msg_header_check failed");
+ return -1;
+ }
+ /* status or flashtype/flashinfo or ? */
+ if (msg->cmd != 0x05
+ || msg->sige_misc.val[0] != 0x00
+ || msg->sige_misc.val[1] != 0x00) {
+ fp_warn("unexpected answer CMD_20 from device(%02X %02X %02X)",
+ msg->cmd, msg->sige_misc.val[0], msg->sige_misc.val[1]);
+ }
+
+ return 0;
+}
+
+static void msg_get_cmd25(struct etes603_dev *dev)
+{
+ struct egis_msg *msg = dev->req;
+ msg_header_prepare(msg);
+ msg->cmd = CMD_25;
+ dev->req_len = MSG_HDR_SIZE;
+}
+
+static int msg_check_cmd25(struct etes603_dev *dev)
+{
+ struct egis_msg *msg = dev->ans;
+ if (msg_header_check(msg)) {
+ fp_err("msg_header_check failed");
+ goto err;
+ }
+ if (msg->cmd != CMD_OK) {
+ fp_err("CMD_OK failed");
+ goto err;
+ }
+ /* flashtype or status or ? */
+ if (msg->sige_misc.val[0] != 0x00) {
+ fp_warn("unexpected answer for CMD_25 (%02X)",
+ msg->sige_misc.val[0]);
+ }
+ return 0;
+err:
+ return -1;
+}
+
+static void msg_set_mode_control(struct etes603_dev *dev, uint8_t mode)
+{
+ msg_set_regs(dev, 2, REG_MODE_CONTROL, mode);
+}
+
+
+/* Processing functions */
+
+/*
+ * Return the brightness of a 4bpp frame
+ */
+static unsigned int process_get_brightness(uint8_t *f, size_t s)
+{
+ unsigned int i, sum = 0;
+ for (i = 0; i < s; i++) {
+ sum += f[i] >> 4;
+ sum += f[i] & 0x0F;
+ }
+ return sum;
+}
+
+/*
+ * Return the histogram of a 4bpp frame
+ */
+static void process_hist(uint8_t *f, size_t s, float stat[5])
+{
+ float hist[16];
+ float black_mean, white_mean;
+ int i;
+ /* Clean histogram */
+ for (i = 0; i < 16; i++)
+ hist[i] = 0.0;
+ for (i = 0; i < s; i++) {
+ hist[f[i] >> 4]++;
+ hist[f[i] & 0x0F]++;
+ }
+ /* histogram average */
+ for (i = 0; i < 16; i++) {
+ hist[i] = hist[i] / (s * 2);
+ }
+ /* Average black/white pixels (full black and full white pixels
+ * are excluded). */
+ black_mean = white_mean = 0.0;
+ for (i = 1; i < 8; i++)
+ black_mean += hist[i];
+ for (i = 8; i < 15; i++)
+ white_mean += hist[i];
+ stat[0] = hist[0];
+ stat[1] = black_mean;
+ stat[2] = black_mean+white_mean;
+ stat[3] = white_mean;
+ stat[4] = hist[15];
+ fp_dbg("fullb=%6f black=%6f grey=%6f white=%6f fullw=%6f",
+ hist[0], black_mean, black_mean+white_mean, white_mean,
+ hist[15]);
+}
+
+/*
+ * Return true if the frame is almost empty.
+ */
+static int process_frame_empty(uint8_t *frame, size_t size)
+{
+ unsigned int sum = process_get_brightness(frame, size);
+ /* Allow an average of 'threshold' luminosity per pixel */
+ if (sum < size)
+ return 1;
+ return 0;
+}
+
+/* Transform 4 bits image to 8 bits image */
+static void process_4to8_bpp(uint8_t *input, unsigned int input_size,
+ uint8_t *output)
+{
+ unsigned int i, j = 0;
+ for (i = 0; i < input_size; i++, j += 2) {
+ /* 16 gray levels transform to 256 levels using << 4 */
+ output[j] = input[i] & 0xF0;
+ output[j+1] = input[i] << 4;
+ }
+}
+
+/*
+ * Remove duplicated lines at the end of a fingerprint.
+ */
+static void process_remove_fp_end(struct etes603_dev *dev)
+{
+ unsigned int i;
+ /* 2 last lines with Fly-Estimation are the empty pattern. */
+ uint8_t *pattern = dev->fp + (dev->fp_height - 2) * FE_WIDTH / 2;
+ for (i = 2; i < dev->fp_height; i+= 2) {
+ if (memcmp(pattern, pattern - (i * FE_WIDTH / 2), FE_WIDTH))
+ break;
+ }
+ dev->fp_height -= i;
+ fp_dbg("Removing %d empty lines from image", i - 2);
+}
+
+static void reset_param(struct etes603_dev *dev)
+{
+ dev->dcoffset = 0;
+ dev->vrt = 0;
+ dev->vrb = 0;
+ dev->gain = 0;
+}
+
+
+/* Asynchronous stuff */
+
+enum {
+ INIT_CHECK_INFO_REQ,
+ INIT_CHECK_INFO_ANS,
+ INIT_CMD20_REQ,
+ INIT_CMD20_ANS,
+ INIT_CMD25_REQ,
+ INIT_CMD25_ANS,
+ INIT_SENSOR_REQ,
+ INIT_SENSOR_ANS,
+ INIT_ENC_REQ,
+ INIT_ENC_ANS,
+ INIT_REGS_REQ,
+ INIT_REGS_ANS,
+ INIT_NUM_STATES
+};
+
+enum {
+ TUNEDC_INIT,
+ TUNEDC_SET_DCOFFSET_REQ,
+ TUNEDC_SET_DCOFFSET_ANS,
+ TUNEDC_GET_FRAME_REQ,
+ TUNEDC_GET_FRAME_ANS,
+ TUNEDC_FINAL_SET_REG2122_REQ,
+ TUNEDC_FINAL_SET_REG2122_ANS,
+ TUNEDC_FINAL_SET_GAIN_REQ,
+ TUNEDC_FINAL_SET_GAIN_ANS,
+ TUNEDC_FINAL_SET_DCOFFSET_REQ,
+ TUNEDC_FINAL_SET_DCOFFSET_ANS,
+ TUNEDC_NUM_STATES
+};
+
+enum {
+ TUNEVRB_INIT,
+ TUNEVRB_GET_GAIN_REQ,
+ TUNEVRB_GET_GAIN_ANS,
+ TUNEVRB_GET_DCOFFSET_REQ,
+ TUNEVRB_GET_DCOFFSET_ANS,
+ TUNEVRB_SET_DCOFFSET_REQ,
+ TUNEVRB_SET_DCOFFSET_ANS,
+ TUNEVRB_FRAME_REQ,
+ TUNEVRB_FRAME_ANS,
+ TUNEVRB_FINAL_SET_DCOFFSET_REQ,
+ TUNEVRB_FINAL_SET_DCOFFSET_ANS,
+ TUNEVRB_FINAL_SET_REG2627_REQ,
+ TUNEVRB_FINAL_SET_REG2627_ANS,
+ TUNEVRB_FINAL_SET_GAINVRTVRB_REQ,
+ TUNEVRB_FINAL_SET_GAINVRTVRB_ANS,
+ TUNEVRB_FINAL_SET_MODE_SLEEP_REQ,
+ TUNEVRB_FINAL_SET_MODE_SLEEP_ANS,
+ TUNEVRB_NUM_STATES
+};
+
+enum {
+ FGR_FPA_INIT_SET_MODE_SLEEP_REQ,
+ FGR_FPA_INIT_SET_MODE_SLEEP_ANS,
+ FGR_FPA_INIT_SET_DCOFFSET_REQ,
+ FGR_FPA_INIT_SET_DCOFFSET_ANS,
+ FGR_FPA_INIT_SET_GAINVRTVRB_REQ,
+ FGR_FPA_INIT_SET_GAINVRTVRB_ANS,
+ FGR_FPA_INIT_SET_VCO_CONTROL_RT_REQ,
+ FGR_FPA_INIT_SET_VCO_CONTROL_RT_ANS,
+ FGR_FPA_INIT_SET_REG04_REQ,
+ FGR_FPA_INIT_SET_REG04_ANS,
+ FGR_FPA_INIT_SET_MODE_SENSOR_REQ,
+ FGR_FPA_INIT_SET_MODE_SENSOR_ANS,
+ FGR_FPA_GET_FRAME_REQ,
+ FGR_FPA_GET_FRAME_ANS,
+ FGR_NUM_STATES
+};
+
+enum {
+ CAP_FP_INIT_SET_REG10_REQ,
+ CAP_FP_INIT_SET_REG10_ANS,
+ CAP_FP_INIT_SET_MODE_FP_REQ,
+ CAP_FP_INIT_SET_MODE_FP_ANS,
+ CAP_FP_GET_FP_REQ,
+ CAP_FP_GET_FP_ANS,
+ CAP_NUM_STATES
+};
+
+enum {
+ EXIT_SET_REGS_REQ,
+ EXIT_SET_REGS_ANS,
+ EXIT_NUM_STATES
+};
+
+static int async_tx(struct fp_img_dev *idev, unsigned int ep, void *cb,
+ void *cb_arg)
+{
+ struct etes603_dev *dev = idev->priv;
+ struct libusb_transfer *transfer = libusb_alloc_transfer(0);
+ unsigned char *buffer;
+ int length;
+
+ if (!transfer)
+ return -ENOMEM;
+
+ if (ep == EP_OUT) {
+ buffer = (unsigned char *)dev->req;
+ length = dev->req_len;
+ } else if (ep == EP_IN) {
+ buffer = (unsigned char *)dev->ans;
+ length = dev->ans_len;
+ } else {
+ return -EIO;
+ }
+ libusb_fill_bulk_transfer(transfer, idev->udev, ep, buffer, length,
+ cb, cb_arg, BULK_TIMEOUT);
+
+ if (libusb_submit_transfer(transfer)) {
+ libusb_free_transfer(transfer);
+ return -EIO;
+ }
+ return 0;
+}
+
+
+static void async_tx_cb(struct libusb_transfer *transfer)
+{
+ struct fpi_ssm *ssm = transfer->user_data;
+ struct fp_img_dev *idev = ssm->priv;
+ struct etes603_dev *dev = idev->priv;
+
+ if (transfer->status != LIBUSB_TRANSFER_COMPLETED) {
+ fp_warn("transfer is not completed (status=%d)",
+ transfer->status);
+ fpi_ssm_mark_aborted(ssm, -EIO);
+ libusb_free_transfer(transfer);
+ } else {
+ unsigned char endpoint = transfer->endpoint;
+ int actual_length = transfer->actual_length;
+ int length = transfer->length;
+ /* Freeing now transfer since fpi_ssm_* functions are not
+ * returning directly. */
+ libusb_free_transfer(transfer);
+ if (endpoint == EP_OUT) {
+ if (length != actual_length)
+ fp_warn("length %d != actual_length %d",
+ length, actual_length);
+ /* Chained with the answer */
+ if (async_tx(idev, EP_IN, async_tx_cb, ssm))
+ fpi_ssm_mark_aborted(ssm, -EIO);
+ } else if (endpoint == EP_IN) {
+ dev->ans_len = actual_length;
+ fpi_ssm_next_state(ssm);
+ }
+ }
+}
+
+static void m_exit_state(struct fpi_ssm *ssm)
+{
+ struct fp_img_dev *idev = ssm->priv;
+ struct etes603_dev *dev = idev->priv;
+
+ switch (ssm->cur_state) {
+ case EXIT_SET_REGS_REQ:
+ msg_set_regs(dev, 4, REG_VCO_CONTROL, REG_VCO_IDLE,
+ REG_MODE_CONTROL, REG_MODE_SLEEP);
+ if (async_tx(idev, EP_OUT, async_tx_cb, ssm))
+ goto err;
+ break;
+ case EXIT_SET_REGS_ANS:
+ if (msg_check_ok(dev))
+ goto err;
+ fpi_ssm_mark_completed(ssm);
+ break;
+ default:
+ fp_err("Unknown state %d", ssm->cur_state);
+ goto err;
+ break;
+ }
+
+ return;
+err:
+ fpi_ssm_mark_aborted(ssm, -EIO);
+}
+
+static void m_exit_complete(struct fpi_ssm *ssm)
+{
+ struct fp_img_dev *idev = ssm->priv;
+
+ if (ssm->error) {
+ fp_err("Error switching the device to idle state");
+ } else {
+ fp_dbg("The device is now in idle state");
+ }
+ fpi_imgdev_deactivate_complete(idev);
+ fpi_ssm_free(ssm);
+}
+
+static void m_exit_start(struct fp_img_dev *idev)
+{
+ struct fpi_ssm *ssm = fpi_ssm_new(idev->dev, m_exit_state,
+ EXIT_NUM_STATES);
+ fp_dbg("Switching device to idle mode");
+ ssm->priv = idev;
+ fpi_ssm_start(ssm, m_exit_complete);
+}
+
+static void m_capture_state(struct fpi_ssm *ssm)
+{
+ struct fp_img_dev *idev = ssm->priv;
+ struct etes603_dev *dev = idev->priv;
+
+ if (dev->is_active == FALSE) {
+ fpi_ssm_mark_completed(ssm);
+ return;
+ }
+
+ switch (ssm->cur_state) {
+ case CAP_FP_INIT_SET_REG10_REQ:
+ /* Reset fingerprint */
+ fp_dbg("Capturing a fingerprint...");
+ memset(dev->fp, 0, FE_SIZE * 2);
+ dev->fp_height = 0;
+ msg_set_regs(dev, 2, REG_10, 0x92);
+ if (async_tx(idev, EP_OUT, async_tx_cb, ssm))
+ goto err;
+ break;
+ case CAP_FP_INIT_SET_REG10_ANS:
+ if (msg_check_ok(dev))
+ goto err;
+ fpi_ssm_next_state(ssm);
+ break;
+ case CAP_FP_INIT_SET_MODE_FP_REQ:
+ msg_set_mode_control(dev, REG_MODE_FP);
+ if (async_tx(idev, EP_OUT, async_tx_cb, ssm))
+ goto err;
+ break;
+ case CAP_FP_INIT_SET_MODE_FP_ANS:
+ if (msg_check_ok(dev))
+ goto err;
+ fp_dbg("Capturing a 1st frame...");
+ fpi_ssm_next_state(ssm);
+ break;
+ case CAP_FP_GET_FP_REQ:
+ msg_get_fp(dev, 0x01, 0xF4, 0x02, 0x01, 0x64);
+ if (async_tx(idev, EP_OUT, async_tx_cb, ssm))
+ goto err;
+ break;
+ case CAP_FP_GET_FP_ANS:
+ memcpy(dev->fp + dev->fp_height * FE_WIDTH / 2, dev->ans,
+ FE_SIZE);
+ dev->fp_height += FE_HEIGHT;
+ if (dev->fp_height <= FE_HEIGHT) {
+ /* 2 lines are at least removed each time */
+ dev->fp_height -= 2;
+ fp_dbg("Capturing a 2nd frame...");
+ fpi_ssm_jump_to_state(ssm, CAP_FP_GET_FP_REQ);
+ } else {
+ struct fp_img *img;
+ unsigned int img_size;
+ /* Remove empty parts 2 times for the 2 frames */
+ process_remove_fp_end(dev);
+ process_remove_fp_end(dev);
+ img_size = dev->fp_height * FE_WIDTH;
+ img = fpi_img_new(img_size);
+ /* Images received are white on black, so invert it. */
+ /* TODO detect sweep direction */
+ img->flags = FP_IMG_COLORS_INVERTED | FP_IMG_V_FLIPPED;
+ img->height = dev->fp_height;
+ process_4to8_bpp(dev->fp, img_size / 2, img->data);
+ fp_dbg("Sending the raw fingerprint image (%dx%d)",
+ img->width, img->height);
+ fpi_imgdev_image_captured(idev, img);
+ fpi_imgdev_report_finger_status(idev, FALSE);
+ fpi_ssm_mark_completed(ssm);
+ }
+ break;
+ default:
+ fp_err("Unknown state %d", ssm->cur_state);
+ goto err;
+ break;
+ }
+
+ return;
+err:
+ fpi_ssm_mark_aborted(ssm, -EIO);
+}
+
+static void m_capture_complete(struct fpi_ssm *ssm)
+{
+ struct fp_img_dev *idev = ssm->priv;
+ struct etes603_dev *dev = idev->priv;
+
+ if (ssm->error) {
+ if (idev->action_state != IMG_ACQUIRE_STATE_DEACTIVATING) {
+ fp_err("Error while capturing fingerprint "
+ "(ssm->error=%d)", ssm->error);
+ fpi_imgdev_session_error(idev, ssm->error);
+ }
+ }
+ fpi_ssm_free(ssm);
+
+ if (dev->is_active == TRUE) {
+ fp_dbg("Device is still active, restarting finger detection");
+ m_start_fingerdetect(idev);
+ } else {
+ fp_dbg("And it's over.");
+ }
+}
+
+static void m_finger_state(struct fpi_ssm *ssm)
+{
+ struct fp_img_dev *idev = ssm->priv;
+ struct etes603_dev *dev = idev->priv;
+
+ if (dev->is_active == FALSE) {
+ fpi_ssm_mark_completed(ssm);
+ return;
+ }
+
+ switch (ssm->cur_state) {
+ case FGR_FPA_INIT_SET_MODE_SLEEP_REQ:
+ msg_set_mode_control(dev, REG_MODE_SLEEP);
+ if (async_tx(idev, EP_OUT, async_tx_cb, ssm))
+ goto err;
+ break;
+ case FGR_FPA_INIT_SET_MODE_SLEEP_ANS:
+ if (msg_check_ok(dev))
+ goto err;
+ fpi_ssm_next_state(ssm);
+ break;
+ case FGR_FPA_INIT_SET_DCOFFSET_REQ:
+ msg_set_regs(dev, 2, REG_DCOFFSET, dev->dcoffset);
+ if (async_tx(idev, EP_OUT, async_tx_cb, ssm))
+ goto err;
+ break;
+ case FGR_FPA_INIT_SET_DCOFFSET_ANS:
+ if (msg_check_ok(dev))
+ goto err;
+ fpi_ssm_next_state(ssm);
+ break;
+ case FGR_FPA_INIT_SET_GAINVRTVRB_REQ:
+ msg_set_regs(dev, 6, REG_GAIN, dev->gain, REG_VRT, dev->vrt,
+ REG_VRB, dev->vrb);
+ if (async_tx(idev, EP_OUT, async_tx_cb, ssm))
+ goto err;
+ break;
+ case FGR_FPA_INIT_SET_GAINVRTVRB_ANS:
+ if (msg_check_ok(dev))
+ goto err;
+ fpi_ssm_next_state(ssm);
+ break;
+ case FGR_FPA_INIT_SET_VCO_CONTROL_RT_REQ:
+ msg_set_regs(dev, 2, REG_VCO_CONTROL, REG_VCO_RT);
+ if (async_tx(idev, EP_OUT, async_tx_cb, ssm))
+ goto err;
+ break;
+ case FGR_FPA_INIT_SET_VCO_CONTROL_RT_ANS:
+ if (msg_check_ok(dev))
+ goto err;
+ fpi_ssm_next_state(ssm);
+ break;
+ case FGR_FPA_INIT_SET_REG04_REQ:
+ msg_set_regs(dev, 2, REG_04, 0x00);
+ if (async_tx(idev, EP_OUT, async_tx_cb, ssm))
+ goto err;
+ break;
+ case FGR_FPA_INIT_SET_REG04_ANS:
+ if (msg_check_ok(dev))
+ goto err;
+ fpi_ssm_next_state(ssm);
+ break;
+ case FGR_FPA_INIT_SET_MODE_SENSOR_REQ:
+ msg_set_mode_control(dev, REG_MODE_SENSOR);
+ if (async_tx(idev, EP_OUT, async_tx_cb, ssm))
+ goto err;
+ break;
+ case FGR_FPA_INIT_SET_MODE_SENSOR_ANS:
+ if (msg_check_ok(dev))
+ goto err;
+ fpi_ssm_next_state(ssm);
+ break;
+ case FGR_FPA_GET_FRAME_REQ:
+ msg_get_frame(dev, 0x00, 0x00, 0x00, 0x00);
+ if (async_tx(idev, EP_OUT, async_tx_cb, ssm))
+ goto err;
+ break;
+ case FGR_FPA_GET_FRAME_ANS:
+ if (process_frame_empty((uint8_t *)dev->ans, FRAME_SIZE)) {
+ fpi_ssm_jump_to_state(ssm, FGR_FPA_GET_FRAME_REQ);
+ } else {
+ fpi_imgdev_report_finger_status(idev, TRUE);
+ fpi_ssm_mark_completed(ssm);
+ }
+ break;
+ default:
+ fp_err("Unknown state %d", ssm->cur_state);
+ goto err;
+ break;
+ }
+
+ return;
+err:
+ fpi_ssm_mark_aborted(ssm, -EIO);
+}
+
+static void m_finger_complete(struct fpi_ssm *ssm)
+{
+ struct fp_img_dev *idev = ssm->priv;
+ struct etes603_dev *dev = idev->priv;
+
+ if (!ssm->error) {
+ struct fpi_ssm *ssm_cap;
+ ssm_cap = fpi_ssm_new(idev->dev, m_capture_state,
+ CAP_NUM_STATES);
+ ssm_cap->priv = idev;
+ fpi_ssm_start(ssm_cap, m_capture_complete);
+ } else {
+ if (idev->action_state != IMG_ACQUIRE_STATE_DEACTIVATING) {
+ fp_err("Error while capturing fingerprint "
+ "(ssm->error=%d)", ssm->error);
+ fpi_imgdev_session_error(idev, -4);
+ }
+ dev->is_active = FALSE;
+ }
+
+ fpi_ssm_free(ssm);
+}
+
+static void m_start_fingerdetect(struct fp_img_dev *idev)
+{
+ struct fpi_ssm *ssmf;
+ ssmf = fpi_ssm_new(idev->dev, m_finger_state, FGR_NUM_STATES);
+ ssmf->priv = idev;
+ fpi_ssm_start(ssmf, m_finger_complete);
+}
+
+/*
+ * Tune value of VRT and VRB for contrast and brightness.
+ */
+static void m_tunevrb_state(struct fpi_ssm *ssm)
+{
+ struct fp_img_dev *idev = ssm->priv;
+ struct etes603_dev *dev = idev->priv;
+ float hist[5];
+
+ if (dev->is_active == FALSE) {
+ fpi_ssm_mark_completed(ssm);
+ return;
+ }
+
+ switch (ssm->cur_state) {
+ case TUNEVRB_INIT:
+ fp_dbg("Tuning of VRT/VRB");
+ assert(dev->dcoffset);
+ /* VRT(reg E1)=0x0A and VRB(reg E2)=0x10 are starting values */
+ dev->vrt = 0x0A;
+ dev->vrb = 0x10;
+ fpi_ssm_next_state(ssm);
+ break;
+ case TUNEVRB_GET_GAIN_REQ:
+ msg_get_regs(dev, 1, REG_GAIN);
+ if (async_tx(idev, EP_OUT, async_tx_cb, ssm))
+ goto err;
+ break;
+ case TUNEVRB_GET_GAIN_ANS:
+ if (msg_parse_regs(dev))
+ goto err;
+ fpi_ssm_next_state(ssm);
+ break;
+ case TUNEVRB_GET_DCOFFSET_REQ:
+ msg_get_regs(dev, 1, REG_DCOFFSET);
+ if (async_tx(idev, EP_OUT, async_tx_cb, ssm))
+ goto err;
+ break;
+ case TUNEVRB_GET_DCOFFSET_ANS:
+ if (msg_parse_regs(dev))
+ goto err;
+ fpi_ssm_next_state(ssm);
+ break;
+ case TUNEVRB_SET_DCOFFSET_REQ:
+ /* Reduce DCoffset by 1 to allow tuning */
+ msg_set_regs(dev, 2, REG_DCOFFSET, dev->dcoffset - 1);
+ if (async_tx(idev, EP_OUT, async_tx_cb, ssm))
+ goto err;
+ break;
+ case TUNEVRB_SET_DCOFFSET_ANS:
+ if (msg_check_ok(dev))
+ goto err;
+ fpi_ssm_next_state(ssm);
+ break;
+ case TUNEVRB_FRAME_REQ:
+ fp_dbg("Testing VRT=0x%02X VRB=0x%02X", dev->vrt, dev->vrb);
+ msg_get_frame(dev, 0x01, dev->gain, dev->vrt, dev->vrb);
+ if (async_tx(idev, EP_OUT, async_tx_cb, ssm))
+ goto err;
+ break;
+ case TUNEVRB_FRAME_ANS:
+ process_hist((uint8_t *)dev->ans, FRAME_SIZE, hist);
+ /* Note that this tuning could probably be improved */
+ if (hist[0] + hist[1] > 0.95) {
+ if (dev->vrt <= 0 || dev->vrb <= 0) {
+ fp_dbg("Image is too dark, reducing DCOffset");
+ dev->dcoffset--;
+ fpi_ssm_jump_to_state(ssm, TUNEVRB_INIT);
+ } else {
+ dev->vrt--;
+ dev->vrb--;
+ fpi_ssm_jump_to_state(ssm, TUNEVRB_FRAME_REQ);
+ }
+ break;
+ }
+ if (hist[4] > 0.95) {
+ fp_dbg("Image is too bright, increasing DCOffset");
+ dev->dcoffset++;
+ fpi_ssm_jump_to_state(ssm, TUNEVRB_INIT);
+ break;
+ }
+ if (hist[4] + hist[3] > 0.4) {
+ if (dev->vrt >= 2 * dev->vrb - 0x0a) {
+ dev->vrt++; dev->vrb++;
+ } else {
+ dev->vrt++;
+ }
+ /* Check maximum for vrt/vrb */
+ /* TODO if maximum is reached, leave with an error? */
+ if (dev->vrt > VRT_MAX)
+ dev->vrt = VRT_MAX;
+ if (dev->vrb > VRB_MAX)
+ dev->vrb = VRB_MAX;
+ fpi_ssm_jump_to_state(ssm, TUNEVRB_FRAME_REQ);
+ break;
+ }
+ fpi_ssm_next_state(ssm);
+ break;
+ case TUNEVRB_FINAL_SET_DCOFFSET_REQ:
+ fp_dbg("-> VRT=0x%02X VRB=0x%02X", dev->vrt, dev->vrb);
+ /* Reset the DCOffset */
+ msg_set_regs(dev, 2, REG_DCOFFSET, dev->dcoffset);
+ if (async_tx(idev, EP_OUT, async_tx_cb, ssm))
+ goto err;
+ break;
+ case TUNEVRB_FINAL_SET_DCOFFSET_ANS:
+ if (msg_check_ok(dev))
+ goto err;
+ fpi_ssm_next_state(ssm);
+ break;
+ case TUNEVRB_FINAL_SET_REG2627_REQ:
+ /* In traces, REG_26/REG_27 are set. purpose? values? */
+ msg_set_regs(dev, 4, REG_26, 0x11, REG_27, 0x00);
+ if (async_tx(idev, EP_OUT, async_tx_cb, ssm))
+ goto err;
+ break;
+ case TUNEVRB_FINAL_SET_REG2627_ANS:
+ if (msg_check_ok(dev))
+ goto err;
+ fpi_ssm_next_state(ssm);
+ break;
+ case TUNEVRB_FINAL_SET_GAINVRTVRB_REQ:
+ /* Set Gain/VRT/VRB values found */
+ msg_set_regs(dev, 6, REG_GAIN, dev->gain, REG_VRT, dev->vrt,
+ REG_VRB, dev->vrb);
+ if (async_tx(idev, EP_OUT, async_tx_cb, ssm))
+ goto err;
+ break;
+ case TUNEVRB_FINAL_SET_GAINVRTVRB_ANS:
+ if (msg_check_ok(dev))
+ goto err;
+ /* In traces, Gain/VRT/VRB are read again. */
+ fpi_ssm_next_state(ssm);
+ break;
+ case TUNEVRB_FINAL_SET_MODE_SLEEP_REQ:
+ msg_set_mode_control(dev, REG_MODE_SLEEP);
+ if (async_tx(idev, EP_OUT, async_tx_cb, ssm))
+ goto err;
+ break;
+ case TUNEVRB_FINAL_SET_MODE_SLEEP_ANS:
+ if (msg_check_ok(dev))
+ goto err;
+ fpi_ssm_mark_completed(ssm);
+ break;
+ default:
+ fp_err("Unknown state %d", ssm->cur_state);
+ goto err;
+ break;
+ }
+
+ return;
+err:
+ fpi_ssm_mark_aborted(ssm, -EIO);
+}
+
+static void m_tunevrb_complete(struct fpi_ssm *ssm)
+{
+ struct fp_img_dev *idev = ssm->priv;
+
+ fpi_imgdev_activate_complete(idev, ssm->error != 0);
+ if (!ssm->error) {
+ fp_dbg("Tuning is done. Starting finger detection.");
+ m_start_fingerdetect(idev);
+ } else {
+ struct etes603_dev *dev = idev->priv;
+ fp_err("Error while tuning VRT");
+ dev->is_active = FALSE;
+ reset_param(dev);
+ fpi_imgdev_session_error(idev, -3);
+ }
+ fpi_ssm_free(ssm);
+}
+
+/*
+ * This function tunes the DCoffset value and adjusts the gain value if
+ * required.
+ */
+static void m_tunedc_state(struct fpi_ssm *ssm)
+{
+ struct fp_img_dev *idev = ssm->priv;
+ struct etes603_dev *dev = idev->priv;
+
+ if (dev->is_active == FALSE) {
+ fpi_ssm_mark_completed(ssm);
+ return;
+ }
+
+ /* TODO To get better results, tuning could be done 3 times as in
+ * captured traffic to make sure that the value is correct. */
+ /* The default gain should work but it may reach a DCOffset limit so in
+ * this case we decrease the gain. */
+ switch (ssm->cur_state) {
+ case TUNEDC_INIT:
+ /* reg_e0 = 0x23 is sensor normal/small gain */
+ dev->gain = GAIN_SMALL_INIT;
+ dev->tunedc_min = DCOFFSET_MIN;
+ dev->tunedc_max = DCOFFSET_MAX;
+ fp_dbg("Tuning DCoffset");
+ fpi_ssm_next_state(ssm);
+ break;
+ case TUNEDC_SET_DCOFFSET_REQ:
+ /* Dichotomic search to find at which value the frame becomes
+ * almost black. */
+ dev->dcoffset = (dev->tunedc_max + dev->tunedc_min) / 2;
+ fp_dbg("Testing DCoffset=0x%02X Gain=0x%02X", dev->dcoffset,
+ dev->gain);
+ msg_set_regs(dev, 2, REG_DCOFFSET, dev->dcoffset);
+ if (async_tx(idev, EP_OUT, async_tx_cb, ssm))
+ goto err;
+ break;
+ case TUNEDC_SET_DCOFFSET_ANS:
+ if (msg_check_ok(dev))
+ goto err;
+ fpi_ssm_next_state(ssm);
+ break;
+ case TUNEDC_GET_FRAME_REQ:
+ /* vrt:0x15 vrb:0x10 are constant in all tuning frames. */
+ msg_get_frame(dev, 0x01, dev->gain, 0x15, 0x10);
+ if (async_tx(idev, EP_OUT, async_tx_cb, ssm))
+ goto err;
+ break;
+ case TUNEDC_GET_FRAME_ANS:
+ if (process_frame_empty((uint8_t *)dev->ans, FRAME_WIDTH))
+ dev->tunedc_max = dev->dcoffset;
+ else
+ dev->tunedc_min = dev->dcoffset;
+ if (dev->tunedc_min + 1 < dev->tunedc_max) {
+ fpi_ssm_jump_to_state(ssm, TUNEDC_SET_DCOFFSET_REQ);
+ } else if (dev->tunedc_max < DCOFFSET_MAX) {
+ dev->dcoffset = dev->tunedc_max + 1;
+ fpi_ssm_next_state(ssm);
+ } else {
+ dev->gain--;
+ fpi_ssm_jump_to_state(ssm, TUNEDC_SET_DCOFFSET_REQ);
+ }
+ break;
+ case TUNEDC_FINAL_SET_REG2122_REQ:
+ fp_dbg("-> DCoffset=0x%02X Gain=0x%02X", dev->dcoffset,
+ dev->gain);
+ /* ??? how reg21 / reg22 are calculated */
+ msg_set_regs(dev, 4, REG_21, 0x23, REG_22, 0x21);
+ if (async_tx(idev, EP_OUT, async_tx_cb, ssm))
+ goto err;
+ break;
+ case TUNEDC_FINAL_SET_REG2122_ANS:
+ if (msg_check_ok(dev))
+ goto err;
+ fpi_ssm_next_state(ssm);
+ break;
+ case TUNEDC_FINAL_SET_GAIN_REQ:
+ msg_set_regs(dev, 2, REG_GAIN, dev->gain);
+ if (async_tx(idev, EP_OUT, async_tx_cb, ssm))
+ goto err;
+ break;
+ case TUNEDC_FINAL_SET_GAIN_ANS:
+ fpi_ssm_next_state(ssm);
+ break;
+ case TUNEDC_FINAL_SET_DCOFFSET_REQ:
+ msg_set_regs(dev, 2, REG_DCOFFSET, dev->dcoffset);
+ if (async_tx(idev, EP_OUT, async_tx_cb, ssm))
+ goto err;
+ break;
+ case TUNEDC_FINAL_SET_DCOFFSET_ANS:
+ /* In captured traffic, read GAIN, VRT, and VRB registers. */
+ if (msg_check_ok(dev))
+ goto err;
+ fpi_ssm_mark_completed(ssm);
+ break;
+ default:
+ fp_err("Unknown state %d", ssm->cur_state);
+ goto err;
+ break;
+ }
+
+ return;
+err:
+ fpi_ssm_mark_aborted(ssm, -EIO);
+
+}
+
+static void m_tunedc_complete(struct fpi_ssm *ssm)
+{
+ struct fp_img_dev *idev = ssm->priv;
+ if (!ssm->error) {
+ struct fpi_ssm *ssm_tune;
+ ssm_tune = fpi_ssm_new(idev->dev, m_tunevrb_state,
+ TUNEVRB_NUM_STATES);
+ ssm_tune->priv = idev;
+ fpi_ssm_start(ssm_tune, m_tunevrb_complete);
+ } else {
+ struct etes603_dev *dev = idev->priv;
+ fp_err("Error while tuning DCOFFSET");
+ dev->is_active = FALSE;
+ reset_param(dev);
+ fpi_imgdev_session_error(idev, -2);
+ }
+ fpi_ssm_free(ssm);
+}
+
+static void m_init_state(struct fpi_ssm *ssm)
+{
+ struct fp_img_dev *idev = ssm->priv;
+ struct etes603_dev *dev = idev->priv;
+
+ if (dev->is_active == FALSE) {
+ fpi_ssm_mark_completed(ssm);
+ return;
+ }
+
+ switch (ssm->cur_state) {
+ case INIT_CHECK_INFO_REQ:
+ msg_get_regs(dev, 4, REG_INFO0, REG_INFO1, REG_INFO2,
+ REG_INFO3);
+ if (async_tx(idev, EP_OUT, async_tx_cb, ssm))
+ goto err;
+ break;
+ case INIT_CHECK_INFO_ANS:
+ if (msg_parse_regs(dev))
+ goto err;
+ if (check_info(dev))
+ goto err;
+ fpi_ssm_next_state(ssm);
+ break;
+ case INIT_CMD20_REQ:
+ msg_get_cmd20(dev);
+ if (async_tx(idev, EP_OUT, async_tx_cb, ssm))
+ goto err;
+ break;
+ case INIT_CMD20_ANS:
+ if (msg_check_cmd20(dev))
+ goto err;
+ fpi_ssm_next_state(ssm);
+ break;
+ case INIT_CMD25_REQ:
+ msg_get_cmd25(dev);
+ if (async_tx(idev, EP_OUT, async_tx_cb, ssm))
+ goto err;
+ break;
+ case INIT_CMD25_ANS:
+ if (msg_check_cmd25(dev))
+ goto err;
+ fpi_ssm_next_state(ssm);
+ break;
+ case INIT_SENSOR_REQ:
+ /* In captured traffic, those are splitted. */
+ msg_set_regs(dev, 18, REG_MODE_CONTROL, REG_MODE_SLEEP,
+ REG_50, 0x0F, REG_GAIN, 0x04, REG_VRT, 0x08,
+ REG_VRB, 0x0D, REG_VCO_CONTROL, REG_VCO_RT,
+ REG_DCOFFSET, 0x36, REG_F0, 0x00, REG_F2, 0x00);
+ if (async_tx(idev, EP_OUT, async_tx_cb, ssm))
+ goto err;
+ break;
+ case INIT_SENSOR_ANS:
+ if (msg_check_ok(dev))
+ goto err;
+ fpi_ssm_next_state(ssm);
+ break;
+ case INIT_ENC_REQ:
+ /* Initialize encryption registers without encryption. */
+ /* Set registers from 0x41 to 0x48 (0x8 regs) */
+ msg_set_regs(dev, 16, REG_ENC1, 0x12, REG_ENC2, 0x34,
+ REG_ENC3, 0x56, REG_ENC4, 0x78, REG_ENC5, 0x90,
+ REG_ENC6, 0xAB, REG_ENC7, 0xCD, REG_ENC8, 0xEF);
+ if (async_tx(idev, EP_OUT, async_tx_cb, ssm))
+ goto err;
+ break;
+ case INIT_ENC_ANS:
+ if (msg_check_ok(dev))
+ goto err;
+ fpi_ssm_next_state(ssm);
+ break;
+ case INIT_REGS_REQ:
+ /* Set register from 0x20 to 0x37 (0x18 regs) */
+ msg_set_regs(dev, 48,
+ REG_20, 0x00, REG_21, 0x23, REG_22, 0x21, REG_23, 0x20,
+ REG_24, 0x14, REG_25, 0x6A, REG_26, 0x00, REG_27, 0x00,
+ REG_28, 0x00, REG_29, 0xC0, REG_2A, 0x50, REG_2B, 0x50,
+ REG_2C, 0x4D, REG_2D, 0x03, REG_2E, 0x06, REG_2F, 0x06,
+ REG_30, 0x10, REG_31, 0x02, REG_32, 0x14, REG_33, 0x34,
+ REG_34, 0x01, REG_35, 0x08, REG_36, 0x03, REG_37, 0x21);
+ if (async_tx(idev, EP_OUT, async_tx_cb, ssm))
+ goto err;
+ break;
+ case INIT_REGS_ANS:
+ if (msg_check_ok(dev))
+ goto err;
+ fpi_ssm_mark_completed(ssm);
+ break;
+ default:
+ fp_err("Unknown state %d", ssm->cur_state);
+ goto err;
+ break;
+ }
+
+ return;
+err:
+ fpi_ssm_mark_aborted(ssm, -EIO);
+
+}
+
+static void m_init_complete(struct fpi_ssm *ssm)
+{
+ struct fp_img_dev *idev = ssm->priv;
+ if (!ssm->error) {
+ struct fpi_ssm *ssm_tune;
+ ssm_tune = fpi_ssm_new(idev->dev, m_tunedc_state,
+ TUNEDC_NUM_STATES);
+ ssm_tune->priv = idev;
+ fpi_ssm_start(ssm_tune, m_tunedc_complete);
+ } else {
+ struct etes603_dev *dev = idev->priv;
+ fp_err("Error initializing the device");
+ dev->is_active = FALSE;
+ reset_param(dev);
+ fpi_imgdev_session_error(idev, -1);
+ }
+ fpi_ssm_free(ssm);
+}
+
+static int dev_activate(struct fp_img_dev *idev, enum fp_imgdev_state state)
+{
+ struct etes603_dev *dev = idev->priv;
+ struct fpi_ssm *ssm;
+
+ assert(dev);
+
+ if (state != IMGDEV_STATE_AWAIT_FINGER_ON) {
+ fp_err("The driver is in an unexpected state: %d.", state);
+ fpi_imgdev_activate_complete(idev, 1);
+ return -1;
+ }
+
+ /* Reset info and data */
+ dev->is_active = TRUE;
+
+ if (dev->dcoffset == 0) {
+ fp_dbg("Tuning device...");
+ ssm = fpi_ssm_new(idev->dev, m_init_state, INIT_NUM_STATES);
+ ssm->priv = idev;
+ fpi_ssm_start(ssm, m_init_complete);
+ } else {
+ fp_dbg("Using previous tuning (DCOFFSET=0x%02X,VRT=0x%02X,"
+ "VRB=0x%02X,GAIN=0x%02X).", dev->dcoffset, dev->vrt,
+ dev->vrb, dev->gain);
+ fpi_imgdev_activate_complete(idev, 0);
+ ssm = fpi_ssm_new(idev->dev, m_finger_state, FGR_NUM_STATES);
+ ssm->priv = idev;
+ fpi_ssm_start(ssm, m_finger_complete);
+ }
+ return 0;
+}
+
+static void dev_deactivate(struct fp_img_dev *idev)
+{
+ struct etes603_dev *dev = idev->priv;
+
+ fp_dbg("deactivating");
+
+ /* this can be called even if still activated. */
+ if (dev->is_active == TRUE) {
+ dev->is_active = FALSE;
+ m_exit_start(idev);
+ }
+}
+
+static int dev_open(struct fp_img_dev *idev, unsigned long driver_data)
+{
+ int ret;
+ struct etes603_dev *dev;
+
+ dev = g_malloc0(sizeof(struct etes603_dev));
+ idev->priv = dev;
+
+ dev->req = g_malloc(sizeof(struct egis_msg));
+ dev->ans = g_malloc(FE_SIZE);
+ dev->fp = g_malloc(FE_SIZE * 4);
+
+ ret = libusb_claim_interface(idev->udev, 0);
+ if (ret != LIBUSB_SUCCESS) {
+ fp_err("libusb_claim_interface failed on interface 0 "
+ "(err=%d)", ret);
+ return ret;
+ }
+
+ fpi_imgdev_open_complete(idev, 0);
+ return 0;
+}
+
+static void dev_close(struct fp_img_dev *idev)
+{
+ struct etes603_dev *dev = idev->priv;
+
+ g_free(dev->req);
+ g_free(dev->ans);
+ g_free(dev->fp);
+ g_free(dev);
+
+ libusb_release_interface(idev->udev, 0);
+ fpi_imgdev_close_complete(idev);
+}
+
+static const struct usb_id id_table[] = {
+ /* EgisTec (aka Lightuning) ES603 */
+ { .vendor = 0x1c7a, .product = 0x0603},
+ { 0, 0, 0, },
+};
+
+struct fp_img_driver etes603_driver = {
+ .driver = {
+ .id = ETES603_ID,
+ .name = FP_COMPONENT,
+ .full_name = "EgisTec ES603",
+ .id_table = id_table,
+ .scan_type = FP_SCAN_TYPE_SWIPE,
+ },
+ .flags = 0,
+ .img_height = -1,
+ .img_width = 256,
+
+ .open = dev_open,
+ .close = dev_close,
+ .activate = dev_activate,
+ .deactivate = dev_deactivate,
+};
+
diff --git a/libfprint/drivers/upeke2.c b/libfprint/drivers/upeke2.c
index a7db54d2..f6852058 100644
--- a/libfprint/drivers/upeke2.c
+++ b/libfprint/drivers/upeke2.c
@@ -48,7 +48,6 @@
enum {
UPEKE2_2016,
- UPEKE2_2020,
};
struct upeke2_dev {
@@ -856,9 +855,6 @@ static int discover(struct libusb_device_descriptor *dsc, uint32_t *devtype)
if (dsc->idProduct == 0x2016 && dsc->bcdDevice == 2)
return 1;
- if (dsc->idProduct == 0x2020 && dsc->bcdDevice == 1)
- return 1;
-
return 0;
}
@@ -1076,6 +1072,7 @@ static void e_handle_resp02(struct fp_dev *dev, unsigned char *data,
size_t data_len)
{
struct fp_print_data *fdata = NULL;
+ struct fp_print_data_item *item = NULL;
int result = -EPROTO;
if (data_len < sizeof(scan_comp)) {
@@ -1084,9 +1081,11 @@ static void e_handle_resp02(struct fp_dev *dev, unsigned char *data,
fp_err("unrecognised data prefix %x %x %x %x %x",
data[0], data[1], data[2], data[3], data[4]);
} else {
- fdata = fpi_print_data_new(dev, data_len - sizeof(scan_comp));
- memcpy(fdata->data, data + sizeof(scan_comp),
+ fdata = fpi_print_data_new(dev);
+ item = fpi_print_data_item_new(data_len - sizeof(scan_comp));
+ memcpy(item->data, data + sizeof(scan_comp),
data_len - sizeof(scan_comp));
+ fdata->prints = g_slist_prepend(fdata->prints, item);
result = FP_ENROLL_COMPLETE;
}
@@ -1248,12 +1247,13 @@ static void verify_start_sm_run_state(struct fpi_ssm *ssm)
break;
case VERIFY_INIT: ;
struct fp_print_data *print = dev->verify_data;
- size_t data_len = sizeof(verify_hdr) + print->length;
+ struct fp_print_data_item *item = print->prints->data;
+ size_t data_len = sizeof(verify_hdr) + item->length;
unsigned char *data = g_malloc(data_len);
struct libusb_transfer *transfer;
memcpy(data, verify_hdr, sizeof(verify_hdr));
- memcpy(data + sizeof(verify_hdr), print->data, print->length);
+ memcpy(data + sizeof(verify_hdr), item->data, item->length);
transfer = alloc_send_cmd28_transfer(dev, 0x03, data, data_len,
verify_init_2803_cb, ssm);
g_free(data);
@@ -1461,7 +1461,6 @@ static int verify_stop(struct fp_dev *dev, gboolean iterating)
static const struct usb_id id_table[] = {
{ .vendor = 0x147e, .product = 0x2016, .driver_data = UPEKE2_2016 },
- { .vendor = 0x147e, .product = 0x2020, .driver_data = UPEKE2_2020 },
{ 0, 0, 0, }, /* terminating entry */
};
diff --git a/libfprint/drivers/upektc_img.c b/libfprint/drivers/upektc_img.c
new file mode 100644
index 00000000..577d3ed0
--- /dev/null
+++ b/libfprint/drivers/upektc_img.c
@@ -0,0 +1,674 @@
+/*
+ * UPEK TouchChip driver for libfprint
+ * Copyright (C) 2013 Vasily Khoruzhick
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ */
+
+#define FP_COMPONENT "upekts_img"
+
+#include
+#include
+
+#include
+
+#include
+#include
+
+#include "upektc_img.h"
+#include "driver_ids.h"
+
+static void start_capture(struct fp_img_dev *dev);
+static void start_deactivation(struct fp_img_dev *dev);
+
+#define EP_IN (1 | LIBUSB_ENDPOINT_IN)
+#define EP_OUT (2 | LIBUSB_ENDPOINT_OUT)
+#define CTRL_TIMEOUT 4000
+#define BULK_TIMEOUT 4000
+
+#define IMAGE_WIDTH 144
+#define IMAGE_HEIGHT 384
+#define IMAGE_SIZE (IMAGE_WIDTH * IMAGE_HEIGHT)
+
+#define MAX_CMD_SIZE 64
+#define MAX_RESPONSE_SIZE 2052
+#define SHORT_RESPONSE_SIZE 64
+
+struct upekts_img_dev {
+ unsigned char cmd[MAX_CMD_SIZE];
+ unsigned char response[MAX_RESPONSE_SIZE];
+ unsigned char image_bits[IMAGE_SIZE * 2];
+ unsigned char seq;
+ size_t image_size;
+ size_t response_rest;
+ gboolean deactivating;
+};
+
+/****** HELPERS ******/
+
+static const uint16_t crc_table[256] = {
+ 0x0000, 0x1021, 0x2042, 0x3063, 0x4084, 0x50a5, 0x60c6, 0x70e7,
+ 0x8108, 0x9129, 0xa14a, 0xb16b, 0xc18c, 0xd1ad, 0xe1ce, 0xf1ef,
+ 0x1231, 0x0210, 0x3273, 0x2252, 0x52b5, 0x4294, 0x72f7, 0x62d6,
+ 0x9339, 0x8318, 0xb37b, 0xa35a, 0xd3bd, 0xc39c, 0xf3ff, 0xe3de,
+ 0x2462, 0x3443, 0x0420, 0x1401, 0x64e6, 0x74c7, 0x44a4, 0x5485,
+ 0xa56a, 0xb54b, 0x8528, 0x9509, 0xe5ee, 0xf5cf, 0xc5ac, 0xd58d,
+ 0x3653, 0x2672, 0x1611, 0x0630, 0x76d7, 0x66f6, 0x5695, 0x46b4,
+ 0xb75b, 0xa77a, 0x9719, 0x8738, 0xf7df, 0xe7fe, 0xd79d, 0xc7bc,
+ 0x48c4, 0x58e5, 0x6886, 0x78a7, 0x0840, 0x1861, 0x2802, 0x3823,
+ 0xc9cc, 0xd9ed, 0xe98e, 0xf9af, 0x8948, 0x9969, 0xa90a, 0xb92b,
+ 0x5af5, 0x4ad4, 0x7ab7, 0x6a96, 0x1a71, 0x0a50, 0x3a33, 0x2a12,
+ 0xdbfd, 0xcbdc, 0xfbbf, 0xeb9e, 0x9b79, 0x8b58, 0xbb3b, 0xab1a,
+ 0x6ca6, 0x7c87, 0x4ce4, 0x5cc5, 0x2c22, 0x3c03, 0x0c60, 0x1c41,
+ 0xedae, 0xfd8f, 0xcdec, 0xddcd, 0xad2a, 0xbd0b, 0x8d68, 0x9d49,
+ 0x7e97, 0x6eb6, 0x5ed5, 0x4ef4, 0x3e13, 0x2e32, 0x1e51, 0x0e70,
+ 0xff9f, 0xefbe, 0xdfdd, 0xcffc, 0xbf1b, 0xaf3a, 0x9f59, 0x8f78,
+ 0x9188, 0x81a9, 0xb1ca, 0xa1eb, 0xd10c, 0xc12d, 0xf14e, 0xe16f,
+ 0x1080, 0x00a1, 0x30c2, 0x20e3, 0x5004, 0x4025, 0x7046, 0x6067,
+ 0x83b9, 0x9398, 0xa3fb, 0xb3da, 0xc33d, 0xd31c, 0xe37f, 0xf35e,
+ 0x02b1, 0x1290, 0x22f3, 0x32d2, 0x4235, 0x5214, 0x6277, 0x7256,
+ 0xb5ea, 0xa5cb, 0x95a8, 0x8589, 0xf56e, 0xe54f, 0xd52c, 0xc50d,
+ 0x34e2, 0x24c3, 0x14a0, 0x0481, 0x7466, 0x6447, 0x5424, 0x4405,
+ 0xa7db, 0xb7fa, 0x8799, 0x97b8, 0xe75f, 0xf77e, 0xc71d, 0xd73c,
+ 0x26d3, 0x36f2, 0x0691, 0x16b0, 0x6657, 0x7676, 0x4615, 0x5634,
+ 0xd94c, 0xc96d, 0xf90e, 0xe92f, 0x99c8, 0x89e9, 0xb98a, 0xa9ab,
+ 0x5844, 0x4865, 0x7806, 0x6827, 0x18c0, 0x08e1, 0x3882, 0x28a3,
+ 0xcb7d, 0xdb5c, 0xeb3f, 0xfb1e, 0x8bf9, 0x9bd8, 0xabbb, 0xbb9a,
+ 0x4a75, 0x5a54, 0x6a37, 0x7a16, 0x0af1, 0x1ad0, 0x2ab3, 0x3a92,
+ 0xfd2e, 0xed0f, 0xdd6c, 0xcd4d, 0xbdaa, 0xad8b, 0x9de8, 0x8dc9,
+ 0x7c26, 0x6c07, 0x5c64, 0x4c45, 0x3ca2, 0x2c83, 0x1ce0, 0x0cc1,
+ 0xef1f, 0xff3e, 0xcf5d, 0xdf7c, 0xaf9b, 0xbfba, 0x8fd9, 0x9ff8,
+ 0x6e17, 0x7e36, 0x4e55, 0x5e74, 0x2e93, 0x3eb2, 0x0ed1, 0x1ef0
+};
+
+static uint16_t udf_crc(unsigned char *buffer, size_t size)
+{
+ uint16_t crc = 0;
+ while (size--)
+ crc = (uint16_t) ((crc << 8) ^
+ crc_table[((crc >> 8) & 0x00ff) ^ *buffer++]);
+ return crc;
+}
+
+static void upektc_img_cmd_fix_seq(unsigned char *cmd_buf, unsigned char seq)
+{
+ uint8_t byte;
+
+ byte = cmd_buf[5];
+ byte &= 0x0f;
+ byte |= (seq << 4);
+ cmd_buf[5] = byte;
+}
+
+static void upektc_img_cmd_update_crc(unsigned char *cmd_buf, size_t size)
+{
+ /* CRC does not cover Ciao prefix (4 bytes) and CRC location (2 bytes) */
+ uint16_t crc = udf_crc(cmd_buf + 4, size - 6);
+
+ cmd_buf[size - 2] = (crc & 0x00ff);
+ cmd_buf[size - 1] = (crc & 0xff00) >> 8;
+}
+
+static void upektc_img_submit_req(struct fpi_ssm *ssm,
+ const unsigned char *buf, size_t buf_size, unsigned char seq,
+ libusb_transfer_cb_fn cb)
+{
+ struct fp_img_dev *dev = ssm->priv;
+ struct upekts_img_dev *upekdev = dev->priv;
+ struct libusb_transfer *transfer = libusb_alloc_transfer(0);
+ int r;
+
+ BUG_ON(buf_size > MAX_CMD_SIZE);
+
+ if (!transfer) {
+ fpi_ssm_mark_aborted(ssm, -ENOMEM);
+ return;
+ }
+
+ transfer->flags |= LIBUSB_TRANSFER_FREE_TRANSFER;
+
+ memcpy(upekdev->cmd, buf, buf_size);
+ upektc_img_cmd_fix_seq(upekdev->cmd, seq);
+ upektc_img_cmd_update_crc(upekdev->cmd, buf_size);
+
+ libusb_fill_bulk_transfer(transfer, dev->udev, EP_OUT, upekdev->cmd, buf_size,
+ cb, ssm, BULK_TIMEOUT);
+
+ r = libusb_submit_transfer(transfer);
+ if (r < 0) {
+ libusb_free_transfer(transfer);
+ fpi_ssm_mark_aborted(ssm, r);
+ }
+}
+
+static void upektc_img_read_data(struct fpi_ssm *ssm, size_t buf_size, size_t buf_offset, libusb_transfer_cb_fn cb)
+{
+ struct libusb_transfer *transfer = libusb_alloc_transfer(0);
+ struct fp_img_dev *dev = ssm->priv;
+ struct upekts_img_dev *upekdev = dev->priv;
+ int r;
+
+ if (!transfer) {
+ fpi_ssm_mark_aborted(ssm, -ENOMEM);
+ return;
+ }
+
+ BUG_ON(buf_size > MAX_RESPONSE_SIZE);
+
+ transfer->flags |= LIBUSB_TRANSFER_FREE_TRANSFER;
+
+ libusb_fill_bulk_transfer(transfer, dev->udev, EP_IN, upekdev->response + buf_offset, buf_size,
+ cb, ssm, BULK_TIMEOUT);
+
+ r = libusb_submit_transfer(transfer);
+ if (r < 0) {
+ libusb_free_transfer(transfer);
+ fpi_ssm_mark_aborted(ssm, r);
+ }
+}
+
+/****** CAPTURE ******/
+
+enum capture_states {
+ CAPTURE_INIT_CAPTURE,
+ CAPTURE_READ_DATA,
+ CAPTURE_ACK_00_28,
+ CAPTURE_ACK_08,
+ CAPTURE_ACK_FRAME,
+ CAPTURE_NUM_STATES,
+};
+
+static void capture_reqs_cb(struct libusb_transfer *transfer)
+{
+ struct fpi_ssm *ssm = transfer->user_data;
+
+ if ((transfer->status == LIBUSB_TRANSFER_COMPLETED) &&
+ (transfer->length == transfer->actual_length)) {
+ fpi_ssm_jump_to_state(ssm, CAPTURE_READ_DATA);
+ } else {
+ fpi_ssm_mark_aborted(ssm, -EIO);
+ }
+}
+
+static int upektc_img_process_image_frame(unsigned char *image_buf, unsigned char *cmd_res)
+{
+ int offset = 8;
+ int len = ((cmd_res[5] & 0x0f) << 8) | (cmd_res[6]);
+
+ len -= 1;
+ if (cmd_res[7] == 0x2c) {
+ len -= 10;
+ offset += 10;
+ }
+ if (cmd_res[7] == 0x20) {
+ len -= 4;
+ }
+ memcpy(image_buf, cmd_res + offset, len);
+
+ return len;
+}
+
+static void capture_read_data_cb(struct libusb_transfer *transfer)
+{
+ struct fpi_ssm *ssm = transfer->user_data;
+ struct fp_img_dev *dev = ssm->priv;
+ struct upekts_img_dev *upekdev = dev->priv;
+ unsigned char *data = upekdev->response;
+ struct fp_img *img;
+ size_t response_size;
+
+ if (transfer->status != LIBUSB_TRANSFER_COMPLETED) {
+ fp_dbg("request is not completed, %d", transfer->status);
+ fpi_ssm_mark_aborted(ssm, -EIO);
+ return;
+ }
+
+ if (upekdev->deactivating) {
+ fp_dbg("Deactivate requested\n");
+ fpi_ssm_mark_completed(ssm);
+ return;
+ }
+
+ fp_dbg("request completed, len: %.4x", transfer->actual_length);
+ if (transfer->actual_length == 0) {
+ fpi_ssm_jump_to_state(ssm, CAPTURE_READ_DATA);
+ return;
+ }
+
+ if (!upekdev->response_rest) {
+ response_size = ((data[5] & 0x0f) << 8) + data[6];
+ response_size += 9; /* 7 bytes for header, 2 for CRC */
+ if (response_size > transfer->actual_length) {
+ fp_dbg("response_size is %d, actual_length is %d\n",
+ response_size, transfer->actual_length);
+ fp_dbg("Waiting for rest of transfer");
+ BUG_ON(upekdev->response_rest);
+ upekdev->response_rest = response_size - transfer->actual_length;
+ fpi_ssm_jump_to_state(ssm, CAPTURE_READ_DATA);
+ return;
+ }
+ }
+ upekdev->response_rest = 0;
+
+ switch (data[4]) {
+ case 0x00:
+ switch (data[7]) {
+ /* No finger */
+ case 0x28:
+ fp_dbg("18th byte is %.2x\n", data[18]);
+ switch (data[18]) {
+ case 0x0c:
+ /* no finger */
+ fpi_ssm_jump_to_state(ssm, CAPTURE_ACK_00_28);
+ break;
+ case 0x00:
+ /* finger is present! */
+ fpi_ssm_jump_to_state(ssm, CAPTURE_ACK_00_28);
+ break;
+ default:
+ /* some error happened, cancel scan */
+ fp_err("something bad happened, aborting scan :(\n");
+ fpi_ssm_mark_aborted(ssm, FP_VERIFY_RETRY_REMOVE_FINGER);
+ break;
+ }
+ break;
+ /* Image frame with additional info */
+ case 0x2c:
+ fpi_imgdev_report_finger_status(dev, TRUE);
+ /* Plain image frame */
+ case 0x24:
+ upekdev->image_size +=
+ upektc_img_process_image_frame(upekdev->image_bits + upekdev->image_size,
+ data);
+ fpi_ssm_jump_to_state(ssm, CAPTURE_ACK_FRAME);
+ break;
+ /* Last image frame */
+ case 0x20:
+ upekdev->image_size +=
+ upektc_img_process_image_frame(upekdev->image_bits + upekdev->image_size,
+ data);
+ BUG_ON(upekdev->image_size != IMAGE_SIZE);
+ fp_dbg("Image size is %d\n", upekdev->image_size);
+ img = fpi_img_new(IMAGE_SIZE);
+ memcpy(img->data, upekdev->image_bits, IMAGE_SIZE);
+ fpi_imgdev_image_captured(dev, img);
+ fpi_imgdev_report_finger_status(dev, FALSE);
+ fpi_ssm_mark_completed(ssm);
+ break;
+ default:
+ fp_err("Uknown response!\n");
+ fpi_ssm_mark_aborted(ssm, -EIO);
+ break;
+ }
+ break;
+ case 0x08:
+ fpi_ssm_jump_to_state(ssm, CAPTURE_ACK_08);
+ break;
+ default:
+ fp_err("Not handled response!\n");
+ fpi_ssm_mark_aborted(ssm, -EIO);
+ }
+}
+
+static void capture_run_state(struct fpi_ssm *ssm)
+{
+ struct fp_img_dev *dev = ssm->priv;
+ struct upekts_img_dev *upekdev = dev->priv;
+
+ switch (ssm->cur_state) {
+ case CAPTURE_INIT_CAPTURE:
+ upektc_img_submit_req(ssm, upek2020_init_capture, sizeof(upek2020_init_capture),
+ upekdev->seq, capture_reqs_cb);
+ upekdev->seq++;
+ break;
+ case CAPTURE_READ_DATA:
+ if (!upekdev->response_rest)
+ upektc_img_read_data(ssm, SHORT_RESPONSE_SIZE, 0, capture_read_data_cb);
+ else
+ upektc_img_read_data(ssm, MAX_RESPONSE_SIZE - SHORT_RESPONSE_SIZE,
+ SHORT_RESPONSE_SIZE, capture_read_data_cb);
+ break;
+ case CAPTURE_ACK_00_28:
+ upektc_img_submit_req(ssm, upek2020_ack_00_28, sizeof(upek2020_ack_00_28),
+ upekdev->seq, capture_reqs_cb);
+ upekdev->seq++;
+ break;
+ case CAPTURE_ACK_08:
+ upektc_img_submit_req(ssm, upek2020_ack_08, sizeof(upek2020_ack_08),
+ 0, capture_reqs_cb);
+ break;
+ case CAPTURE_ACK_FRAME:
+ upektc_img_submit_req(ssm, upek2020_ack_frame, sizeof(upek2020_ack_frame),
+ upekdev->seq, capture_reqs_cb);
+ upekdev->seq++;
+ break;
+ };
+}
+
+static void capture_sm_complete(struct fpi_ssm *ssm)
+{
+ struct fp_img_dev *dev = ssm->priv;
+ struct upekts_img_dev *upekdev = dev->priv;
+ int err = ssm->error;
+
+ fp_dbg("Capture completed, %d", err);
+ fpi_ssm_free(ssm);
+
+ if (upekdev->deactivating)
+ start_deactivation(dev);
+ else if (err)
+ fpi_imgdev_session_error(dev, err);
+ else
+ start_capture(dev);
+}
+
+static void start_capture(struct fp_img_dev *dev)
+{
+ struct upekts_img_dev *upekdev = dev->priv;
+ struct fpi_ssm *ssm;
+
+ upekdev->image_size = 0;
+
+ ssm = fpi_ssm_new(dev->dev, capture_run_state, CAPTURE_NUM_STATES);
+ ssm->priv = dev;
+ fpi_ssm_start(ssm, capture_sm_complete);
+}
+
+/****** INITIALIZATION/DEINITIALIZATION ******/
+
+enum deactivate_states {
+ DEACTIVATE_DEINIT,
+ DEACTIVATE_READ_DEINIT_DATA,
+ DEACTIVATE_NUM_STATES,
+};
+
+static void deactivate_reqs_cb(struct libusb_transfer *transfer)
+{
+ struct fpi_ssm *ssm = transfer->user_data;
+
+ if ((transfer->status == LIBUSB_TRANSFER_COMPLETED) &&
+ (transfer->length == transfer->actual_length)) {
+ fpi_ssm_jump_to_state(ssm, CAPTURE_READ_DATA);
+ } else {
+ fpi_ssm_mark_aborted(ssm, -EIO);
+ }
+}
+
+/* TODO: process response properly */
+static void deactivate_read_data_cb(struct libusb_transfer *transfer)
+{
+ struct fpi_ssm *ssm = transfer->user_data;
+
+ if (transfer->status == LIBUSB_TRANSFER_COMPLETED) {
+ fpi_ssm_mark_completed(ssm);
+ } else {
+ fpi_ssm_mark_aborted(ssm, -EIO);
+ }
+}
+
+static void deactivate_run_state(struct fpi_ssm *ssm)
+{
+ struct fp_img_dev *dev = ssm->priv;
+ struct upekts_img_dev *upekdev = dev->priv;
+
+ switch (ssm->cur_state) {
+ case DEACTIVATE_DEINIT:
+ upektc_img_submit_req(ssm, upek2020_deinit, sizeof(upek2020_deinit),
+ upekdev->seq, deactivate_reqs_cb);
+ upekdev->seq++;
+ break;
+ case DEACTIVATE_READ_DEINIT_DATA:
+ upektc_img_read_data(ssm, SHORT_RESPONSE_SIZE, 0, deactivate_read_data_cb);
+ break;
+ };
+}
+
+static void deactivate_sm_complete(struct fpi_ssm *ssm)
+{
+ struct fp_img_dev *dev = ssm->priv;
+ struct upekts_img_dev *upekdev = dev->priv;
+ int err = ssm->error;
+
+ fp_dbg("Deactivate completed");
+ fpi_ssm_free(ssm);
+
+ if (err) {
+ fpi_imgdev_session_error(dev, err);
+ return;
+ }
+
+ upekdev->deactivating = FALSE;
+ fpi_imgdev_deactivate_complete(dev);
+}
+
+static void start_deactivation(struct fp_img_dev *dev)
+{
+ struct upekts_img_dev *upekdev = dev->priv;
+ struct fpi_ssm *ssm;
+
+ upekdev->image_size = 0;
+
+ ssm = fpi_ssm_new(dev->dev, deactivate_run_state, DEACTIVATE_NUM_STATES);
+ ssm->priv = dev;
+ fpi_ssm_start(ssm, deactivate_sm_complete);
+}
+
+enum activate_states {
+ ACTIVATE_CONTROL_REQ_1,
+ ACTIVATE_READ_CTRL_RESP_1,
+ ACTIVATE_INIT_1,
+ ACTIVATE_READ_INIT_1_RESP,
+ ACTIVATE_INIT_2,
+ ACTIVATE_READ_INIT_2_RESP,
+ ACTIVATE_CONTROL_REQ_2,
+ ACTIVATE_READ_CTRL_RESP_2,
+ ACTIVATE_INIT_3,
+ ACTIVATE_READ_INIT_3_RESP,
+ ACTIVATE_INIT_4,
+ ACTIVATE_READ_INIT_4_RESP,
+ ACTIVATE_NUM_STATES,
+};
+
+static void init_reqs_ctrl_cb(struct libusb_transfer *transfer)
+{
+ struct fpi_ssm *ssm = transfer->user_data;
+
+ if (transfer->status == LIBUSB_TRANSFER_COMPLETED) {
+ fpi_ssm_next_state(ssm);
+ } else {
+ fpi_ssm_mark_aborted(ssm, -EIO);
+ }
+}
+
+static void init_reqs_cb(struct libusb_transfer *transfer)
+{
+ struct fpi_ssm *ssm = transfer->user_data;
+
+ if ((transfer->status == LIBUSB_TRANSFER_COMPLETED) &&
+ (transfer->length == transfer->actual_length)) {
+ fpi_ssm_next_state(ssm);
+ } else {
+ fpi_ssm_mark_aborted(ssm, -EIO);
+ }
+}
+
+/* TODO: process response properly */
+static void init_read_data_cb(struct libusb_transfer *transfer)
+{
+ struct fpi_ssm *ssm = transfer->user_data;
+
+ if (transfer->status == LIBUSB_TRANSFER_COMPLETED) {
+ fpi_ssm_next_state(ssm);
+ } else {
+ fpi_ssm_mark_aborted(ssm, -EIO);
+ }
+}
+
+static void activate_run_state(struct fpi_ssm *ssm)
+{
+ struct libusb_transfer *transfer;
+ struct fp_img_dev *dev = ssm->priv;
+ struct upekts_img_dev *upekdev = dev->priv;
+ int r;
+
+ switch (ssm->cur_state) {
+ case ACTIVATE_CONTROL_REQ_1:
+ case ACTIVATE_CONTROL_REQ_2:
+ {
+ unsigned char *data;
+
+ transfer = libusb_alloc_transfer(0);
+ if (!transfer) {
+ fpi_ssm_mark_aborted(ssm, -ENOMEM);
+ break;
+ }
+ transfer->flags |= LIBUSB_TRANSFER_FREE_BUFFER |
+ LIBUSB_TRANSFER_FREE_TRANSFER;
+
+ data = g_malloc0(LIBUSB_CONTROL_SETUP_SIZE + 1);
+ libusb_fill_control_setup(data,
+ LIBUSB_REQUEST_TYPE_VENDOR | LIBUSB_RECIPIENT_DEVICE, 0x0c, 0x100, 0x0400, 1);
+ libusb_fill_control_transfer(transfer, ssm->dev->udev, data,
+ init_reqs_ctrl_cb, ssm, CTRL_TIMEOUT);
+ r = libusb_submit_transfer(transfer);
+ if (r < 0) {
+ g_free(data);
+ libusb_free_transfer(transfer);
+ fpi_ssm_mark_aborted(ssm, r);
+ }
+ }
+ break;
+ case ACTIVATE_INIT_1:
+ upektc_img_submit_req(ssm, upek2020_init_1, sizeof(upek2020_init_1),
+ 0, init_reqs_cb);
+ break;
+ case ACTIVATE_INIT_2:
+ upektc_img_submit_req(ssm, upek2020_init_2, sizeof(upek2020_init_2),
+ 0, init_reqs_cb);
+ break;
+ case ACTIVATE_INIT_3:
+ upektc_img_submit_req(ssm, upek2020_init_3, sizeof(upek2020_init_3),
+ 0, init_reqs_cb);
+ break;
+ case ACTIVATE_INIT_4:
+ upektc_img_submit_req(ssm, upek2020_init_4, sizeof(upek2020_init_4),
+ upekdev->seq, init_reqs_cb);
+ /* Seq should be updated after 4th init */
+ upekdev->seq++;
+ break;
+ case ACTIVATE_READ_CTRL_RESP_1:
+ case ACTIVATE_READ_CTRL_RESP_2:
+ case ACTIVATE_READ_INIT_1_RESP:
+ case ACTIVATE_READ_INIT_2_RESP:
+ case ACTIVATE_READ_INIT_3_RESP:
+ case ACTIVATE_READ_INIT_4_RESP:
+ upektc_img_read_data(ssm, SHORT_RESPONSE_SIZE, 0, init_read_data_cb);
+ break;
+ }
+}
+
+static void activate_sm_complete(struct fpi_ssm *ssm)
+{
+ struct fp_img_dev *dev = ssm->priv;
+ int err = ssm->error;
+
+ fpi_ssm_free(ssm);
+ fp_dbg("%s status %d", __func__, err);
+ fpi_imgdev_activate_complete(dev, err);
+
+ if (!err)
+ start_capture(dev);
+}
+
+static int dev_activate(struct fp_img_dev *dev, enum fp_imgdev_state state)
+{
+ struct upekts_img_dev *upekdev = dev->priv;
+ struct fpi_ssm *ssm = fpi_ssm_new(dev->dev, activate_run_state,
+ ACTIVATE_NUM_STATES);
+ ssm->priv = dev;
+ upekdev->seq = 0;
+ fpi_ssm_start(ssm, activate_sm_complete);
+ return 0;
+}
+
+static void dev_deactivate(struct fp_img_dev *dev)
+{
+ struct upekts_img_dev *upekdev = dev->priv;
+
+ upekdev->deactivating = TRUE;
+}
+
+static int dev_init(struct fp_img_dev *dev, unsigned long driver_data)
+{
+ /* TODO check that device has endpoints we're using */
+ int r;
+
+ r = libusb_claim_interface(dev->udev, 0);
+ if (r < 0) {
+ fp_err("could not claim interface 0");
+ return r;
+ }
+
+ dev->priv = g_malloc0(sizeof(struct upekts_img_dev));
+ fpi_imgdev_open_complete(dev, 0);
+ return 0;
+}
+
+static void dev_deinit(struct fp_img_dev *dev)
+{
+ g_free(dev->priv);
+ libusb_release_interface(dev->udev, 0);
+ fpi_imgdev_close_complete(dev);
+}
+
+static int discover(struct libusb_device_descriptor *dsc, uint32_t *devtype)
+{
+ if (dsc->idProduct == 0x2020 && dsc->bcdDevice == 1)
+ return 1;
+#ifndef ENABLE_UPEKE2
+ if (dsc->idProduct == 0x2016 && dsc->bcdDevice == 2)
+ return 1;
+#endif
+
+ return 0;
+}
+
+static const struct usb_id id_table[] = {
+#ifndef ENABLE_UPEKE2
+ { .vendor = 0x147e, .product = 0x2016 },
+#endif
+ { .vendor = 0x147e, .product = 0x2020 },
+ { 0, 0, 0, },
+};
+
+struct fp_img_driver upektc_img_driver = {
+ .driver = {
+ .id = UPEKTC_IMG_ID,
+ .name = FP_COMPONENT,
+ .full_name = "Upek TouchChip Fingerprint Coprocessor",
+ .id_table = id_table,
+ .scan_type = FP_SCAN_TYPE_SWIPE,
+ .discover = discover,
+ },
+ .flags = 0,
+ .img_height = IMAGE_HEIGHT,
+ .img_width = IMAGE_WIDTH,
+ .bz3_threshold = 70,
+
+ .open = dev_init,
+ .close = dev_deinit,
+ .activate = dev_activate,
+ .deactivate = dev_deactivate,
+};
diff --git a/libfprint/drivers/upektc_img.h b/libfprint/drivers/upektc_img.h
new file mode 100644
index 00000000..6146557e
--- /dev/null
+++ b/libfprint/drivers/upektc_img.h
@@ -0,0 +1,144 @@
+/*
+ * Upek TouchChip Fingerprint Coprocessor definitions
+ * Copyright (c) 2013 Vasily Khoruzhick
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ */
+
+#ifndef __UPEKTC_IMG_H
+#define __UPEKTC_IMG_H
+
+static const unsigned char upek2020_init_1[] = {
+'C', 'i', 'a', 'o',
+0x04,
+0x00, 0x0d,
+0x01, 0x00, 0x46, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01,
+0x01, 0x00, 0x00, 0x00,
+0xda, 0xc1
+};
+
+static const unsigned char upek2020_init_2[] = {
+0x43, 0x69, 0x61, 0x6f,
+0x07,
+0x00, 0x01,
+0x01,
+0x3d, 0x72
+};
+
+static const unsigned char upek2020_init_3[] = {
+'C', 'i', 'a', 'o',
+0x04,
+0x00, 0x0d,
+0x01, 0x00, 0xbc, 0x02, 0x00, 0x00, 0x00, 0x00, 0x01,
+0x01, 0x00, 0x00, 0x00,
+0x55, 0x2f
+};
+
+static const unsigned char upek2020_init_4[] = {
+'C', 'i', 'a', 'o',
+0x00,
+0x00, 0x07,
+0x28, 0x04, 0x00, 0x00, 0x00, 0x06, 0x04,
+0xc0, 0xd6
+};
+
+static const unsigned char upek2020_deinit[] = {
+'C', 'i', 'a', 'o',
+0x07,
+0x00, 0x01,
+0x01,
+0x3d,
+0x72
+};
+
+static const unsigned char upek2020_init_capture[] = {
+'C', 'i', 'a', 'o',
+0x00,
+0x00, 0x0e, /* Seq = 7, len = 0x00e */
+0x28, /* CMD = 0x28 */
+0x0b, 0x00, /* Inner len = 0x000b */
+0x00, 0x00,
+0x0e, /* SUBCMD = 0x0e */
+0x02,
+0xfe, 0xff, 0xff, 0xff, /* timeout = -2 = 0xfffffffe = infinite time */
+0x02,
+0x00, /* Wait for acceptable finger */
+0x02,
+0x14, 0x9a /* CRC */
+};
+
+#if 0
+static const unsigned char finger_status[] = {
+'C', 'i', 'a', 'o',
+0x00,
+0x70, 0x14, /* Seq = 7, len = 0x014 */
+0x28, /* CMD = 0x28 */
+0x11, 0x00, /* Inner len = 0x0011 */
+0x00, 0x00, 0x00, 0x20, 0x01, 0x00, 0x00, 0x00,
+0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00,
+0x26, 0x03, /* CRC */
+0x00, 0x00, 0x00, /* Rest is garbage */
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+};
+#endif
+
+static const unsigned char upek2020_ack_00_28[] = {
+'C', 'i', 'a', 'o',
+0x00,
+0x80, 0x08, /* Seq = 8, len = 0x008 */
+0x28, /* CMD = 0x28 */
+0x05, 0x00, /* Inner len = 0x0005 */
+0x00, 0x00, 0x00, 0x30, 0x01,
+0x6a, 0xc4 /* CRC */
+};
+
+#if 0
+/* No seq should be tracked here */
+static const unsigned char got_finger[] = {
+'C', 'i', 'a', 'o',
+0x08,
+0x00, 0x00, /* Seq = 0, len = 0x000 */
+0xa1, 0xa9, /* CRC */
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* Rest is garbage */
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+};
+#endif
+
+/* No seq should be put in there */
+static const unsigned char upek2020_ack_08[] = {
+'C', 'i', 'a', 'o',
+0x09,
+0x00, 0x00, /* Seq = 0, len = 0x0 */
+0x91, 0x9e /* CRC */
+};
+
+static const unsigned char upek2020_ack_frame[] = {
+'C', 'i', 'a', 'o',
+0x00,
+0x50, 0x01, /* Seq = 5, len = 0x001 */
+0x30,
+0xac, 0x5b /* CRC */
+};
+
+#endif
diff --git a/libfprint/drivers/upekts.c b/libfprint/drivers/upekts.c
index b347949b..c191a2dd 100644
--- a/libfprint/drivers/upekts.c
+++ b/libfprint/drivers/upekts.c
@@ -1077,6 +1077,7 @@ static void e_handle_resp02(struct fp_dev *dev, unsigned char *data,
size_t data_len)
{
struct fp_print_data *fdata = NULL;
+ struct fp_print_data_item *item = NULL;
int result = -EPROTO;
if (data_len < sizeof(scan_comp)) {
@@ -1085,9 +1086,11 @@ static void e_handle_resp02(struct fp_dev *dev, unsigned char *data,
fp_err("unrecognised data prefix %x %x %x %x %x",
data[0], data[1], data[2], data[3], data[4]);
} else {
- fdata = fpi_print_data_new(dev, data_len - sizeof(scan_comp));
- memcpy(fdata->data, data + sizeof(scan_comp),
+ fdata = fpi_print_data_new(dev);
+ item = fpi_print_data_item_new(data_len - sizeof(scan_comp));
+ memcpy(item->data, data + sizeof(scan_comp),
data_len - sizeof(scan_comp));
+ fdata->prints = g_slist_prepend(fdata->prints, item);
result = FP_ENROLL_COMPLETE;
}
@@ -1249,12 +1252,13 @@ static void verify_start_sm_run_state(struct fpi_ssm *ssm)
break;
case VERIFY_INIT: ;
struct fp_print_data *print = dev->verify_data;
- size_t data_len = sizeof(verify_hdr) + print->length;
+ struct fp_print_data_item *item = print->prints->data;
+ size_t data_len = sizeof(verify_hdr) + item->length;
unsigned char *data = g_malloc(data_len);
struct libusb_transfer *transfer;
memcpy(data, verify_hdr, sizeof(verify_hdr));
- memcpy(data + sizeof(verify_hdr), print->data, print->length);
+ memcpy(data + sizeof(verify_hdr), item->data, item->length);
transfer = alloc_send_cmd28_transfer(dev, 0x03, data, data_len,
verify_init_2803_cb, ssm);
g_free(data);
diff --git a/libfprint/drivers/vfs101.c b/libfprint/drivers/vfs101.c
index 95e654f4..db0b06ef 100644
--- a/libfprint/drivers/vfs101.c
+++ b/libfprint/drivers/vfs101.c
@@ -64,9 +64,6 @@
/* Best image contrast */
#define VFS_IMG_BEST_CONRAST 128
-/* Number of enroll stages */
-#define VFS_NR_ENROLL 3
-
/* Device parameters address */
#define VFS_PAR_000E 0x000e
#define VFS_PAR_0011 0x0011
@@ -656,7 +653,7 @@ static int action_completed(struct fp_img_dev *dev)
struct vfs101_dev *vdev = dev->priv;
if ((dev->action == IMG_ACTION_ENROLL) &&
- (vdev->enroll_stage < VFS_NR_ENROLL))
+ (vdev->enroll_stage < 1))
/* Enroll not completed, return false */
return FALSE;
@@ -1511,9 +1508,6 @@ static int dev_open(struct fp_img_dev *dev, unsigned long driver_data)
return r;
}
- /* Set enroll stage number */
- dev->dev->nr_enroll_stages = VFS_NR_ENROLL;
-
/* Initialize private structure */
vdev = g_malloc0(sizeof(struct vfs101_dev));
vdev->seqnum = -1;
diff --git a/libfprint/drivers/vfs301.c b/libfprint/drivers/vfs301.c
index c0e36123..04db05ec 100644
--- a/libfprint/drivers/vfs301.c
+++ b/libfprint/drivers/vfs301.c
@@ -244,9 +244,6 @@ static int dev_open(struct fp_img_dev *dev, unsigned long driver_data)
return r;
}
- /* Set enroll stage number */
- dev->dev->nr_enroll_stages = 1;
-
/* Initialize private structure */
vdev = g_malloc0(sizeof(vfs301_dev_t));
dev->priv = vdev;
diff --git a/libfprint/drivers/vfs5011.c b/libfprint/drivers/vfs5011.c
new file mode 100644
index 00000000..38a9ef9d
--- /dev/null
+++ b/libfprint/drivers/vfs5011.c
@@ -0,0 +1,1020 @@
+/*
+ * Validity Sensors, Inc. VFS5011 Fingerprint Reader driver for libfprint
+ * Copyright (C) 2013 Arseniy Lartsev
+ * AceLan Kao
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ */
+
+#include
+#include
+#include
+#include
+#include
+#include "driver_ids.h"
+
+#include "vfs5011_proto.h"
+
+/* =================== sync/async USB transfer sequence ==================== */
+
+enum {
+ ACTION_SEND,
+ ACTION_RECEIVE,
+};
+
+struct usb_action {
+ int type;
+ const char *name;
+ int endpoint;
+ int size;
+ unsigned char *data;
+ int correct_reply_size;
+};
+
+#define SEND(ENDPOINT, COMMAND) \
+{ \
+ .type = ACTION_SEND, \
+ .endpoint = ENDPOINT, \
+ .name = #COMMAND, \
+ .size = sizeof(COMMAND), \
+ .data = COMMAND \
+},
+
+#define RECV(ENDPOINT, SIZE) \
+{ \
+ .type = ACTION_RECEIVE, \
+ .endpoint = ENDPOINT, \
+ .size = SIZE, \
+ .data = NULL \
+},
+
+#define RECV_CHECK(ENDPOINT, SIZE, EXPECTED) \
+{ \
+ .type = ACTION_RECEIVE, \
+ .endpoint = ENDPOINT, \
+ .size = SIZE, \
+ .data = EXPECTED, \
+ .correct_reply_size = sizeof(EXPECTED) \
+},
+
+struct usbexchange_data {
+ int stepcount;
+ struct fp_img_dev *device;
+ struct usb_action *actions;
+ void *receive_buf;
+ int timeout;
+};
+
+static void async_send_cb(struct libusb_transfer *transfer)
+{
+ struct fpi_ssm *ssm = transfer->user_data;
+ struct usbexchange_data *data = (struct usbexchange_data *)ssm->priv;
+ struct usb_action *action;
+
+ if (ssm->cur_state >= data->stepcount) {
+ fp_err("Radiation detected!");
+ fpi_imgdev_session_error(data->device, -EINVAL);
+ fpi_ssm_mark_aborted(ssm, -EINVAL);
+ goto out;
+ }
+
+ action = &data->actions[ssm->cur_state];
+ if (action->type != ACTION_SEND) {
+ fp_err("Radiation detected!");
+ fpi_imgdev_session_error(data->device, -EINVAL);
+ fpi_ssm_mark_aborted(ssm, -EINVAL);
+ goto out;
+ }
+
+ if (transfer->status != LIBUSB_TRANSFER_COMPLETED) {
+ /* Transfer not completed, return IO error */
+ fp_err("transfer not completed, status = %d", transfer->status);
+ fpi_imgdev_session_error(data->device, -EIO);
+ fpi_ssm_mark_aborted(ssm, -EIO);
+ goto out;
+ }
+ if (transfer->length != transfer->actual_length) {
+ /* Data sended mismatch with expected, return protocol error */
+ fp_err("length mismatch, got %d, expected %d",
+ transfer->actual_length, transfer->length);
+ fpi_imgdev_session_error(data->device, -EIO);
+ fpi_ssm_mark_aborted(ssm, -EIO);
+ goto out;
+ }
+
+ /* success */
+ fpi_ssm_next_state(ssm);
+
+out:
+ libusb_free_transfer(transfer);
+}
+
+static void async_recv_cb(struct libusb_transfer *transfer)
+{
+ struct fpi_ssm *ssm = transfer->user_data;
+ struct usbexchange_data *data = (struct usbexchange_data *)ssm->priv;
+ struct usb_action *action;
+
+ if (transfer->status != LIBUSB_TRANSFER_COMPLETED) {
+ /* Transfer not completed, return IO error */
+ fp_err("transfer not completed, status = %d", transfer->status);
+ fpi_imgdev_session_error(data->device, -EIO);
+ fpi_ssm_mark_aborted(ssm, -EIO);
+ goto out;
+ }
+
+ if (ssm->cur_state >= data->stepcount) {
+ fp_err("Radiation detected!");
+ fpi_imgdev_session_error(data->device, -EINVAL);
+ fpi_ssm_mark_aborted(ssm, -EINVAL);
+ goto out;
+ }
+
+ action = &data->actions[ssm->cur_state];
+ if (action->type != ACTION_RECEIVE) {
+ fp_err("Radiation detected!");
+ fpi_imgdev_session_error(data->device, -EINVAL);
+ fpi_ssm_mark_aborted(ssm, -EINVAL);
+ goto out;
+ }
+
+ if (action->data != NULL) {
+ if (transfer->actual_length != action->correct_reply_size) {
+ fp_err("Got %d bytes instead of %d",
+ transfer->actual_length,
+ action->correct_reply_size);
+ fpi_imgdev_session_error(data->device, -EIO);
+ fpi_ssm_mark_aborted(ssm, -EIO);
+ goto out;
+ }
+ if (memcmp(transfer->buffer, action->data,
+ action->correct_reply_size) != 0) {
+ fp_dbg("Wrong reply:");
+ fpi_imgdev_session_error(data->device, -EIO);
+ fpi_ssm_mark_aborted(ssm, -EIO);
+ goto out;
+ }
+ } else
+ fp_dbg("Got %d bytes out of %d", transfer->actual_length,
+ transfer->length);
+
+ fpi_ssm_next_state(ssm);
+out:
+ libusb_free_transfer(transfer);
+}
+
+static void usbexchange_loop(struct fpi_ssm *ssm)
+{
+ struct usbexchange_data *data = (struct usbexchange_data *)ssm->priv;
+ if (ssm->cur_state >= data->stepcount) {
+ fp_err("Bug detected: state %d out of range, only %d steps",
+ ssm->cur_state, data->stepcount);
+ fpi_imgdev_session_error(data->device, -EINVAL);
+ fpi_ssm_mark_aborted(ssm, -EINVAL);
+ return;
+ }
+
+ struct usb_action *action = &data->actions[ssm->cur_state];
+ struct libusb_transfer *transfer;
+ int ret = -EINVAL;
+
+ switch (action->type) {
+ case ACTION_SEND:
+ fp_dbg("Sending %s", action->name);
+ transfer = libusb_alloc_transfer(0);
+ if (transfer == NULL) {
+ fp_err("Failed to allocate transfer");
+ fpi_imgdev_session_error(data->device, -ENOMEM);
+ fpi_ssm_mark_aborted(ssm, -ENOMEM);
+ return;
+ }
+ libusb_fill_bulk_transfer(transfer, data->device->udev,
+ action->endpoint, action->data,
+ action->size, async_send_cb, ssm,
+ data->timeout);
+ ret = libusb_submit_transfer(transfer);
+ break;
+
+ case ACTION_RECEIVE:
+ fp_dbg("Receiving %d bytes", action->size);
+ transfer = libusb_alloc_transfer(0);
+ if (transfer == NULL) {
+ fp_err("Failed to allocate transfer");
+ fpi_imgdev_session_error(data->device, -ENOMEM);
+ fpi_ssm_mark_aborted(ssm, -ENOMEM);
+ return;
+ }
+ libusb_fill_bulk_transfer(transfer, data->device->udev,
+ action->endpoint, data->receive_buf,
+ action->size, async_recv_cb, ssm,
+ data->timeout);
+ ret = libusb_submit_transfer(transfer);
+ break;
+
+ default:
+ fp_err("Bug detected: invalid action %d", action->type);
+ fpi_imgdev_session_error(data->device, -EINVAL);
+ fpi_ssm_mark_aborted(ssm, -EINVAL);
+ return;
+ }
+
+ if (ret != 0) {
+ fp_err("USB transfer error: %s", strerror(ret));
+ fpi_imgdev_session_error(data->device, ret);
+ fpi_ssm_mark_aborted(ssm, ret);
+ }
+}
+
+static void usb_exchange_async(struct fpi_ssm *ssm,
+ struct usbexchange_data *data)
+{
+ struct fpi_ssm *subsm = fpi_ssm_new(data->device->dev,
+ usbexchange_loop,
+ data->stepcount);
+ subsm->priv = data;
+ fpi_ssm_start_subsm(ssm, subsm);
+}
+
+/* ====================== utils ======================= */
+
+#if VFS5011_LINE_SIZE > INT_MAX/(256*256)
+#error We might get integer overflow while computing standard deviation!
+#endif
+
+/* Calculade squared standand deviation */
+static int get_deviation(unsigned char *buf, int size)
+{
+ int res = 0, mean = 0, i;
+ for (i = 0; i < size; i++)
+ mean += buf[i];
+
+ mean /= size;
+
+ for (i = 0; i < size; i++) {
+ int dev = (int)buf[i] - mean;
+ res += dev*dev;
+ }
+
+ return res / size;
+}
+
+/* Calculate mean square difference of two lines */
+static int get_diff_norm(unsigned char *buf1, unsigned char *buf2, int size)
+{
+ int res = 0, i;
+ for (i = 0; i < size; i++) {
+ int dev = (int)buf1[i] - (int)buf2[i];
+ res += dev*dev;
+ }
+
+ return res / size;
+}
+
+/* Calculade squared standand deviation of sum of two lines */
+static int get_deviation2(unsigned char *buf1, unsigned char *buf2, int size)
+{
+ int res = 0, mean = 0, i;
+ for (i = 0; i < size; i++)
+ mean += (int)buf1[i] + (int)buf2[i];
+
+ mean /= size;
+
+ for (i = 0; i < size; i++) {
+ int dev = (int)buf1[i] + (int)buf2[i] - mean;
+ res += dev*dev;
+ }
+
+ return res / size;
+}
+
+static int cmpint(const void *p1, const void *p2, gpointer data)
+{
+ int a = *((int *)p1);
+ int b = *((int *)p2);
+ if (a < b)
+ return -1;
+ else if (a == b)
+ return 0;
+ else
+ return 1;
+}
+
+static void median_filter(int *data, int size, int filtersize)
+{
+ int i;
+ int *result = (int *)g_malloc0(size*sizeof(int));
+ int *sortbuf = (int *)g_malloc0(filtersize*sizeof(int));
+ for (i = 0; i < size; i++) {
+ int i1 = i - (filtersize-1)/2;
+ int i2 = i + (filtersize-1)/2;
+ if (i1 < 0)
+ i1 = 0;
+ if (i2 >= size)
+ i2 = size-1;
+ g_memmove(sortbuf, data+i1, (i2-i1+1)*sizeof(int));
+ g_qsort_with_data(sortbuf, i2-i1+1, sizeof(int), cmpint, NULL);
+ result[i] = sortbuf[(i2-i1+1)/2];
+ }
+ memmove(data, result, size*sizeof(int));
+ g_free(result);
+ g_free(sortbuf);
+}
+
+void interpolate_lines(unsigned char *line1, float y1, unsigned char *line2,
+ float y2, unsigned char *output, float yi, int size)
+{
+ int i;
+ for (i = 0; i < size; i++)
+ output[i] = (float)line1[i]
+ + (yi-y1)/(y2-y1)*(line2[i]-line1[i]);
+}
+
+int min(int a, int b) {return (a < b) ? a : b; }
+
+/* Rescale image to account for variable swiping speed */
+int vfs5011_rescale_image(unsigned char *image, int input_lines,
+ unsigned char *output, int max_output_lines)
+{
+ /* Number of output lines per distance between two scanners */
+ enum {
+ RESOLUTION = 10,
+ MEDIAN_FILTER_SIZE = 13,
+ MAX_OFFSET = 10,
+ GOOD_OFFSETS_CRITERION = 20,
+ GOOD_OFFSETS_THRESHOLD = 3
+ };
+ int i;
+ float y = 0.0;
+ int line_ind = 0;
+ int *offsets = (int *)g_malloc0(input_lines * sizeof(int));
+#ifdef ENABLE_DEBUG_LOGGING
+ gint64 start_time = g_get_real_time();
+#endif
+
+ for (i = 0; i < input_lines-1; i += 2) {
+ int bestmatch = i;
+ int bestdiff = 0;
+ int j;
+
+ int firstrow, lastrow;
+ firstrow = i+1;
+ lastrow = min(i + MAX_OFFSET, input_lines-1);
+
+ for (j = firstrow; j <= lastrow; j++) {
+ int diff = get_deviation2(
+ image + i*VFS5011_LINE_SIZE + 56,
+ image + j*VFS5011_LINE_SIZE + 168,
+ 64);
+ if ((j == firstrow) || (diff < bestdiff)) {
+ bestdiff = diff;
+ bestmatch = j;
+ }
+ }
+ offsets[i/2] = bestmatch - i;
+ fp_dbg("offsets: %llu - %d", start_time, offsets[i/2]);
+ }
+
+ median_filter(offsets, input_lines-1, MEDIAN_FILTER_SIZE);
+
+ fp_dbg("offsets_filtered: %llu", g_get_real_time());
+ for (i = 0; i <= input_lines/2-1; i++)
+ fp_dbg("%d", offsets[i]);
+ for (i = 0; i < input_lines-1; i++) {
+ int offset = offsets[i/2];
+ if (offset > 0) {
+ float ynext = y + (float)RESOLUTION / offset;
+ while (line_ind < ynext) {
+ if (line_ind > max_output_lines-1) {
+ g_free(offsets);
+ return line_ind;
+ }
+ interpolate_lines(
+ image + i*VFS5011_LINE_SIZE + 8, y,
+ image + (i+1)*VFS5011_LINE_SIZE + 8,
+ ynext,
+ output + line_ind*VFS5011_IMAGE_WIDTH,
+ line_ind,
+ VFS5011_IMAGE_WIDTH);
+ line_ind++;
+ }
+ y = ynext;
+ }
+ }
+ g_free(offsets);
+ return line_ind;
+}
+
+/* ====================== main stuff ======================= */
+
+enum {
+ CAPTURE_LINES = 256,
+ MAXLINES = 2000,
+ MAX_CAPTURE_LINES = 100000,
+};
+
+struct vfs5011_data {
+ unsigned char *total_buffer;
+ unsigned char *capture_buffer;
+ unsigned char *image_buffer;
+ unsigned char *lastline;
+ unsigned char *rescale_buffer;
+ int lines_captured, lines_recorded, empty_lines;
+ int max_lines_captured, max_lines_recorded;
+ int lines_total, lines_total_allocated;
+ gboolean loop_running;
+ gboolean deactivating;
+ struct usbexchange_data init_sequence;
+};
+
+enum {
+ DEV_ACTIVATE_REQUEST_FPRINT,
+ DEV_ACTIVATE_INIT_COMPLETE,
+ DEV_ACTIVATE_READ_DATA,
+ DEV_ACTIVATE_DATA_COMPLETE,
+ DEV_ACTIVATE_PREPARE_NEXT_CAPTURE,
+ DEV_ACTIVATE_NUM_STATES
+};
+
+enum {
+ DEV_OPEN_START,
+ DEV_OPEN_NUM_STATES
+};
+
+static void capture_init(struct vfs5011_data *data, int max_captured,
+ int max_recorded)
+{
+ fp_dbg("capture_init");
+ data->lastline = NULL;
+ data->lines_captured = 0;
+ data->lines_recorded = 0;
+ data->empty_lines = 0;
+ data->lines_total = 0;
+ data->lines_total_allocated = 0;
+ data->total_buffer = NULL;
+ data->max_lines_captured = max_captured;
+ data->max_lines_recorded = max_recorded;
+}
+
+static int process_chunk(struct vfs5011_data *data, int transferred)
+{
+ enum {
+ DEVIATION_THRESHOLD = 15*15,
+ DIFFERENCE_THRESHOLD = 600,
+ STOP_CHECK_LINES = 50
+ };
+
+ fp_dbg("process_chunk: got %d bytes", transferred);
+ int lines_captured = transferred/VFS5011_LINE_SIZE;
+ int i;
+
+ for (i = 0; i < lines_captured; i++) {
+ unsigned char *linebuf = data->capture_buffer
+ + i * VFS5011_LINE_SIZE;
+
+ if (get_deviation(linebuf + 8, VFS5011_IMAGE_WIDTH)
+ < DEVIATION_THRESHOLD) {
+ if (data->lines_captured == 0)
+ continue;
+ else
+ data->empty_lines++;
+ } else
+ data->empty_lines = 0;
+ if (data->empty_lines >= STOP_CHECK_LINES) {
+ fp_dbg("process_chunk: got %d empty lines, finishing",
+ data->empty_lines);
+ return 1;
+ }
+
+ data->lines_captured++;
+ if (data->lines_captured > data->max_lines_captured) {
+ fp_dbg("process_chunk: captured %d lines, finishing",
+ data->lines_captured);
+ return 1;
+ }
+
+ if ((data->lastline == NULL)
+ || (get_diff_norm(
+ data->lastline + 8,
+ linebuf + 8,
+ VFS5011_IMAGE_WIDTH) >= DIFFERENCE_THRESHOLD)) {
+ data->lastline = data->image_buffer
+ + data->lines_recorded
+ * VFS5011_LINE_SIZE;
+ memmove(data->lastline, linebuf, VFS5011_LINE_SIZE);
+ data->lines_recorded++;
+ if (data->lines_recorded >= data->max_lines_recorded) {
+ fp_dbg("process_chunk: recorded %d lines, finishing",
+ data->lines_recorded);
+ return 1;
+ }
+ }
+ }
+ return 0;
+}
+
+void submit_image(struct fpi_ssm *ssm, struct vfs5011_data *data)
+{
+ struct fp_img_dev *dev = (struct fp_img_dev *)ssm->priv;
+ int height = vfs5011_rescale_image(data->image_buffer,
+ data->lines_recorded,
+ data->rescale_buffer, MAXLINES);
+ struct fp_img *img = fpi_img_new(VFS5011_IMAGE_WIDTH * height);
+
+ if (img == NULL) {
+ fp_err("Failed to create image");
+ fpi_ssm_mark_aborted(ssm, -1);
+ }
+
+ img->flags = FP_IMG_V_FLIPPED;
+ img->width = VFS5011_IMAGE_WIDTH;
+ img->height = height;
+ memmove(img->data, data->rescale_buffer, VFS5011_IMAGE_WIDTH * height);
+
+ fp_dbg("Image captured, commiting");
+
+ fpi_imgdev_image_captured(dev, img);
+}
+
+static void chunk_capture_callback(struct libusb_transfer *transfer)
+{
+ struct fpi_ssm *ssm = (struct fpi_ssm *)transfer->user_data;
+ struct fp_img_dev *dev = (struct fp_img_dev *)ssm->priv;
+ struct vfs5011_data *data = (struct vfs5011_data *)dev->priv;
+
+ if ((transfer->status == LIBUSB_TRANSFER_COMPLETED) ||
+ (transfer->status == LIBUSB_TRANSFER_TIMED_OUT)) {
+
+ if (transfer->actual_length > 0)
+ fpi_imgdev_report_finger_status(dev, TRUE);
+
+ if (process_chunk(data, transfer->actual_length))
+ fpi_ssm_jump_to_state(ssm, DEV_ACTIVATE_DATA_COMPLETE);
+ else
+ fpi_ssm_jump_to_state(ssm, DEV_ACTIVATE_READ_DATA);
+ } else {
+ fp_err("Failed to capture data");
+ fpi_ssm_mark_aborted(ssm, -1);
+ }
+ libusb_free_transfer(transfer);
+}
+
+static int capture_chunk_async(struct vfs5011_data *data,
+ libusb_device_handle *handle, int nline,
+ int timeout, struct fpi_ssm *ssm)
+{
+ fp_dbg("capture_chunk_async: capture %d lines, already have %d",
+ nline, data->lines_recorded);
+ enum {
+ DEVIATION_THRESHOLD = 15*15,
+ DIFFERENCE_THRESHOLD = 600,
+ STOP_CHECK_LINES = 50
+ };
+
+ struct libusb_transfer *transfer = libusb_alloc_transfer(0);
+ libusb_fill_bulk_transfer(transfer, handle, VFS5011_IN_ENDPOINT_DATA,
+ data->capture_buffer,
+ nline * VFS5011_LINE_SIZE,
+ chunk_capture_callback, ssm, timeout);
+ return libusb_submit_transfer(transfer);
+}
+
+static void async_sleep_cb(void *data)
+{
+ struct fpi_ssm *ssm = data;
+
+ fpi_ssm_next_state(ssm);
+}
+
+/*
+ * Device initialization. Windows driver only does it when the device is
+ * plugged in, but it doesn't harm to do this every time before scanning the
+ * image.
+ */
+struct usb_action vfs5011_initialization[] = {
+ SEND(VFS5011_OUT_ENDPOINT, vfs5011_cmd_01)
+ RECV(VFS5011_IN_ENDPOINT_CTRL, 64)
+
+ SEND(VFS5011_OUT_ENDPOINT, vfs5011_cmd_19)
+ RECV(VFS5011_IN_ENDPOINT_CTRL, 64)
+ RECV(VFS5011_IN_ENDPOINT_CTRL, 64) /* B5C457F9 */
+
+ SEND(VFS5011_OUT_ENDPOINT, vfs5011_init_00)
+ RECV(VFS5011_IN_ENDPOINT_CTRL, 64) /* 0000FFFFFFFF */
+
+ SEND(VFS5011_OUT_ENDPOINT, vfs5011_init_01)
+ RECV(VFS5011_IN_ENDPOINT_CTRL, 64) /* 0000FFFFFFFFFF */
+
+ SEND(VFS5011_OUT_ENDPOINT, vfs5011_init_02)
+ /* 0000 */
+ RECV_CHECK(VFS5011_IN_ENDPOINT_CTRL, 64, VFS5011_NORMAL_CONTROL_REPLY)
+
+ SEND(VFS5011_OUT_ENDPOINT, vfs5011_cmd_01)
+ RECV(VFS5011_IN_ENDPOINT_CTRL, 64)
+
+ SEND(VFS5011_OUT_ENDPOINT, vfs5011_cmd_1A)
+ /* 0000 */
+ RECV_CHECK(VFS5011_IN_ENDPOINT_CTRL, 64, VFS5011_NORMAL_CONTROL_REPLY)
+
+ SEND(VFS5011_OUT_ENDPOINT, vfs5011_init_03)
+ /* 0000 */
+ RECV_CHECK(VFS5011_IN_ENDPOINT_CTRL, 64, VFS5011_NORMAL_CONTROL_REPLY)
+
+ SEND(VFS5011_OUT_ENDPOINT, vfs5011_init_04)
+ /* 0000 */
+ RECV_CHECK(VFS5011_IN_ENDPOINT_CTRL, 64, VFS5011_NORMAL_CONTROL_REPLY)
+ RECV(VFS5011_IN_ENDPOINT_DATA, 256)
+ RECV(VFS5011_IN_ENDPOINT_DATA, 64)
+
+ SEND(VFS5011_OUT_ENDPOINT, vfs5011_cmd_1A)
+ /* 0000 */
+ RECV_CHECK(VFS5011_IN_ENDPOINT_CTRL, 64, VFS5011_NORMAL_CONTROL_REPLY)
+
+ SEND(VFS5011_OUT_ENDPOINT, vfs5011_init_05)
+ /* 0000 */
+ RECV_CHECK(VFS5011_IN_ENDPOINT_CTRL, 64, VFS5011_NORMAL_CONTROL_REPLY)
+
+ SEND(VFS5011_OUT_ENDPOINT, vfs5011_cmd_01)
+ RECV(VFS5011_IN_ENDPOINT_CTRL, 64)
+
+ SEND(VFS5011_OUT_ENDPOINT, vfs5011_init_06)
+ /* 0000 */
+ RECV_CHECK(VFS5011_IN_ENDPOINT_CTRL, 64, VFS5011_NORMAL_CONTROL_REPLY)
+ RECV(VFS5011_IN_ENDPOINT_DATA, 17216)
+ RECV(VFS5011_IN_ENDPOINT_DATA, 32)
+
+ SEND(VFS5011_OUT_ENDPOINT, vfs5011_init_07)
+ /* 0000 */
+ RECV_CHECK(VFS5011_IN_ENDPOINT_CTRL, 64, VFS5011_NORMAL_CONTROL_REPLY)
+ RECV(VFS5011_IN_ENDPOINT_DATA, 45056)
+
+ SEND(VFS5011_OUT_ENDPOINT, vfs5011_init_08)
+ /* 0000 */
+ RECV_CHECK(VFS5011_IN_ENDPOINT_CTRL, 64, VFS5011_NORMAL_CONTROL_REPLY)
+ RECV(VFS5011_IN_ENDPOINT_DATA, 16896)
+
+ SEND(VFS5011_OUT_ENDPOINT, vfs5011_init_09)
+ /* 0000 */
+ RECV_CHECK(VFS5011_IN_ENDPOINT_CTRL, 64, VFS5011_NORMAL_CONTROL_REPLY)
+ RECV(VFS5011_IN_ENDPOINT_DATA, 4928)
+
+ SEND(VFS5011_OUT_ENDPOINT, vfs5011_init_10)
+ /* 0000 */
+ RECV_CHECK(VFS5011_IN_ENDPOINT_CTRL, 64, VFS5011_NORMAL_CONTROL_REPLY)
+ RECV(VFS5011_IN_ENDPOINT_DATA, 5632)
+
+ SEND(VFS5011_OUT_ENDPOINT, vfs5011_init_11)
+ /* 0000 */
+ RECV_CHECK(VFS5011_IN_ENDPOINT_CTRL, 64, VFS5011_NORMAL_CONTROL_REPLY)
+ RECV(VFS5011_IN_ENDPOINT_DATA, 5632)
+
+ SEND(VFS5011_OUT_ENDPOINT, vfs5011_init_12)
+ /* 0000 */
+ RECV_CHECK(VFS5011_IN_ENDPOINT_CTRL, 64, VFS5011_NORMAL_CONTROL_REPLY)
+ RECV(VFS5011_IN_ENDPOINT_DATA, 3328)
+ RECV(VFS5011_IN_ENDPOINT_DATA, 64)
+
+ SEND(VFS5011_OUT_ENDPOINT, vfs5011_init_13)
+ /* 0000 */
+ RECV_CHECK(VFS5011_IN_ENDPOINT_CTRL, 64, VFS5011_NORMAL_CONTROL_REPLY)
+
+ SEND(VFS5011_OUT_ENDPOINT, vfs5011_cmd_1A)
+ /* 0000 */
+ RECV_CHECK(VFS5011_IN_ENDPOINT_CTRL, 64, VFS5011_NORMAL_CONTROL_REPLY)
+
+ SEND(VFS5011_OUT_ENDPOINT, vfs5011_init_03)
+ /* 0000 */
+ RECV_CHECK(VFS5011_IN_ENDPOINT_CTRL, 64, VFS5011_NORMAL_CONTROL_REPLY)
+
+ SEND(VFS5011_OUT_ENDPOINT, vfs5011_init_14)
+ /* 0000 */
+ RECV_CHECK(VFS5011_IN_ENDPOINT_CTRL, 64, VFS5011_NORMAL_CONTROL_REPLY)
+ RECV(VFS5011_IN_ENDPOINT_DATA, 4800)
+
+ SEND(VFS5011_OUT_ENDPOINT, vfs5011_cmd_1A)
+ /* 0000 */
+ RECV_CHECK(VFS5011_IN_ENDPOINT_CTRL, 64, VFS5011_NORMAL_CONTROL_REPLY)
+
+ SEND(VFS5011_OUT_ENDPOINT, vfs5011_init_02)
+ /* 0000 */
+ RECV_CHECK(VFS5011_IN_ENDPOINT_CTRL, 64, VFS5011_NORMAL_CONTROL_REPLY)
+
+ SEND(VFS5011_OUT_ENDPOINT, vfs5011_cmd_27)
+ RECV(VFS5011_IN_ENDPOINT_CTRL, 64)
+
+ SEND(VFS5011_OUT_ENDPOINT, vfs5011_cmd_1A)
+ /* 0000 */
+ RECV_CHECK(VFS5011_IN_ENDPOINT_CTRL, 64, VFS5011_NORMAL_CONTROL_REPLY)
+
+ SEND(VFS5011_OUT_ENDPOINT, vfs5011_init_15)
+ /* 0000 */
+ RECV_CHECK(VFS5011_IN_ENDPOINT_CTRL, 64, VFS5011_NORMAL_CONTROL_REPLY)
+
+ SEND(VFS5011_OUT_ENDPOINT, vfs5011_init_16)
+ RECV(VFS5011_IN_ENDPOINT_CTRL, 2368)
+ RECV(VFS5011_IN_ENDPOINT_CTRL, 64)
+ RECV(VFS5011_IN_ENDPOINT_DATA, 4800)
+
+ SEND(VFS5011_OUT_ENDPOINT, vfs5011_init_17)
+ /* 0000 */
+ RECV_CHECK(VFS5011_IN_ENDPOINT_CTRL, 64, VFS5011_NORMAL_CONTROL_REPLY)
+
+ SEND(VFS5011_OUT_ENDPOINT, vfs5011_init_18)
+ /* 0000 */
+ RECV_CHECK(VFS5011_IN_ENDPOINT_CTRL, 64, VFS5011_NORMAL_CONTROL_REPLY)
+
+ /*
+ * Windows driver does this and it works
+ * But in this driver this call never returns...
+ * RECV(VFS5011_IN_ENDPOINT_CTRL2, 8) //00D3054000
+ */
+};
+
+/* Initiate recording the image */
+struct usb_action vfs5011_initiate_capture[] = {
+ SEND(VFS5011_OUT_ENDPOINT, vfs5011_cmd_04)
+ RECV(VFS5011_IN_ENDPOINT_DATA, 64)
+ RECV(VFS5011_IN_ENDPOINT_DATA, 84032)
+ RECV_CHECK(VFS5011_IN_ENDPOINT_CTRL, 64, VFS5011_NORMAL_CONTROL_REPLY)
+
+ SEND(VFS5011_OUT_ENDPOINT, vfs5011_cmd_1A)
+ RECV_CHECK(VFS5011_IN_ENDPOINT_CTRL, 64, VFS5011_NORMAL_CONTROL_REPLY)
+
+ SEND(VFS5011_OUT_ENDPOINT, vfs5011_prepare_00)
+ RECV_CHECK(VFS5011_IN_ENDPOINT_CTRL, 64, VFS5011_NORMAL_CONTROL_REPLY)
+
+ SEND(VFS5011_OUT_ENDPOINT, vfs5011_cmd_1A)
+ RECV_CHECK(VFS5011_IN_ENDPOINT_CTRL, 64, VFS5011_NORMAL_CONTROL_REPLY)
+
+ SEND(VFS5011_OUT_ENDPOINT, vfs5011_prepare_01)
+ RECV_CHECK(VFS5011_IN_ENDPOINT_CTRL, 64, VFS5011_NORMAL_CONTROL_REPLY)
+
+ SEND(VFS5011_OUT_ENDPOINT, vfs5011_prepare_02)
+ RECV(VFS5011_IN_ENDPOINT_CTRL, 2368)
+ RECV(VFS5011_IN_ENDPOINT_CTRL, 64)
+ RECV(VFS5011_IN_ENDPOINT_DATA, 4800)
+
+ SEND(VFS5011_OUT_ENDPOINT, vfs5011_prepare_03)
+ RECV_CHECK(VFS5011_IN_ENDPOINT_CTRL, 64, VFS5011_NORMAL_CONTROL_REPLY)
+ /*
+ * Windows driver does this and it works
+ * But in this driver this call never returns...
+ * RECV(VFS5011_IN_ENDPOINT_CTRL2, 8);
+ */
+
+ SEND(VFS5011_OUT_ENDPOINT, vfs5011_prepare_04)
+ RECV_CHECK(VFS5011_IN_ENDPOINT_CTRL, 2368, VFS5011_NORMAL_CONTROL_REPLY)
+
+ /*
+ * Windows driver does this and it works
+ * But in this driver this call never returns...
+ * RECV(VFS5011_IN_ENDPOINT_CTRL2, 8);
+ */
+};
+
+/* ====================== lifprint interface ======================= */
+
+static void activate_loop(struct fpi_ssm *ssm)
+{
+ enum {READ_TIMEOUT = 0};
+
+ struct fp_img_dev *dev = (struct fp_img_dev *)ssm->priv;
+ struct vfs5011_data *data = (struct vfs5011_data *)dev->priv;
+ int r;
+ struct fpi_timeout *timeout;
+
+ fp_dbg("main_loop: state %d", ssm->cur_state);
+
+ switch (ssm->cur_state) {
+ case DEV_ACTIVATE_REQUEST_FPRINT:
+ data->init_sequence.stepcount =
+ array_n_elements(vfs5011_initiate_capture);
+ data->init_sequence.actions = vfs5011_initiate_capture;
+ data->init_sequence.device = dev;
+ if (data->init_sequence.receive_buf == NULL)
+ data->init_sequence.receive_buf =
+ g_malloc0(VFS5011_RECEIVE_BUF_SIZE);
+ data->init_sequence.timeout = 1000;
+ usb_exchange_async(ssm, &data->init_sequence);
+ break;
+
+ case DEV_ACTIVATE_INIT_COMPLETE:
+ if (data->init_sequence.receive_buf != NULL)
+ g_free(data->init_sequence.receive_buf);
+ data->init_sequence.receive_buf = NULL;
+ capture_init(data, MAX_CAPTURE_LINES, MAXLINES);
+ fpi_imgdev_activate_complete(dev, 0);
+ fpi_ssm_next_state(ssm);
+ break;
+
+ case DEV_ACTIVATE_READ_DATA:
+ if (data->deactivating) {
+ fp_dbg("deactivating, marking completed");
+ fpi_ssm_mark_completed(ssm);
+ } else {
+ r = capture_chunk_async(data, dev->udev, CAPTURE_LINES,
+ READ_TIMEOUT, ssm);
+ if (r != 0) {
+ fp_err("Failed to capture data");
+ fpi_imgdev_session_error(dev, r);
+ fpi_ssm_mark_aborted(ssm, r);
+ }
+ }
+ break;
+
+ case DEV_ACTIVATE_DATA_COMPLETE:
+ timeout = fpi_timeout_add(1, async_sleep_cb, ssm);
+
+ if (timeout == NULL) {
+ /* Failed to add timeout */
+ fp_err("failed to add timeout");
+ fpi_imgdev_session_error(dev, -1);
+ fpi_ssm_mark_aborted(ssm, -1);
+ }
+ break;
+
+ case DEV_ACTIVATE_PREPARE_NEXT_CAPTURE:
+ data->init_sequence.stepcount =
+ array_n_elements(vfs5011_initiate_capture);
+ data->init_sequence.actions = vfs5011_initiate_capture;
+ data->init_sequence.device = dev;
+ if (data->init_sequence.receive_buf == NULL)
+ data->init_sequence.receive_buf =
+ g_malloc0(VFS5011_RECEIVE_BUF_SIZE);
+ data->init_sequence.timeout = VFS5011_DEFAULT_WAIT_TIMEOUT;
+ usb_exchange_async(ssm, &data->init_sequence);
+ break;
+
+ }
+}
+
+static void activate_loop_complete(struct fpi_ssm *ssm)
+{
+ struct fp_img_dev *dev = (struct fp_img_dev *)ssm->priv;
+ struct vfs5011_data *data = (struct vfs5011_data *)dev->priv;
+ int r = ssm->error;
+
+ fp_dbg("finishing");
+ if (data->init_sequence.receive_buf != NULL)
+ g_free(data->init_sequence.receive_buf);
+ data->init_sequence.receive_buf = NULL;
+ data->loop_running = FALSE;
+ submit_image(ssm, data);
+ fpi_imgdev_report_finger_status(dev, FALSE);
+
+ fpi_ssm_free(ssm);
+
+ if (r)
+ fpi_imgdev_session_error(dev, r);
+
+ if (data->deactivating)
+ fpi_imgdev_deactivate_complete(dev);
+}
+
+static void open_loop(struct fpi_ssm *ssm)
+{
+ struct fp_img_dev *dev = (struct fp_img_dev *)ssm->priv;
+ struct vfs5011_data *data = (struct vfs5011_data *)dev->priv;
+
+ switch (ssm->cur_state) {
+ case DEV_OPEN_START:
+ data->init_sequence.stepcount =
+ array_n_elements(vfs5011_initialization);
+ data->init_sequence.actions = vfs5011_initialization;
+ data->init_sequence.device = dev;
+ data->init_sequence.receive_buf =
+ g_malloc0(VFS5011_RECEIVE_BUF_SIZE);
+ data->init_sequence.timeout = VFS5011_DEFAULT_WAIT_TIMEOUT;
+ usb_exchange_async(ssm, &data->init_sequence);
+ break;
+ };
+}
+
+static void open_loop_complete(struct fpi_ssm *ssm)
+{
+ struct fp_img_dev *dev = (struct fp_img_dev *)ssm->priv;
+ struct vfs5011_data *data = (struct vfs5011_data *)dev->priv;
+
+ g_free(data->init_sequence.receive_buf);
+ data->init_sequence.receive_buf = NULL;
+
+ fpi_imgdev_open_complete(dev, 0);
+ fpi_ssm_free(ssm);
+}
+
+static int dev_open(struct fp_img_dev *dev, unsigned long driver_data)
+{
+
+ struct vfs5011_data *data;
+ int r;
+
+ data = (struct vfs5011_data *)g_malloc0(sizeof(*data));
+ data->capture_buffer =
+ (unsigned char *)g_malloc0(CAPTURE_LINES * VFS5011_LINE_SIZE);
+ data->image_buffer =
+ (unsigned char *)g_malloc0(MAXLINES * VFS5011_LINE_SIZE);
+ data->rescale_buffer =
+ (unsigned char *)g_malloc0(MAXLINES * VFS5011_IMAGE_WIDTH);
+ dev->priv = data;
+
+ dev->dev->nr_enroll_stages = 1;
+
+ r = libusb_reset_device(dev->udev);
+ if (r != 0) {
+ fp_err("Failed to reset the device");
+ return r;
+ }
+
+ r = libusb_claim_interface(dev->udev, 0);
+ if (r != 0) {
+ fp_err("Failed to claim interface");
+ return r;
+ }
+
+ struct fpi_ssm *ssm;
+ ssm = fpi_ssm_new(dev->dev, open_loop, DEV_OPEN_NUM_STATES);
+ ssm->priv = dev;
+ fpi_ssm_start(ssm, open_loop_complete);
+
+ return 0;
+}
+
+static void dev_close(struct fp_img_dev *dev)
+{
+ libusb_release_interface(dev->udev, 0);
+ struct vfs5011_data *data = (struct vfs5011_data *)dev->priv;
+ if (data != NULL) {
+ g_free(data->capture_buffer);
+ g_free(data->image_buffer);
+ g_free(data->rescale_buffer);
+ g_free(data);
+ }
+ fpi_imgdev_close_complete(dev);
+}
+
+static int dev_activate(struct fp_img_dev *dev, enum fp_imgdev_state state)
+{
+ struct vfs5011_data *data = (struct vfs5011_data *)dev->priv;
+ struct fpi_ssm *ssm;
+
+ fp_dbg("device initialized");
+ data->deactivating = FALSE;
+ data->loop_running = TRUE;
+
+ fp_dbg("creating ssm");
+ ssm = fpi_ssm_new(dev->dev, activate_loop, DEV_ACTIVATE_NUM_STATES);
+ ssm->priv = dev;
+ fp_dbg("starting ssm");
+ fpi_ssm_start(ssm, activate_loop_complete);
+ fp_dbg("ssm done, getting out");
+
+ return 0;
+}
+
+static void dev_deactivate(struct fp_img_dev *dev)
+{
+ struct vfs5011_data *data = dev->priv;
+ if (data->loop_running)
+ data->deactivating = TRUE;
+ else
+ fpi_imgdev_deactivate_complete(dev);
+}
+
+static const struct usb_id id_table[] = {
+ { .vendor = 0x138a, .product = 0x0011 /* vfs5011 */ },
+ { .vendor = 0x138a, .product = 0x0017 /* Validity device from Lenovo T440 laptops */ },
+ { .vendor = 0x138a, .product = 0x0018 /* one more Validity device */ },
+ { 0, 0, 0, },
+};
+
+struct fp_img_driver vfs5011_driver = {
+ .driver = {
+ .id = VFS5011_ID,
+ .name = "vfs5011",
+ .full_name = "Validity VFS5011",
+ .id_table = id_table,
+ .scan_type = FP_SCAN_TYPE_SWIPE,
+ },
+
+ .flags = 0,
+ .img_width = VFS5011_IMAGE_WIDTH,
+ .img_height = -1,
+ .bz3_threshold = 20,
+
+ .open = dev_open,
+ .close = dev_close,
+ .activate = dev_activate,
+ .deactivate = dev_deactivate,
+};
+
diff --git a/libfprint/drivers/vfs5011_proto.h b/libfprint/drivers/vfs5011_proto.h
new file mode 100644
index 00000000..8cd0ea80
--- /dev/null
+++ b/libfprint/drivers/vfs5011_proto.h
@@ -0,0 +1,6186 @@
+#ifndef __VFS5011_PROTO_H
+#define __VFS5011_PROTO_H
+
+#define VFS5011_LINE_SIZE 240
+#define VFS5011_IMAGE_WIDTH 160
+
+enum {
+ VFS5011_DEFAULT_WAIT_TIMEOUT = 3000,
+
+ VFS5011_OUT_ENDPOINT = 1 | LIBUSB_ENDPOINT_OUT,
+ VFS5011_IN_ENDPOINT_CTRL = 1 | LIBUSB_ENDPOINT_IN,
+ VFS5011_IN_ENDPOINT_DATA = 2 | LIBUSB_ENDPOINT_IN,
+ VFS5011_IN_ENDPOINT_CTRL2 = 3 | LIBUSB_ENDPOINT_IN,
+};
+
+enum {
+ VFS5011_RECEIVE_BUF_SIZE = 102400
+};
+
+static unsigned char VFS5011_NORMAL_CONTROL_REPLY[] = {0x00, 0x00};
+
+static unsigned char vfs5011_cmd_01[] = { /* 1 B */
+ 0x01,
+};
+
+static unsigned char vfs5011_cmd_19[] = { /* 1 B */
+ 0x19,
+};
+
+static unsigned char vfs5011_init_00[] = { /* 39 B */
+ 0x0B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x9F, 0x00, 0x00, 0x00,
+};
+
+static unsigned char vfs5011_init_01[] = { /* 40 B */
+ 0x0B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0xAB, 0x00, 0x00, 0x00, 0x00,
+
+};
+
+static unsigned char vfs5011_init_02[] = { /* 578 B */
+ 0x06, 0x9C, 0xF1, 0x9D, 0x71, 0xC3, 0x13, 0xDF,
+ 0x5F, 0xE4, 0x7A, 0x1F, 0xC7, 0x17, 0x53, 0x9A,
+ 0x1A, 0xA1, 0xD7, 0xB6, 0x6E, 0xBE, 0xDF, 0x1F,
+ 0x9F, 0x44, 0x42, 0x22, 0xFA, 0x2A, 0x6A, 0xAB,
+ 0x2B, 0xF0, 0x56, 0x39, 0xE3, 0x7B, 0x53, 0x9A,
+ 0x1A, 0xA1, 0xDB, 0xBA, 0x62, 0xB2, 0xE4, 0x65,
+ 0xE5, 0xDB, 0x68, 0x04, 0x79, 0x98, 0xDE, 0x8F,
+ 0x23, 0xFB, 0xEC, 0xAD, 0x76, 0xCA, 0xA2, 0xEB,
+ 0x61, 0x38, 0xC7, 0xAB, 0x6E, 0x2E, 0x78, 0xF9,
+ 0x79, 0x13, 0x8A, 0xE5, 0x90, 0x22, 0x63, 0x8D,
+ 0x0E, 0x93, 0x25, 0x49, 0x5A, 0xC8, 0xA3, 0xD8,
+ 0x7E, 0xAE, 0x12, 0xF6, 0x2C, 0x1C, 0xFC, 0x48,
+ 0x4F, 0x0E, 0x48, 0x22, 0xFB, 0x4B, 0xCE, 0x7E,
+ 0xDB, 0x2D, 0x91, 0xE0, 0xC8, 0x78, 0x2E, 0xAF,
+ 0x2F, 0xD4, 0x03, 0x6F, 0x12, 0x59, 0xC6, 0x26,
+ 0x40, 0x88, 0x2E, 0x62, 0xBA, 0x06, 0x6C, 0xC9,
+ 0x7A, 0x84, 0x93, 0xCF, 0x14, 0x15, 0x44, 0x87,
+ 0xE2, 0x09, 0x97, 0xE6, 0xCE, 0x7E, 0x28, 0xA9,
+ 0x29, 0x53, 0xD7, 0xB8, 0xD1, 0x53, 0x30, 0x15,
+ 0x6E, 0x95, 0x3E, 0xA2, 0x7A, 0xCA, 0x9C, 0x1D,
+ 0x9D, 0xEB, 0x5F, 0x15, 0xEF, 0x48, 0x34, 0xCC,
+ 0xCB, 0x02, 0xA6, 0xD6, 0xA7, 0x80, 0xF2, 0x3F,
+ 0x7E, 0x96, 0x23, 0xAE, 0x42, 0xF1, 0x29, 0xF5,
+ 0xAD, 0x5A, 0x35, 0x57, 0x36, 0xAA, 0xAF, 0x97,
+ 0xE8, 0x1E, 0xA2, 0xD3, 0xFB, 0x4B, 0x1D, 0x9C,
+ 0x1C, 0x06, 0x84, 0xEB, 0x9E, 0x2C, 0xD4, 0x18,
+ 0x94, 0x44, 0x7E, 0x4B, 0x12, 0x91, 0xF2, 0x8B,
+ 0x07, 0x45, 0xDB, 0x52, 0xBB, 0x2E, 0x53, 0x63,
+ 0xE3, 0x38, 0xB8, 0x95, 0x4D, 0x9B, 0xCF, 0x07,
+ 0x05, 0xDD, 0x4C, 0xE2, 0x39, 0xAF, 0xA9, 0x51,
+ 0xDB, 0xAD, 0x19, 0xC8, 0x13, 0x6E, 0x0A, 0x2F,
+ 0xEA, 0x12, 0xB9, 0x25, 0x55, 0xB6, 0x64, 0x04,
+ 0x7F, 0x14, 0x6E, 0x12, 0x08, 0xFB, 0xBD, 0xBD,
+ 0x1D, 0xC6, 0xE2, 0x84, 0x50, 0x20, 0x60, 0xA0,
+ 0x90, 0xD2, 0x74, 0x8A, 0x18, 0xA4, 0xD9, 0xE9,
+ 0x69, 0xB2, 0x1E, 0x73, 0xAB, 0x1B, 0x7B, 0xBB,
+ 0x3B, 0xE0, 0x42, 0x23, 0xF9, 0x29, 0x49, 0x89,
+ 0x09, 0xD2, 0x4C, 0x29, 0xF1, 0x21, 0x65, 0xAC,
+ 0x2C, 0x97, 0x30, 0x6C, 0xB4, 0x04, 0xF4, 0x3D,
+ 0xBD, 0x06, 0xA0, 0xC6, 0x1E, 0xCE, 0x7E, 0xB3,
+ 0x33, 0x88, 0x2E, 0x43, 0x9B, 0x2B, 0x37, 0xF0,
+ 0x70, 0xCB, 0x91, 0xF1, 0x2B, 0xFB, 0x8B, 0x48,
+ 0xCA, 0x39, 0x97, 0xFB, 0x21, 0xB9, 0xCD, 0x0E,
+ 0x8C, 0x7F, 0x8D, 0xEC, 0x36, 0xE6, 0xEA, 0x27,
+ 0xA5, 0x1E, 0x40, 0x2A, 0xF2, 0x22, 0xCA, 0x07,
+ 0x85, 0x3E, 0xC8, 0xAE, 0x76, 0xA6, 0xF0, 0x71,
+ 0xF1, 0xAB, 0x6B, 0x04, 0x6D, 0xA9, 0xCA, 0x06,
+ 0x2C, 0x66, 0xA5, 0xCA, 0xB0, 0x4B, 0x2B, 0x62,
+ 0xEB, 0xD5, 0x61, 0x0D, 0xF0, 0x46, 0x26, 0xC3,
+ 0x44, 0x9F, 0x0C, 0x63, 0xBB, 0xAA, 0xBD, 0x7E,
+ 0xF2, 0x74, 0x00, 0x66, 0x2B, 0x7A, 0x62, 0xA1,
+ 0x07, 0x80, 0x33, 0x8D, 0x1F, 0xF7, 0x45, 0xCB,
+ 0x5E, 0x24, 0xEB, 0x84, 0xED, 0x27, 0x44, 0x61,
+ 0xFF, 0x0C, 0xA7, 0x3B, 0xE3, 0x53, 0x05, 0x84,
+ 0x04, 0xEE, 0x23, 0x4C, 0xB5, 0x79, 0x1A, 0xF3,
+ 0xA0, 0x66, 0x20, 0x4C, 0x94, 0x24, 0x72, 0xF3,
+ 0x73, 0x39, 0xF8, 0x97, 0xDD, 0x64, 0x54, 0xF2,
+ 0x6B, 0xBA, 0xAD, 0xBC, 0x67, 0x66, 0x78, 0xBB,
+ 0x5E, 0x6D, 0xFB, 0x8A, 0xA2, 0x74, 0x3D, 0xF5,
+ 0xD4, 0x72, 0xC7, 0x1A, 0xBD, 0x0E, 0x0B, 0x2C,
+ 0x8C, 0x4A, 0x0C, 0x60, 0xB8, 0x08, 0x5E, 0xDF,
+ 0x5F, 0x05, 0x33, 0x5C, 0xB5, 0x7E, 0x1D, 0xFC,
+ 0xFD, 0x25, 0xBA, 0x95, 0xC4, 0xA7, 0xDA, 0xEA,
+ 0x6A, 0xB1, 0x31, 0x1C, 0xC4, 0xE5, 0x07, 0xC4,
+ 0xC5, 0x9D, 0x28, 0xCD, 0x3C, 0xE9, 0x89, 0x49,
+ 0xD4, 0xFF, 0x7F, 0x52, 0x8A, 0x9B, 0x7F, 0xBC,
+ 0x8E, 0xF5, 0xCF, 0x0B, 0xD9, 0x49, 0x48, 0x88,
+ 0x80, 0x71, 0x7D, 0xAB, 0xEF, 0x47, 0x2B, 0xF7,
+ 0x7B, 0x2D, 0x79, 0x3F, 0xCF, 0xBF, 0xFF, 0x3F,
+ 0x6D, 0xF8, 0x42, 0xEC, 0x7F, 0xE8, 0xED, 0x42,
+ 0xE6, 0x1D, 0x4D, 0x32, 0xFA, 0x6A, 0x0A, 0xD7,
+ 0xA7, 0x7C, 0xCB, 0xA7, 0x7B, 0xCB, 0xBF, 0x71,
+ 0xF3, 0x48,
+};
+
+static unsigned char vfs5011_cmd_1A[] = { /* 1 B */
+ 0x1A,
+};
+
+static unsigned char vfs5011_init_03[] = { /* 2354 B */
+ 0x06, 0xFE, 0x93, 0xFF, 0x03, 0xBA, 0x6A, 0xA6,
+ 0x26, 0x9D, 0x03, 0x66, 0xBE, 0x6E, 0x2A, 0xE3,
+ 0x63, 0xD8, 0xFE, 0x9B, 0x43, 0x93, 0xD7, 0x03,
+ 0x83, 0x38, 0x8C, 0xE0, 0x38, 0x88, 0x58, 0x94,
+ 0x14, 0xAF, 0xC9, 0xA2, 0x7A, 0xCA, 0x96, 0x5E,
+ 0xDE, 0x65, 0x27, 0x36, 0xEA, 0x3A, 0x4E, 0x82,
+ 0x02, 0xB9, 0x0F, 0x4B, 0x97, 0x17, 0xF7, 0x1A,
+ 0x9E, 0x75, 0xC3, 0x8F, 0x53, 0xD3, 0x9F, 0x7F,
+ 0xFB, 0x10, 0xE6, 0xAA, 0x76, 0xF6, 0x72, 0x93,
+ 0x17, 0xFC, 0x4A, 0x26, 0xFE, 0x76, 0x2A, 0xEA,
+ 0x6A, 0x89, 0x3F, 0xF3, 0x2B, 0xA3, 0xFF, 0x9F,
+ 0x1F, 0xFC, 0x4A, 0x06, 0xDE, 0x56, 0x38, 0xD8,
+ 0x58, 0xBB, 0x0D, 0x21, 0xF9, 0x71, 0x19, 0x99,
+ 0x19, 0xFA, 0x4C, 0x40, 0x98, 0x10, 0x78, 0xD8,
+ 0x58, 0xBB, 0x0D, 0xE1, 0x39, 0xB1, 0xD9, 0x99,
+ 0x19, 0xFA, 0x6C, 0x7E, 0xA2, 0x72, 0xC6, 0x7D,
+ 0xF9, 0x42, 0xF4, 0x86, 0x5A, 0xDA, 0xD2, 0x06,
+ 0x86, 0x3D, 0x6F, 0x08, 0xD0, 0x00, 0xD8, 0x10,
+ 0x90, 0x2B, 0xFD, 0xB7, 0x6B, 0xBB, 0x67, 0xA0,
+ 0x20, 0x9B, 0x35, 0x36, 0xEA, 0x3A, 0xA2, 0x0C,
+ 0x88, 0x33, 0x7D, 0x1A, 0xC2, 0x12, 0x2A, 0xFE,
+ 0x7E, 0xC5, 0x8C, 0x17, 0x30, 0x7F, 0xE0, 0xCF,
+ 0xB0, 0x94, 0x4E, 0x36, 0xEE, 0x3E, 0x5E, 0x96,
+ 0x16, 0xCD, 0x9F, 0xE1, 0x3B, 0xEB, 0x8B, 0x5B,
+ 0xDB, 0x00, 0x8A, 0xF2, 0x2A, 0xFA, 0x0E, 0xC8,
+ 0x48, 0xF3, 0x6D, 0x12, 0xC8, 0x18, 0x08, 0xDC,
+ 0x5C, 0xE7, 0x01, 0x79, 0xA1, 0x71, 0x3D, 0xF4,
+ 0x74, 0xCF, 0x84, 0x17, 0xCF, 0x7F, 0xE0, 0x20,
+ 0x5F, 0x7B, 0xFB, 0xD6, 0x0E, 0x1B, 0x65, 0xA5,
+ 0x00, 0xDC, 0x6A, 0xE3, 0x7E, 0xCE, 0x4B, 0xCE,
+ 0x68, 0x22, 0xB8, 0xD7, 0xAE, 0x33, 0x50, 0x9C,
+ 0x14, 0x46, 0xFA, 0x14, 0x85, 0x35, 0x48, 0x78,
+ 0xF8, 0x23, 0xA3, 0x8E, 0x56, 0x77, 0x39, 0xFA,
+ 0x76, 0xA5, 0x91, 0xB4, 0x34, 0xE1, 0x4D, 0xA8,
+ 0x35, 0x1E, 0x9E, 0xB3, 0x6B, 0x6A, 0x3A, 0xF9,
+ 0xD4, 0x0D, 0x9A, 0xD9, 0x02, 0xF4, 0x94, 0x54,
+ 0x1F, 0xE6, 0x5B, 0x8C, 0x72, 0xC9, 0xA3, 0xEB,
+ 0x69, 0x32, 0x04, 0x1C, 0x43, 0x69, 0xF9, 0x3F,
+ 0xBE, 0x65, 0xF6, 0xFE, 0x03, 0x9E, 0xF4, 0x29,
+ 0x59, 0x82, 0x02, 0x2F, 0xF7, 0x67, 0x66, 0xA6,
+ 0x03, 0x22, 0x6B, 0x27, 0x19, 0xBA, 0xCA, 0x2A,
+ 0xAA, 0x7D, 0xC1, 0x08, 0xF6, 0x63, 0xA2, 0x53,
+ 0xD0, 0xBA, 0x3E, 0x51, 0xAC, 0x38, 0x70, 0xAD,
+ 0xDD, 0x06, 0x86, 0xAB, 0x73, 0xF2, 0xA1, 0x62,
+ 0xC3, 0x2C, 0x99, 0xDC, 0x47, 0xEA, 0x7A, 0xBA,
+ 0x3A, 0xE1, 0x61, 0x4C, 0x94, 0xA6, 0xC4, 0x09,
+ 0x85, 0x45, 0x73, 0x9F, 0x43, 0xA5, 0xDD, 0x1A,
+ 0x96, 0x48, 0xF2, 0x98, 0x02, 0xA0, 0xCE, 0x12,
+ 0x95, 0x74, 0x86, 0x58, 0x44, 0x75, 0x27, 0xE3,
+ 0x63, 0x0A, 0xB7, 0xA5, 0xBF, 0x0B, 0x6A, 0x9D,
+ 0xA6, 0x71, 0xF0, 0x20, 0xE9, 0x64, 0x0F, 0x08,
+ 0x33, 0xE4, 0x6F, 0x0F, 0x11, 0xA0, 0xC0, 0x37,
+ 0x8B, 0x54, 0x25, 0xF2, 0x2B, 0xA6, 0xCD, 0xA0,
+ 0x23, 0x45, 0xF0, 0xF9, 0x99, 0x01, 0xCB, 0x6D,
+ 0xB7, 0x3F, 0x82, 0x99, 0x0A, 0xFE, 0x2C, 0x28,
+ 0x29, 0xA4, 0x85, 0x15, 0x60, 0xD5, 0x08, 0xCD,
+ 0x68, 0x04, 0x9A, 0xFA, 0x39, 0x5B, 0x99, 0x35,
+ 0x15, 0x0A, 0xFD, 0x51, 0x4F, 0x3F, 0x85, 0x97,
+ 0xE5, 0x23, 0x17, 0xBB, 0xA7, 0x56, 0xF6, 0xB5,
+ 0x74, 0x5F, 0x06, 0x9A, 0xA2, 0xF1, 0xB0, 0xFA,
+ 0x94, 0xBF, 0xC7, 0x38, 0x22, 0xCF, 0x2D, 0xEB,
+ 0x68, 0xB3, 0xC7, 0x09, 0xBD, 0xC7, 0x65, 0x67,
+ 0xFB, 0x5D, 0xD1, 0x71, 0x6B, 0xD7, 0xB7, 0xA5,
+ 0x37, 0xE5, 0x7E, 0x19, 0x16, 0x1A, 0x7B, 0xB7,
+ 0x15, 0xD3, 0x95, 0xF9, 0x21, 0x91, 0xC7, 0x46,
+ 0xC6, 0xAC, 0x2F, 0x40, 0x20, 0x9B, 0x77, 0xDC,
+ 0xFE, 0x84, 0x52, 0x94, 0xE7, 0xF2, 0x28, 0xC8,
+ 0xE5, 0x3C, 0x2F, 0xEF, 0x12, 0xBF, 0x2F, 0xEF,
+ 0x6F, 0xB4, 0x34, 0x19, 0xC1, 0xD0, 0x86, 0x45,
+ 0x74, 0x98, 0x2D, 0x8C, 0x56, 0x43, 0x75, 0x90,
+ 0xA1, 0x43, 0xF6, 0xBA, 0x48, 0x58, 0x99, 0x61,
+ 0xE2, 0xF4, 0x40, 0x89, 0x04, 0x91, 0x40, 0xBB,
+ 0x38, 0xC3, 0x4F, 0x83, 0x99, 0xEA, 0x9A, 0xFB,
+ 0x41, 0x99, 0x23, 0x4D, 0xBC, 0x0F, 0x46, 0x95,
+ 0x3C, 0xC4, 0x5B, 0x04, 0xF9, 0x1D, 0x58, 0x29,
+ 0x94, 0x4C, 0xCA, 0x9C, 0xE4, 0x96, 0x35, 0xE5,
+ 0xC4, 0x23, 0x96, 0xDF, 0x54, 0xC1, 0xAD, 0x64,
+ 0xD4, 0x35, 0x23, 0x7D, 0x66, 0xC6, 0xBD, 0xE4,
+ 0x4D, 0x95, 0x68, 0x37, 0x89, 0xA0, 0x36, 0x5B,
+ 0xD8, 0xB1, 0xA7, 0x6E, 0x9A, 0x66, 0x23, 0x41,
+ 0xE9, 0x93, 0x1B, 0x74, 0x1D, 0x92, 0xF1, 0xF3,
+ 0xB0, 0x4F, 0x5C, 0x60, 0x9D, 0x9C, 0xBD, 0x7E,
+ 0xCE, 0x2F, 0x39, 0xF4, 0x6C, 0xDF, 0x8D, 0x8E,
+ 0x2A, 0x3C, 0x89, 0xC0, 0x4A, 0xDF, 0x0E, 0x8D,
+ 0x0E, 0xE5, 0x69, 0xA5, 0xDC, 0x2E, 0x4D, 0x40,
+ 0xC3, 0xFD, 0x18, 0x51, 0x38, 0xCD, 0xAE, 0x5E,
+ 0xE4, 0x9F, 0x88, 0xA0, 0x7B, 0x06, 0x65, 0x40,
+ 0x92, 0x6C, 0x6B, 0x40, 0x9B, 0x1B, 0x41, 0x21,
+ 0x00, 0x9D, 0x28, 0x89, 0x52, 0xC7, 0xF5, 0x10,
+ 0xA0, 0x51, 0x47, 0x36, 0x1E, 0xAE, 0xF8, 0x79,
+ 0xF9, 0x07, 0x94, 0xF8, 0xA1, 0x58, 0x3B, 0x6A,
+ 0xD9, 0x01, 0x16, 0x32, 0xE9, 0xF0, 0xC9, 0x80,
+ 0x09, 0xCF, 0x89, 0xE5, 0x3D, 0x8D, 0xDB, 0x5A,
+ 0xDA, 0x30, 0xB3, 0xDC, 0x08, 0x9F, 0xC7, 0x04,
+ 0xD5, 0x44, 0xF1, 0x0F, 0xD4, 0x6C, 0x6E, 0x0F,
+ 0xFF, 0x2F, 0x10, 0x6A, 0xFA, 0x4C, 0xFD, 0x76,
+ 0xF5, 0x22, 0xFE, 0x9E, 0x41, 0x73, 0xDA, 0xE6,
+ 0x70, 0xA3, 0x1F, 0x55, 0xD4, 0x6C, 0xA1, 0x63,
+ 0x06, 0x1C, 0x8C, 0xCD, 0x1F, 0xB2, 0x22, 0x88,
+ 0x4B, 0x22, 0x87, 0xE0, 0xAA, 0x1E, 0x7E, 0xA8,
+ 0x13, 0xC3, 0x13, 0x06, 0xCE, 0xBC, 0xC8, 0xF4,
+ 0x22, 0x55, 0xE9, 0x27, 0xBC, 0x04, 0x46, 0x85,
+ 0x08, 0xF3, 0x64, 0x0C, 0xC9, 0x89, 0xE5, 0x2E,
+ 0x2C, 0xF4, 0x4F, 0xE1, 0x1A, 0x77, 0x00, 0xA8,
+ 0x27, 0x6E, 0xD5, 0xB9, 0x6D, 0xCF, 0xB9, 0x50,
+ 0xDE, 0x0E, 0x11, 0xDF, 0x4A, 0xFA, 0xDC, 0x1C,
+ 0x9C, 0x4B, 0xFF, 0x53, 0xAB, 0x1B, 0xD9, 0x0A,
+ 0x82, 0x9B, 0x48, 0x84, 0xD0, 0x7A, 0xFF, 0xD5,
+ 0x73, 0xB5, 0xF3, 0xF5, 0x6E, 0x0C, 0x68, 0xA8,
+ 0x4E, 0x88, 0x02, 0xD6, 0x2C, 0x31, 0x52, 0x77,
+ 0x13, 0xEE, 0xF8, 0x74, 0xD8, 0x0E, 0x70, 0x91,
+ 0xA0, 0x37, 0x82, 0x1C, 0xCF, 0x7F, 0x39, 0xD6,
+ 0x51, 0xF8, 0x05, 0x69, 0xBD, 0x07, 0xC2, 0x68,
+ 0xCD, 0x1A, 0x94, 0x6A, 0x91, 0xFF, 0x5F, 0xBF,
+ 0x3F, 0x76, 0xA5, 0x69, 0x33, 0xC0, 0xA8, 0x2E,
+ 0xAD, 0x76, 0x62, 0x1D, 0xC2, 0xFE, 0xE4, 0x56,
+ 0x92, 0x49, 0x5D, 0x22, 0xFD, 0xE8, 0x6E, 0x88,
+ 0x04, 0xCD, 0x66, 0xFA, 0x90, 0x33, 0x5B, 0xF1,
+ 0x32, 0xFF, 0x82, 0xE9, 0xF3, 0x47, 0x27, 0x25,
+ 0x69, 0x49, 0xE9, 0xB9, 0x66, 0x34, 0x57, 0x9A,
+ 0x98, 0x67, 0x50, 0x2B, 0x9D, 0x7D, 0x8F, 0x42,
+ 0xC2, 0x0F, 0x30, 0x50, 0x84, 0x26, 0x4D, 0x74,
+ 0x06, 0x90, 0x26, 0xCC, 0x04, 0xB4, 0x56, 0x5F,
+ 0x26, 0xAB, 0x85, 0x1C, 0x7C, 0xEE, 0x23, 0xE0,
+ 0x85, 0x83, 0x13, 0xDF, 0x97, 0x53, 0x38, 0x61,
+ 0xB7, 0x85, 0x39, 0x59, 0x8A, 0x36, 0x1A, 0x38,
+ 0x9B, 0x9D, 0xF9, 0x37, 0x9B, 0xF1, 0x42, 0x42,
+ 0xE2, 0x39, 0x2D, 0x52, 0x82, 0xD0, 0xD5, 0xB5,
+ 0x47, 0xC1, 0x09, 0xA7, 0x3C, 0x84, 0xF2, 0x78,
+ 0x0A, 0xDD, 0x05, 0x8B, 0x17, 0xA7, 0x65, 0xB6,
+ 0x3E, 0x00, 0x69, 0x23, 0x7D, 0x08, 0x97, 0x7A,
+ 0xFD, 0x2A, 0x93, 0x3F, 0xC7, 0x77, 0xB5, 0x66,
+ 0xEE, 0xB7, 0x64, 0xA8, 0x66, 0x4C, 0xDF, 0x7A,
+ 0x24, 0xD9, 0x72, 0xEE, 0x3A, 0x88, 0xAE, 0xA6,
+ 0xD9, 0xBA, 0x2E, 0xEF, 0x34, 0x21, 0x99, 0x7F,
+ 0x5F, 0x14, 0xD6, 0xDC, 0x1D, 0x8A, 0xE6, 0x2D,
+ 0x7F, 0x87, 0xEC, 0x42, 0x38, 0xFC, 0x56, 0x55,
+ 0x15, 0xEE, 0x58, 0xE6, 0x5B, 0x4B, 0x89, 0x5A,
+ 0xD2, 0x7B, 0x91, 0x83, 0xE7, 0x0D, 0x07, 0x24,
+ 0xA8, 0x1E, 0x7A, 0x58, 0x80, 0x92, 0xE1, 0x29,
+ 0x4C, 0x4D, 0xDD, 0x37, 0xE6, 0x56, 0x3A, 0x85,
+ 0x09, 0x86, 0x72, 0x5D, 0x8D, 0x57, 0x74, 0x46,
+ 0x82, 0x59, 0x5D, 0x22, 0xF1, 0xDD, 0xF6, 0x84,
+ 0x50, 0x77, 0xCD, 0x5B, 0x8F, 0xB7, 0x55, 0xD1,
+ 0x51, 0x6F, 0x01, 0x4B, 0x01, 0xA5, 0x39, 0x6B,
+ 0x22, 0x08, 0x2C, 0x14, 0x30, 0xA2, 0xC1, 0x0C,
+ 0xAC, 0x56, 0xE4, 0x95, 0xBD, 0x20, 0x47, 0x01,
+ 0x5E, 0x7A, 0x6E, 0x16, 0x32, 0x94, 0x2E, 0x06,
+ 0x8A, 0xD9, 0xED, 0xC5, 0x1D, 0x1B, 0xC1, 0x11,
+ 0x9D, 0xBC, 0x2F, 0x95, 0x6B, 0xF9, 0x8D, 0xB1,
+ 0x13, 0x0A, 0x4D, 0x03, 0x8F, 0xC3, 0xA5, 0xF8,
+ 0x87, 0x39, 0x5A, 0x10, 0xE5, 0x52, 0x74, 0x48,
+ 0x37, 0xEC, 0x6C, 0x41, 0x99, 0x78, 0x2D, 0xEE,
+ 0x36, 0xE8, 0x1C, 0xD0, 0xF8, 0x02, 0x27, 0xD5,
+ 0x51, 0x0A, 0x9A, 0xD5, 0x3C, 0xAA, 0x89, 0x7A,
+ 0x9B, 0x0A, 0xBF, 0xA2, 0x31, 0x82, 0xEE, 0x86,
+ 0x20, 0x98, 0x01, 0x0B, 0x50, 0xFE, 0x92, 0x21,
+ 0x33, 0xCD, 0xA5, 0x09, 0xF1, 0x41, 0xB3, 0x15,
+ 0x35, 0xDC, 0x2E, 0xC2, 0xA8, 0x1D, 0x70, 0x12,
+ 0x95, 0x4E, 0x48, 0x95, 0x49, 0x49, 0x81, 0xD2,
+ 0xF0, 0x6C, 0xDA, 0xAB, 0x83, 0x2E, 0xBE, 0x72,
+ 0xE1, 0x7C, 0xCA, 0xA6, 0x72, 0xF1, 0xA3, 0x27,
+ 0x27, 0xE1, 0xA7, 0xC7, 0x4C, 0x3E, 0x7B, 0x65,
+ 0x25, 0xDE, 0x68, 0xC6, 0x78, 0x68, 0xCE, 0xFD,
+ 0x82, 0x59, 0xD9, 0xF4, 0x2C, 0xAD, 0x80, 0x43,
+ 0xE2, 0x77, 0xC2, 0x87, 0x4C, 0xE1, 0x71, 0xB1,
+ 0x31, 0xEA, 0x6A, 0x47, 0x9F, 0xBE, 0xEB, 0x28,
+ 0x30, 0xE2, 0xD8, 0x1D, 0x67, 0xFE, 0x43, 0x23,
+ 0x03, 0xCC, 0x5C, 0x0A, 0xD0, 0x05, 0x22, 0xC3,
+ 0x5E, 0x75, 0xF5, 0xD8, 0x00, 0x11, 0x21, 0xE2,
+ 0x43, 0xD1, 0x64, 0x39, 0xD2, 0x61, 0x90, 0x1F,
+ 0x9C, 0xC6, 0x21, 0x4E, 0x1F, 0x86, 0xCF, 0x0C,
+ 0x25, 0xA7, 0x0C, 0x90, 0x48, 0xF8, 0xAE, 0x2F,
+ 0xAF, 0x55, 0xB1, 0xDE, 0x8E, 0x1C, 0xBB, 0x13,
+ 0x8E, 0xF4, 0x11, 0x7E, 0x43, 0xBE, 0xF6, 0xA7,
+ 0x73, 0xAB, 0xDC, 0xE5, 0x3E, 0x3F, 0x09, 0xCA,
+ 0xE2, 0x1B, 0x15, 0x72, 0x6A, 0x70, 0x00, 0x50,
+ 0x4A, 0x81, 0x87, 0x71, 0x3A, 0x13, 0x51, 0xB4,
+ 0xFA, 0x04, 0xAF, 0x33, 0xEB, 0x5B, 0x0D, 0x8C,
+ 0x0C, 0x76, 0x93, 0xFC, 0x41, 0xB6, 0xFE, 0xDF,
+ 0x08, 0xD0, 0x27, 0x78, 0xA3, 0x22, 0x10, 0xD3,
+ 0x5F, 0x88, 0xE6, 0xA9, 0x80, 0x66, 0x05, 0x72,
+ 0x9F, 0x66, 0x6D, 0x0E, 0x1E, 0xAA, 0x03, 0xCC,
+ 0xE1, 0x38, 0x0F, 0x3B, 0xE0, 0xB0, 0x4D, 0xAD,
+ 0xB4, 0x4C, 0x73, 0x1B, 0xA6, 0x13, 0x73, 0x02,
+ 0xDB, 0x03, 0x1D, 0x52, 0x86, 0x34, 0xE4, 0x8E,
+ 0x2E, 0x5C, 0xC9, 0xB8, 0x90, 0x2C, 0x47, 0x41,
+ 0x37, 0x13, 0x93, 0xBE, 0x66, 0xCA, 0x62, 0x25,
+ 0x37, 0xE8, 0x7F, 0x49, 0x92, 0x3F, 0xAF, 0xC2,
+ 0x40, 0x3E, 0x4E, 0x07, 0xF2, 0x48, 0x35, 0x05,
+ 0x85, 0x5E, 0xDE, 0xF3, 0x2B, 0xDA, 0xE1, 0x22,
+ 0x93, 0x14, 0xA1, 0x45, 0xD9, 0xE0, 0x02, 0xFB,
+ 0x3F, 0xF9, 0xBF, 0xD3, 0x0B, 0xBB, 0xED, 0x6C,
+ 0xEC, 0x95, 0xE1, 0x9D, 0x60, 0xAB, 0xEB, 0xBA,
+ 0x61, 0xB9, 0x87, 0x69, 0x38, 0xC1, 0xBC, 0x8C,
+ 0x0C, 0xD7, 0x57, 0x7A, 0xA2, 0xAF, 0xCD, 0x2C,
+ 0xF1, 0x29, 0xB7, 0xD9, 0x0D, 0x31, 0xDA, 0xB8,
+ 0x1D, 0x8C, 0x12, 0xFF, 0x79, 0xCA, 0x38, 0x3A,
+ 0xAA, 0xE8, 0x0C, 0xF9, 0x63, 0x5A, 0x58, 0x14,
+ 0x97, 0x75, 0x51, 0x20, 0x08, 0xB8, 0xEE, 0x6F,
+ 0xEF, 0x05, 0xEE, 0x81, 0x61, 0xD2, 0x00, 0xD3,
+ 0x4B, 0x9C, 0x36, 0x5D, 0x6E, 0xC4, 0x35, 0xAA,
+ 0x29, 0x32, 0x2F, 0x63, 0x19, 0xFA, 0x82, 0x82,
+ 0x22, 0xF9, 0xD7, 0xB2, 0xE8, 0x4B, 0x2D, 0x4F,
+ 0x0C, 0xC7, 0xEB, 0x0F, 0x5E, 0x9D, 0x18, 0xAB,
+ 0x0B, 0x62, 0xC7, 0xB3, 0x7C, 0x27, 0x49, 0x31,
+ 0x22, 0x75, 0x58, 0xBC, 0x6F, 0x72, 0x10, 0x30,
+ 0xB8, 0x63, 0xF8, 0x9E, 0x5B, 0x1B, 0x77, 0xB5,
+ 0x28, 0x03, 0x83, 0xAE, 0x76, 0xF7, 0xCA, 0x09,
+ 0xB1, 0x69, 0x6D, 0x13, 0xDF, 0xA7, 0x64, 0x0C,
+ 0xAF, 0xBE, 0xB3, 0x66, 0x1D, 0x0A, 0x51, 0xC0,
+ 0xE0, 0xA0, 0xD6, 0x38, 0xF3, 0x5B, 0xA2, 0xC1,
+ 0x56, 0xE5, 0x78, 0xD6, 0xA6, 0xE9, 0x68, 0xC8,
+ 0x4B, 0x68, 0x6D, 0xC1, 0x39, 0x89, 0x3B, 0xE8,
+ 0x70, 0x1A, 0xE6, 0x89, 0xB1, 0xDC, 0xAC, 0x9E,
+ 0x75, 0x0E, 0x6A, 0x55, 0x95, 0xE5, 0xA5, 0x65,
+ 0x47, 0xB7, 0x81, 0x2D, 0xD5, 0x65, 0xC5, 0xAF,
+ 0x3F, 0x46, 0x9B, 0x77, 0xE9, 0x58, 0x38, 0x5A,
+ 0x19, 0xD2, 0xC1, 0xC3, 0x3B, 0x4B, 0x0B, 0xCB,
+ 0xDA, 0x5E, 0xEB, 0x05, 0xCE, 0x78, 0x80, 0x49,
+ 0x6B, 0x73, 0xD5, 0x23, 0x73, 0x4A, 0x59, 0x7C,
+ 0x97, 0x6C, 0x52, 0xBD, 0xC8, 0x7A, 0xFA, 0x32,
+ 0xB2, 0x74, 0x32, 0x5E, 0x86, 0x36, 0x60, 0xE1,
+ 0x61, 0xF8, 0xE6, 0x75, 0x3C, 0xED, 0x8E, 0xFF,
+ 0x22, 0xFA, 0x7D, 0x5B, 0x80, 0x88, 0xE3, 0xE1,
+ 0x7A, 0xB9, 0x03, 0x42, 0x4A, 0x36, 0x76, 0x74,
+ 0xAF, 0x6C, 0x1A, 0x56, 0x8E, 0x9C, 0xDF, 0xBF,
+ 0x96, 0xF6, 0x80, 0xCC, 0x14, 0x26, 0x65, 0x05,
+ 0x45, 0xBE, 0x08, 0xF4, 0xA4, 0x04, 0xF6, 0x97,
+ 0x17, 0x5C, 0x62, 0x2E, 0x74, 0xA7, 0x67, 0x67,
+ 0xC7, 0x1C, 0x88, 0xC7, 0x9F, 0xEF, 0xAF, 0x6F,
+ 0xAF, 0x56, 0xF0, 0xDE, 0xA2, 0x12, 0x32, 0xD0,
+ 0x70, 0x89, 0x5C, 0xB0, 0x75, 0x35, 0x63, 0xE2,
+ 0x62, 0xDF, 0x5D, 0x39, 0x63, 0xD0, 0x97, 0x95,
+ 0x16, 0xEB, 0x3B, 0x6F, 0xBD, 0xA0, 0xC2, 0xBF,
+ 0x3C, 0x2A, 0x98, 0x51, 0x56, 0xC4, 0xB9, 0x89,
+ 0xA1, 0x29, 0x2D, 0xE1, 0xC2, 0xC2, 0x6E, 0xBE,
+ 0xFC, 0x64, 0xF4, 0x58, 0xA0, 0x10, 0xE2, 0x28,
+ 0xA4, 0xBF, 0x29, 0x45, 0x2D, 0x04, 0x74, 0x26,
+ 0xEC, 0x3B, 0x90, 0x0C, 0xD4, 0x64, 0x1E, 0xDF,
+ 0x5F, 0x84, 0x32, 0x5E, 0x86, 0x36, 0xB6, 0x7B,
+ 0xF9, 0x42, 0xF0, 0x9D, 0x45, 0xF5, 0x95, 0x55,
+ 0xD5, 0x0E, 0x14, 0x76, 0xAC, 0x7C, 0x00, 0xC0,
+ 0x48, 0x93, 0x58, 0x30, 0x96, 0x22, 0x7E, 0xAC,
+ 0x2E, 0x95, 0xBB, 0xC5, 0x1F, 0xCF, 0x03, 0xD1,
+ 0x53, 0xE8, 0xC2, 0xBD, 0x67, 0xB7, 0xFF, 0x2C,
+ 0xAE, 0x15, 0xEB, 0x93, 0x4B, 0x9B, 0xB7, 0x63,
+ 0xE3, 0x58, 0x9E, 0xE6, 0x3E, 0xEE, 0xBA, 0x7A,
+ 0xFA, 0x21, 0x97, 0xFB, 0x23, 0x93, 0xF3, 0x33,
+ 0xB3, 0x68, 0xDE, 0xB2, 0x6A, 0xDA, 0x92, 0x5B,
+ 0xDB, 0x60, 0xF2, 0x97, 0x4F, 0x9F, 0xEF, 0x1F,
+ 0x9D, 0x46, 0x70, 0x08, 0xD0, 0x00, 0x30, 0xF1,
+ 0x71, 0xAA, 0xA0, 0xCB, 0x13, 0xC3, 0x0B, 0xC6,
+ 0x44, 0xFF, 0x35, 0x5E, 0x86, 0x56, 0x8E, 0x43,
+ 0xC1, 0x7A, 0xF0, 0x94, 0x4C, 0x9C, 0xEC, 0x22,
+ 0xA0, 0x1B, 0x65, 0x07, 0xDD, 0x0D, 0x05, 0xD1,
+ 0x51, 0xEA, 0xD0, 0xB3, 0x69, 0xB9, 0xB1, 0x60,
+ 0xE2, 0x59, 0x57, 0x33, 0xEB, 0x3B, 0x83, 0x52,
+ 0xD0, 0x6B, 0xD1, 0xAF, 0x75, 0xA5, 0x45, 0x97,
+ 0x15, 0xAE, 0xF0, 0x9A, 0x42, 0x92, 0x1E, 0xCD,
+ 0x4F, 0xF4, 0x02, 0x64, 0xBC, 0x6C, 0x3A, 0xBB,
+ 0x3B, 0x61, 0xC8, 0xA1, 0xC8, 0x65, 0x00, 0xCC,
+ 0x16, 0x5C, 0xF4, 0x9D, 0xE7, 0x1C, 0x7C, 0x35,
+ 0xBC, 0x42, 0xF7, 0x9B, 0xA6, 0x15, 0x75, 0x10,
+ 0x95, 0x4E, 0x9D, 0xF9, 0x21, 0xF4, 0x90, 0x50,
+ 0xB5, 0x67, 0xD1, 0x58, 0x80, 0x30, 0xF1, 0x11,
+ 0x94, 0xFE, 0x69, 0x00, 0xFD, 0xF9, 0xBE, 0x63,
+ 0x13, 0xC8, 0x48, 0x65, 0xBD, 0x3C, 0x7E, 0xBB,
+ 0x1A, 0xE2, 0x51, 0x14, 0xDF, 0x72, 0xE2, 0x22,
+ 0xA2, 0x79, 0xF9, 0xD4, 0x0C, 0x8D, 0xC9, 0x0C,
+ 0xAD, 0x53, 0xE0, 0xA5, 0xAE, 0x03, 0x93, 0x53,
+ 0xD3, 0x08, 0x88, 0xA5, 0x7D, 0xFC, 0xBA, 0x7F,
+ 0xDE, 0x22, 0x91, 0xD4, 0x4F, 0xE2, 0x72, 0xB2,
+ 0x32, 0xE9, 0x69, 0x44, 0x9C, 0x1D, 0x59, 0x9C,
+ 0x3D, 0xCE, 0x7D, 0x38, 0x73, 0xDE, 0x4E, 0x8E,
+ 0x0E, 0xD5, 0x55, 0x78, 0xA0, 0x81, 0xC8, 0x0D,
+ 0x81, 0x52, 0x66, 0x43, 0x9B, 0x4E, 0x2F, 0xEF,
+ 0xCE, 0x3E, 0x8D, 0x50, 0xAE, 0x1B, 0xBA, 0x50,
+ 0xD5, 0xC7, 0x7A, 0xBF, 0x3C, 0x91, 0x01, 0xC1,
+ 0x41, 0x9A, 0x1A, 0x37, 0xEF, 0x6E, 0x22, 0xE7,
+ 0x46, 0xB0, 0x03, 0x46, 0x8D, 0x20, 0xB0, 0x70,
+ 0xF0, 0x2B, 0xAB, 0x86, 0x5E, 0x6F, 0x21, 0xE4,
+ 0x55, 0xAC, 0x1F, 0x52, 0xA5, 0x10, 0x59, 0xBA,
+ 0xB3, 0x3B, 0x90, 0x0C, 0xD4, 0x64, 0x32, 0xB3,
+ 0x33, 0x79, 0xFF, 0x96, 0xCF, 0x4E, 0x2B, 0x62,
+ 0xCB, 0x75, 0xC3, 0xAF, 0x6A, 0x2A, 0x7C, 0xFD,
+ 0x7D, 0x07, 0x83, 0xEA, 0x80, 0x90, 0x7C, 0x14,
+ 0x9E, 0x65, 0xB2, 0xDE, 0x8E, 0x14, 0xCE, 0xB4,
+ 0xA8, 0x6B, 0xD1, 0xA1, 0x75, 0x48, 0xCA, 0x20,
+ 0x88, 0x93, 0x05, 0x69, 0x63, 0x9D, 0xF1, 0xF3,
+ 0x38, 0xC4, 0x57, 0x3A, 0xC6, 0x56, 0xD0, 0x03,
+ 0x93, 0x68, 0xDE, 0xAF, 0x87, 0x37, 0x57, 0x97,
+ 0x17, 0xCC, 0x7A, 0x16, 0xCE, 0x7E, 0x1E, 0xDE,
+ 0x5E, 0x85, 0x32, 0x5E, 0x82, 0x32, 0x9E, 0x4A,
+ 0xC8, 0x73,
+};
+
+static unsigned char vfs5011_init_04[] = { /* 2221 B */
+ 0x02, 0x20, 0x01, 0x01, 0x00, 0x03, 0x00, 0x09,
+ 0x00, 0x04, 0x20, 0x04, 0x30, 0x00, 0x00, 0x00,
+ 0x00, 0x04, 0x03, 0x00, 0x09, 0x00, 0x18, 0x20,
+ 0x04, 0x30, 0x00, 0x00, 0x00, 0x00, 0x04, 0x03,
+ 0x00, 0x09, 0x00, 0x20, 0x20, 0x04, 0x30, 0x08,
+ 0x00, 0x80, 0x00, 0x04, 0x03, 0x00, 0x09, 0x00,
+ 0x24, 0x20, 0x04, 0x30, 0x00, 0x00, 0xFF, 0x01,
+ 0x04, 0x03, 0x00, 0x09, 0x00, 0x2C, 0x20, 0x04,
+ 0x30, 0x01, 0x00, 0x00, 0x00, 0x04, 0x03, 0x00,
+ 0x09, 0x00, 0x40, 0x20, 0x04, 0x30, 0xAD, 0x01,
+ 0x00, 0x00, 0x04, 0x03, 0x00, 0x09, 0x00, 0x44,
+ 0x20, 0x04, 0x30, 0xAD, 0x01, 0x00, 0x00, 0x04,
+ 0x03, 0x00, 0x09, 0x00, 0x48, 0x20, 0x04, 0x30,
+ 0xAD, 0x01, 0x00, 0x00, 0x04, 0x03, 0x00, 0x09,
+ 0x00, 0x4C, 0x20, 0x04, 0x30, 0xFF, 0x03, 0x00,
+ 0x00, 0x04, 0x03, 0x00, 0x09, 0x00, 0x50, 0x20,
+ 0x04, 0x30, 0x00, 0x00, 0x50, 0x03, 0x04, 0x03,
+ 0x00, 0x09, 0x00, 0x54, 0x20, 0x04, 0x30, 0x01,
+ 0x3E, 0x02, 0x00, 0x04, 0x03, 0x00, 0x09, 0x00,
+ 0x00, 0x21, 0x04, 0x30, 0x14, 0x00, 0x00, 0x00,
+ 0x04, 0x03, 0x00, 0x09, 0x00, 0x04, 0x21, 0x04,
+ 0x30, 0x01, 0x00, 0x00, 0x00, 0x04, 0x03, 0x00,
+ 0x09, 0x00, 0x08, 0x21, 0x04, 0x30, 0x01, 0x00,
+ 0x00, 0x00, 0x04, 0x03, 0x00, 0x09, 0x00, 0x0C,
+ 0x21, 0x04, 0x30, 0x01, 0x00, 0x00, 0x00, 0x04,
+ 0x03, 0x00, 0x09, 0x00, 0x10, 0x21, 0x04, 0x30,
+ 0x01, 0x00, 0x00, 0x00, 0x04, 0x03, 0x00, 0x09,
+ 0x00, 0x14, 0x21, 0x04, 0x30, 0x01, 0x00, 0x00,
+ 0x00, 0x04, 0x03, 0x00, 0x09, 0x00, 0x18, 0x21,
+ 0x04, 0x30, 0x01, 0x00, 0x00, 0x00, 0x04, 0x03,
+ 0x00, 0x09, 0x00, 0x1C, 0x21, 0x04, 0x30, 0x12,
+ 0x00, 0x00, 0x00, 0x04, 0x03, 0x00, 0x09, 0x00,
+ 0x20, 0x21, 0x04, 0x30, 0x04, 0x00, 0x00, 0x00,
+ 0x04, 0x03, 0x00, 0x09, 0x00, 0x40, 0x21, 0x04,
+ 0x30, 0x00, 0x00, 0x00, 0x00, 0x04, 0x03, 0x00,
+ 0x09, 0x00, 0x44, 0x21, 0x04, 0x30, 0x01, 0x00,
+ 0x00, 0x00, 0x04, 0x03, 0x00, 0x09, 0x00, 0x48,
+ 0x21, 0x04, 0x30, 0x10, 0x00, 0x00, 0x00, 0x04,
+ 0x03, 0x00, 0x09, 0x00, 0x4C, 0x21, 0x04, 0x30,
+ 0x01, 0x00, 0x00, 0x00, 0x04, 0x03, 0x00, 0x09,
+ 0x00, 0x50, 0x21, 0x04, 0x30, 0x01, 0x00, 0x00,
+ 0x00, 0x04, 0x03, 0x00, 0x09, 0x00, 0x54, 0x21,
+ 0x04, 0x30, 0x00, 0x00, 0x00, 0x00, 0x04, 0x03,
+ 0x00, 0x09, 0x00, 0x58, 0x21, 0x04, 0x30, 0x01,
+ 0x00, 0x00, 0x00, 0x04, 0x03, 0x00, 0x09, 0x00,
+ 0x5C, 0x21, 0x04, 0x30, 0x1F, 0x00, 0x00, 0x00,
+ 0x04, 0x03, 0x00, 0x09, 0x00, 0x60, 0x21, 0x04,
+ 0x30, 0x0F, 0x00, 0x00, 0x00, 0x04, 0x03, 0x00,
+ 0x09, 0x00, 0x80, 0x21, 0x04, 0x30, 0x00, 0x00,
+ 0x00, 0x00, 0x04, 0x03, 0x00, 0x09, 0x00, 0x84,
+ 0x21, 0x04, 0x30, 0x01, 0x00, 0x00, 0x00, 0x04,
+ 0x03, 0x00, 0x09, 0x00, 0x88, 0x21, 0x04, 0x30,
+ 0x10, 0x00, 0x00, 0x00, 0x04, 0x03, 0x00, 0x09,
+ 0x00, 0x8C, 0x21, 0x04, 0x30, 0x01, 0x00, 0x00,
+ 0x00, 0x04, 0x03, 0x00, 0x09, 0x00, 0x90, 0x21,
+ 0x04, 0x30, 0x01, 0x00, 0x00, 0x00, 0x04, 0x03,
+ 0x00, 0x09, 0x00, 0x94, 0x21, 0x04, 0x30, 0x00,
+ 0x00, 0x00, 0x00, 0x04, 0x03, 0x00, 0x09, 0x00,
+ 0x98, 0x21, 0x04, 0x30, 0x01, 0x00, 0x00, 0x00,
+ 0x04, 0x03, 0x00, 0x09, 0x00, 0x9C, 0x21, 0x04,
+ 0x30, 0x1F, 0x00, 0x00, 0x00, 0x04, 0x03, 0x00,
+ 0x09, 0x00, 0xA0, 0x21, 0x04, 0x30, 0x0F, 0x00,
+ 0x00, 0x00, 0x04, 0x03, 0x00, 0x09, 0x00, 0xC0,
+ 0x21, 0x04, 0x30, 0x00, 0x00, 0x00, 0x00, 0x04,
+ 0x03, 0x00, 0x09, 0x00, 0xC4, 0x21, 0x04, 0x30,
+ 0x01, 0x00, 0x00, 0x00, 0x04, 0x03, 0x00, 0x09,
+ 0x00, 0xC8, 0x21, 0x04, 0x30, 0x10, 0x00, 0x00,
+ 0x00, 0x04, 0x03, 0x00, 0x09, 0x00, 0xCC, 0x21,
+ 0x04, 0x30, 0x01, 0x00, 0x00, 0x00, 0x04, 0x03,
+ 0x00, 0x09, 0x00, 0xD0, 0x21, 0x04, 0x30, 0x01,
+ 0x00, 0x00, 0x00, 0x04, 0x03, 0x00, 0x09, 0x00,
+ 0xD4, 0x21, 0x04, 0x30, 0x00, 0x00, 0x00, 0x00,
+ 0x04, 0x03, 0x00, 0x09, 0x00, 0xD8, 0x21, 0x04,
+ 0x30, 0x01, 0x00, 0x00, 0x00, 0x04, 0x03, 0x00,
+ 0x09, 0x00, 0xDC, 0x21, 0x04, 0x30, 0x1F, 0x00,
+ 0x00, 0x00, 0x04, 0x03, 0x00, 0x09, 0x00, 0xE0,
+ 0x21, 0x04, 0x30, 0x0F, 0x00, 0x00, 0x00, 0x04,
+ 0x03, 0x00, 0x09, 0x00, 0xA0, 0x20, 0x04, 0x30,
+ 0xEF, 0xE1, 0x00, 0x00, 0x04, 0x03, 0x00, 0x09,
+ 0x00, 0xA4, 0x20, 0x04, 0x30, 0x00, 0x00, 0x00,
+ 0x00, 0x04, 0x03, 0x00, 0x09, 0x00, 0xA8, 0x20,
+ 0x04, 0x30, 0xFE, 0x21, 0x00, 0x00, 0x04, 0x03,
+ 0x00, 0x09, 0x00, 0xB0, 0x20, 0x04, 0x30, 0x00,
+ 0x00, 0x00, 0x00, 0x04, 0x03, 0x00, 0x09, 0x00,
+ 0xC4, 0x20, 0x04, 0x30, 0x47, 0x00, 0x00, 0x00,
+ 0x04, 0x03, 0x00, 0x09, 0x00, 0xC8, 0x20, 0x04,
+ 0x30, 0x00, 0x00, 0x00, 0x00, 0x04, 0x03, 0x00,
+ 0x09, 0x00, 0xCC, 0x20, 0x04, 0x30, 0x20, 0x00,
+ 0x00, 0x00, 0x04, 0x03, 0x00, 0x09, 0x00, 0x04,
+ 0x00, 0x00, 0x38, 0x00, 0x08, 0x00, 0x00, 0x04,
+ 0x03, 0x00, 0x09, 0x00, 0x08, 0x00, 0x00, 0x38,
+ 0x00, 0x12, 0x00, 0x00, 0x04, 0x03, 0x00, 0x09,
+ 0x00, 0x0C, 0x00, 0x00, 0x38, 0x01, 0x03, 0x02,
+ 0x00, 0x04, 0x03, 0x00, 0x09, 0x00, 0x10, 0x00,
+ 0x00, 0x38, 0x01, 0x07, 0x02, 0x00, 0x04, 0x03,
+ 0x00, 0x09, 0x00, 0x14, 0x00, 0x00, 0x38, 0x0C,
+ 0x0C, 0x8A, 0x00, 0x04, 0x02, 0x00, 0x80, 0x05,
+ 0xFF, 0xF9, 0x87, 0x20, 0x83, 0x48, 0x84, 0x20,
+ 0x83, 0x48, 0x84, 0x20, 0x83, 0x48, 0x84, 0x20,
+ 0x83, 0x48, 0x84, 0x20, 0x83, 0x48, 0x84, 0x20,
+ 0x83, 0x48, 0x84, 0x20, 0x83, 0x48, 0x84, 0x20,
+ 0x83, 0x48, 0x84, 0x20, 0x83, 0x48, 0x84, 0x20,
+ 0x83, 0x48, 0x84, 0x20, 0x85, 0x48, 0x04, 0x20,
+ 0x87, 0x48, 0x04, 0x20, 0x89, 0x48, 0x04, 0x20,
+ 0x8B, 0x48, 0x04, 0x20, 0x8D, 0x48, 0x04, 0x20,
+ 0x8F, 0x48, 0x04, 0x20, 0x91, 0x48, 0x04, 0x20,
+ 0x93, 0x48, 0x04, 0x20, 0x95, 0x48, 0x04, 0x20,
+ 0x97, 0x48, 0x04, 0x20, 0x99, 0x48, 0x04, 0x20,
+ 0x9B, 0x48, 0x04, 0x20, 0x9D, 0x48, 0x04, 0x20,
+ 0x9F, 0x48, 0x04, 0x20, 0xA1, 0x48, 0x04, 0x20,
+ 0xA3, 0x48, 0x04, 0x20, 0xA3, 0x48, 0x04, 0x00,
+ 0x85, 0x5A, 0x04, 0x20, 0x87, 0x5A, 0x04, 0x20,
+ 0x89, 0x5A, 0x04, 0x20, 0x8B, 0x5A, 0x04, 0x20,
+ 0x8D, 0x5A, 0x04, 0x20, 0x8F, 0x5A, 0x04, 0x20,
+ 0x91, 0x5A, 0x04, 0x20, 0x93, 0x5A, 0x04, 0x20,
+ 0x95, 0x5A, 0x04, 0x20, 0x97, 0x5A, 0x04, 0x20,
+ 0x99, 0x5A, 0x04, 0x20, 0x9B, 0x5A, 0x04, 0x20,
+ 0x9D, 0x5A, 0x04, 0x20, 0x9F, 0x5A, 0x04, 0x20,
+ 0xA1, 0x5A, 0x04, 0x20, 0xA3, 0x5A, 0x04, 0x20,
+ 0xA3, 0x5A, 0x04, 0x00, 0x85, 0x6C, 0x04, 0x20,
+ 0x87, 0x6C, 0x04, 0x20, 0x89, 0x6C, 0x04, 0x20,
+ 0x8B, 0x6C, 0x04, 0x20, 0x8D, 0x6C, 0x04, 0x20,
+ 0x8F, 0x6C, 0x04, 0x20, 0x91, 0x6C, 0x04, 0x20,
+ 0x93, 0x6C, 0x04, 0x20, 0x95, 0x6C, 0x04, 0x20,
+ 0x97, 0x6C, 0x04, 0x20, 0x99, 0x6C, 0x04, 0x20,
+ 0x9B, 0x6C, 0x04, 0x20, 0x9D, 0x6C, 0x04, 0x20,
+ 0x9F, 0x6C, 0x04, 0x20, 0xA1, 0x6C, 0x04, 0x20,
+ 0xA3, 0x6C, 0x04, 0x20, 0xA3, 0x6C, 0x04, 0x00,
+ 0x86, 0x48, 0x04, 0x20, 0x88, 0x48, 0x04, 0x20,
+ 0x8A, 0x48, 0x04, 0x20, 0x8C, 0x48, 0x04, 0x20,
+ 0x8E, 0x48, 0x04, 0x20, 0x90, 0x48, 0x04, 0x20,
+ 0x92, 0x48, 0x04, 0x20, 0xF7, 0x48, 0x04, 0x20,
+ 0xF9, 0x48, 0x04, 0x20, 0xFB, 0x48, 0x04, 0x20,
+ 0xFD, 0x48, 0x04, 0x20, 0xFF, 0x48, 0x04, 0x20,
+ 0x01, 0x49, 0x04, 0x20, 0x03, 0x49, 0x04, 0x20,
+ 0x05, 0x49, 0x04, 0x20, 0x07, 0x49, 0x04, 0x20,
+ 0x07, 0x49, 0x04, 0x00, 0x86, 0x5A, 0x04, 0x20,
+ 0x88, 0x5A, 0x04, 0x20, 0x8A, 0x5A, 0x04, 0x20,
+ 0x8C, 0x5A, 0x04, 0x20, 0x8E, 0x5A, 0x04, 0x20,
+ 0x90, 0x5A, 0x04, 0x20, 0x92, 0x5A, 0x04, 0x20,
+ 0xF7, 0x5A, 0x04, 0x20, 0xF9, 0x5A, 0x04, 0x20,
+ 0xFB, 0x5A, 0x04, 0x20, 0xFD, 0x5A, 0x04, 0x20,
+ 0xFF, 0x5A, 0x04, 0x20, 0x01, 0x5B, 0x04, 0x20,
+ 0x03, 0x5B, 0x04, 0x20, 0x05, 0x5B, 0x04, 0x20,
+ 0x07, 0x5B, 0x04, 0x20, 0x07, 0x5B, 0x04, 0x00,
+ 0x86, 0x6C, 0x04, 0x20, 0x88, 0x6C, 0x04, 0x20,
+ 0x8A, 0x6C, 0x04, 0x20, 0x8C, 0x6C, 0x04, 0x20,
+ 0x8E, 0x6C, 0x04, 0x20, 0x90, 0x6C, 0x04, 0x20,
+ 0x92, 0x6C, 0x04, 0x20, 0xF7, 0x6C, 0x04, 0x20,
+ 0xF9, 0x6C, 0x04, 0x20, 0xFB, 0x6C, 0x04, 0x20,
+ 0xFD, 0x6C, 0x04, 0x20, 0xFF, 0x6C, 0x04, 0x20,
+ 0x01, 0x6D, 0x04, 0x20, 0x03, 0x6D, 0x04, 0x20,
+ 0x05, 0x6D, 0x04, 0x20, 0x07, 0x6D, 0x04, 0x20,
+ 0x07, 0x6D, 0x04, 0x00, 0x83, 0x68, 0x84, 0x20,
+ 0x83, 0x68, 0x84, 0x20, 0x83, 0x68, 0x84, 0x20,
+ 0x83, 0x68, 0x84, 0x20, 0x83, 0x68, 0x84, 0x20,
+ 0x83, 0x68, 0x84, 0x20, 0x83, 0x68, 0x84, 0x20,
+ 0x83, 0x68, 0x84, 0x20, 0x83, 0x68, 0x84, 0x20,
+ 0x83, 0x68, 0x84, 0x20, 0x83, 0x68, 0x84, 0x20,
+ 0x83, 0x68, 0x84, 0x20, 0x83, 0x68, 0x84, 0x20,
+ 0x83, 0x68, 0x84, 0x20, 0x83, 0x68, 0x84, 0x20,
+ 0x83, 0x68, 0x84, 0x20, 0x83, 0x68, 0x84, 0x20,
+ 0x83, 0x68, 0x84, 0x20, 0x83, 0x68, 0x84, 0x20,
+ 0x83, 0x68, 0x84, 0x20, 0x83, 0x68, 0x84, 0x20,
+ 0x83, 0x68, 0x84, 0x20, 0x83, 0x68, 0x84, 0x20,
+ 0x83, 0x68, 0x84, 0x20, 0x83, 0x68, 0x84, 0x20,
+ 0x83, 0x68, 0x84, 0x20, 0x83, 0x68, 0x84, 0x20,
+ 0x83, 0x68, 0x84, 0x20, 0x83, 0x68, 0x84, 0x20,
+ 0x83, 0x68, 0x84, 0x20, 0x83, 0x68, 0x84, 0x20,
+ 0x83, 0x68, 0x84, 0x20, 0x83, 0x68, 0x84, 0x20,
+ 0x83, 0x68, 0x84, 0x20, 0x83, 0x68, 0x84, 0x20,
+ 0x83, 0x68, 0x84, 0x20, 0x83, 0x68, 0x84, 0x20,
+ 0x83, 0x68, 0x84, 0x20, 0x83, 0x68, 0x84, 0x20,
+ 0x83, 0x68, 0x84, 0x20, 0x83, 0x68, 0x84, 0x20,
+ 0x83, 0x68, 0x84, 0x20, 0x83, 0x68, 0x84, 0x20,
+ 0x83, 0x68, 0x84, 0x20, 0x83, 0x68, 0x84, 0x20,
+ 0x83, 0x68, 0x84, 0x20, 0x83, 0x68, 0x84, 0x20,
+ 0x83, 0x68, 0x84, 0x20, 0x83, 0x68, 0x84, 0x20,
+ 0x83, 0x68, 0x84, 0x20, 0x83, 0x68, 0x84, 0x20,
+ 0x83, 0x68, 0x84, 0x20, 0x83, 0x68, 0x84, 0x20,
+ 0x83, 0x68, 0x84, 0x20, 0x83, 0x68, 0x84, 0x20,
+ 0x83, 0x68, 0x84, 0x20, 0x83, 0x68, 0x84, 0x20,
+ 0x83, 0x68, 0x84, 0x20, 0x83, 0x68, 0x84, 0x20,
+ 0x83, 0x68, 0x84, 0x20, 0x83, 0x68, 0x84, 0x20,
+ 0x83, 0x68, 0x84, 0x20, 0x83, 0x68, 0x84, 0x20,
+ 0x83, 0x68, 0x84, 0x20, 0x83, 0x68, 0x84, 0x20,
+ 0x83, 0x68, 0x84, 0x20, 0x83, 0x68, 0x84, 0x20,
+ 0x83, 0x68, 0x84, 0x20, 0x83, 0x68, 0x84, 0x20,
+ 0x83, 0x68, 0x84, 0x20, 0x83, 0x68, 0x84, 0x20,
+ 0x83, 0x68, 0x84, 0x20, 0x83, 0x68, 0x84, 0x20,
+ 0x83, 0x68, 0x84, 0x20, 0x83, 0x68, 0x84, 0x20,
+ 0x83, 0x68, 0x84, 0x20, 0x83, 0x68, 0x84, 0x20,
+ 0x83, 0x68, 0x84, 0x20, 0x83, 0x68, 0x84, 0x20,
+ 0x83, 0x68, 0x84, 0x20, 0x83, 0x68, 0x84, 0x20,
+ 0x83, 0x68, 0x84, 0x20, 0x83, 0x68, 0x84, 0x20,
+ 0x83, 0x68, 0x84, 0x20, 0x83, 0x68, 0x84, 0x20,
+ 0x83, 0x68, 0x84, 0x20, 0x83, 0x68, 0x84, 0x20,
+ 0x83, 0x68, 0x84, 0x20, 0x83, 0x68, 0x84, 0x20,
+ 0x83, 0x68, 0x84, 0x20, 0x83, 0x68, 0x84, 0x20,
+ 0x83, 0x68, 0x84, 0x20, 0x83, 0x68, 0x84, 0x20,
+ 0x83, 0x68, 0x84, 0x20, 0x83, 0x68, 0x84, 0x20,
+ 0x83, 0x68, 0x84, 0x20, 0x83, 0x68, 0x84, 0x20,
+ 0x83, 0x68, 0x84, 0x20, 0x83, 0x68, 0x84, 0x20,
+ 0x83, 0x68, 0x84, 0x20, 0x83, 0x68, 0x84, 0x20,
+ 0x83, 0x68, 0x84, 0x20, 0x83, 0x68, 0x84, 0x20,
+ 0x83, 0x68, 0x84, 0x20, 0x83, 0x68, 0x84, 0x20,
+ 0x83, 0x68, 0x84, 0x20, 0x83, 0x68, 0x84, 0x20,
+ 0x83, 0x68, 0x84, 0x20, 0x83, 0x68, 0x84, 0x20,
+ 0x83, 0x68, 0x84, 0x20, 0x83, 0x68, 0x84, 0x20,
+ 0x83, 0x68, 0x84, 0x20, 0x83, 0x68, 0x84, 0x20,
+ 0x83, 0x68, 0x84, 0x20, 0x83, 0x68, 0x84, 0x20,
+ 0x83, 0x68, 0x84, 0x20, 0x83, 0x68, 0x84, 0x20,
+ 0x83, 0x68, 0x84, 0x20, 0x83, 0x68, 0x84, 0x20,
+ 0x83, 0x68, 0x84, 0x20, 0x83, 0x68, 0x84, 0x20,
+ 0x83, 0x68, 0x84, 0x20, 0x83, 0x68, 0x84, 0x20,
+ 0x83, 0x68, 0x84, 0x20, 0x83, 0x68, 0x84, 0x20,
+ 0x83, 0x68, 0x84, 0x20, 0x83, 0x68, 0x84, 0x20,
+ 0x83, 0x68, 0x84, 0x20, 0x83, 0x68, 0x84, 0x20,
+ 0x83, 0x68, 0x84, 0x20, 0x83, 0x68, 0x84, 0x20,
+ 0x83, 0x68, 0x84, 0x20, 0x83, 0x68, 0x84, 0x20,
+ 0x83, 0x68, 0x84, 0x20, 0x83, 0x68, 0x84, 0x20,
+ 0x83, 0x68, 0x84, 0x20, 0x83, 0x68, 0x84, 0x20,
+ 0x83, 0x68, 0x84, 0x20, 0x83, 0x68, 0x84, 0x20,
+ 0x83, 0x68, 0x84, 0x20, 0x83, 0x68, 0x84, 0x20,
+ 0x83, 0x68, 0x84, 0x20, 0x83, 0x68, 0x84, 0x20,
+ 0x83, 0x68, 0x84, 0x20, 0x83, 0x68, 0x84, 0x20,
+ 0x83, 0x68, 0x84, 0x20, 0x83, 0x68, 0x84, 0x20,
+ 0x83, 0x68, 0x84, 0x20, 0x83, 0x68, 0x84, 0x20,
+ 0x83, 0x68, 0x84, 0x20, 0x83, 0x68, 0x84, 0x20,
+ 0x83, 0x68, 0x84, 0x20, 0x83, 0x68, 0x84, 0x20,
+ 0x83, 0x68, 0x84, 0x20, 0x83, 0x68, 0x84, 0x20,
+ 0x83, 0x68, 0x84, 0x20, 0x83, 0x68, 0x84, 0x20,
+ 0x83, 0x68, 0x84, 0x20, 0x83, 0x68, 0x84, 0x20,
+ 0x83, 0x68, 0x84, 0x20, 0x83, 0x68, 0x84, 0x20,
+ 0x83, 0x68, 0x84, 0x20, 0x83, 0x68, 0x84, 0x20,
+ 0x83, 0x68, 0x84, 0x20, 0x83, 0x68, 0x84, 0x20,
+ 0x83, 0x68, 0x84, 0x20, 0x83, 0x68, 0x84, 0x20,
+ 0x83, 0x68, 0x84, 0x20, 0x83, 0x68, 0x84, 0x20,
+ 0x83, 0x68, 0x84, 0x20, 0x83, 0x68, 0x84, 0x20,
+ 0x83, 0x68, 0x84, 0x20, 0x83, 0x68, 0x84, 0x20,
+ 0x83, 0x68, 0x84, 0x20, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x0A, 0x00, 0x08, 0x00, 0x10, 0x03, 0x51, 0x09,
+ 0x10, 0x03, 0x51, 0x09, 0x03, 0x00, 0x09, 0x00,
+ 0x00, 0x20, 0x04, 0x30, 0x80, 0x00, 0x00, 0x00,
+ 0x04, 0x15, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x20, 0x28, 0x00, 0x00,
+};
+
+static unsigned char vfs5011_init_05[] = { /* 2770 B */
+ 0x06, 0x6B, 0x06, 0x6A, 0x76, 0xCC, 0x1C, 0xD0,
+ 0x50, 0xEB, 0x75, 0x10, 0xC8, 0x18, 0x5C, 0x95,
+ 0x15, 0xAE, 0xA8, 0xC8, 0x10, 0xC0, 0xB0, 0x7A,
+ 0xFA, 0x21, 0x96, 0xFA, 0x22, 0x92, 0xAE, 0x78,
+ 0xF8, 0x43, 0x05, 0x6E, 0xB6, 0x66, 0x62, 0xD5,
+ 0x51, 0xEA, 0xF0, 0xE5, 0x39, 0xE9, 0xA1, 0x19,
+ 0x9D, 0x26, 0x80, 0xE0, 0x38, 0xE8, 0x1C, 0xCA,
+ 0x4A, 0xF1, 0xBF, 0xD8, 0x00, 0xD0, 0x34, 0xD9,
+ 0x5D, 0xB6, 0x00, 0xF2, 0x2A, 0xA2, 0xAA, 0x7C,
+ 0xFC, 0x47, 0xDD, 0xB8, 0x60, 0xB0, 0xD0, 0xEF,
+ 0x6F, 0xB4, 0x46, 0x2C, 0xF4, 0x24, 0xBB, 0x7B,
+ 0x04, 0x20, 0x96, 0xC5, 0x1D, 0xAD, 0x32, 0x32,
+ 0x4D, 0x69, 0xDF, 0xA0, 0x7A, 0xAA, 0xB6, 0x60,
+ 0xE0, 0x5B, 0x89, 0xF6, 0x2C, 0xFC, 0x14, 0xC2,
+ 0x42, 0xF9, 0x23, 0x59, 0x81, 0x51, 0x31, 0xEF,
+ 0x6B, 0x80, 0x36, 0x52, 0x8A, 0x3A, 0x5A, 0x64,
+ 0x1B, 0xF7, 0xBD, 0xD4, 0x0C, 0xDC, 0xBC, 0x54,
+ 0xD0, 0x3B, 0x0D, 0x4C, 0x90, 0x10, 0x70, 0x90,
+ 0x14, 0xFF, 0x65, 0x29, 0xF5, 0x75, 0x55, 0xB5,
+ 0x31, 0xDA, 0x88, 0xC5, 0x19, 0x99, 0xF9, 0x39,
+ 0xB9, 0x5A, 0xD0, 0xBC, 0x64, 0xEC, 0x8C, 0xEC,
+ 0x6C, 0x8F, 0x05, 0xC9, 0x11, 0x99, 0xF9, 0x19,
+ 0x99, 0x7A, 0xC2, 0x8E, 0x56, 0xDE, 0xBE, 0x3E,
+ 0xBE, 0x5D, 0xE3, 0xCF, 0x17, 0x9F, 0xFF, 0x5F,
+ 0xDF, 0x3C, 0x82, 0x8E, 0x56, 0xDE, 0xBE, 0xFE,
+ 0x7E, 0x9D, 0x23, 0xCF, 0x17, 0x9F, 0xC9, 0x48,
+ 0xC8, 0xF6, 0x07, 0x4D, 0x04, 0x98, 0xFB, 0x9A,
+ 0x37, 0xEF, 0x55, 0x31, 0x60, 0xDA, 0x38, 0xB1,
+ 0x31, 0xF7, 0xB1, 0xDD, 0x05, 0xB5, 0xE3, 0x62,
+ 0xE2, 0x19, 0xCE, 0xA2, 0x5F, 0x11, 0x8E, 0x6E,
+ 0x08, 0xC0, 0x66, 0x2A, 0xF2, 0x4E, 0x24, 0x01,
+ 0xAA, 0x54, 0x43, 0x01, 0xDA, 0xDB, 0x94, 0x57,
+ 0xB2, 0x40, 0xDE, 0xAF, 0x87, 0x37, 0x61, 0xE0,
+ 0x60, 0x16, 0xA2, 0x4F, 0xA7, 0x14, 0x78, 0xB1,
+ 0x3A, 0x59, 0x78, 0x0C, 0xC5, 0x54, 0x05, 0xC6,
+ 0x8E, 0x57, 0xEA, 0x3D, 0x25, 0x55, 0x41, 0x46,
+ 0xDC, 0x0C, 0x71, 0x3F, 0x81, 0x3A, 0xAA, 0x8F,
+ 0x6B, 0x95, 0x0E, 0x68, 0xAD, 0xED, 0x90, 0xA0,
+ 0x20, 0xFB, 0x7B, 0x56, 0x8E, 0xAF, 0xFC, 0x3F,
+ 0x9E, 0x70, 0xC5, 0x98, 0x72, 0xC1, 0x20, 0xD4,
+ 0x57, 0x05, 0x60, 0x2E, 0x95, 0x35, 0xCC, 0x9F,
+ 0x02, 0x29, 0xA9, 0x84, 0x5C, 0xDD, 0x8B, 0x48,
+ 0xDE, 0xA7, 0x17, 0x1E, 0x49, 0xDC, 0x94, 0x57,
+ 0x75, 0xCC, 0x58, 0x15, 0xFA, 0x49, 0xB5, 0x7F,
+ 0x77, 0x96, 0xB2, 0xC4, 0x08, 0x3A, 0x72, 0xB2,
+ 0xA0, 0x29, 0x91, 0x1D, 0xCD, 0x7D, 0x5B, 0x9A,
+ 0x1A, 0xC1, 0x7B, 0x1D, 0x20, 0x5C, 0x1C, 0x79,
+ 0x9E, 0x45, 0x42, 0x17, 0xCC, 0xD5, 0x37, 0xFB,
+ 0x67, 0x34, 0x81, 0x0C, 0xEC, 0x5F, 0xCD, 0x05,
+ 0x50, 0x87, 0x58, 0xA4, 0x83, 0x03, 0xF2, 0x08,
+ 0x8B, 0xA2, 0x5C, 0xE5, 0xBC, 0x3E, 0x5D, 0x45,
+ 0xC6, 0xF5, 0x4D, 0xE3, 0x76, 0x11, 0xD9, 0x1A,
+ 0x78, 0xFE, 0x1F, 0xC1, 0x73, 0xDF, 0x7F, 0x9F,
+ 0x1F, 0x4C, 0x22, 0xDC, 0x2D, 0x1D, 0xEF, 0x45,
+ 0xE6, 0x31, 0x8E, 0x70, 0xC2, 0x50, 0xA2, 0x38,
+ 0xEE, 0xD5, 0x6B, 0x07, 0xC2, 0x82, 0x4A, 0x89,
+ 0xAB, 0xBA, 0x54, 0x5D, 0x7C, 0xEB, 0x96, 0xA6,
+ 0x26, 0xFD, 0x7D, 0x50, 0x88, 0xA9, 0xFE, 0x3D,
+ 0x3F, 0xED, 0x7F, 0x91, 0x00, 0x95, 0x50, 0xB1,
+ 0x31, 0x4B, 0xC6, 0xA9, 0xF0, 0x72, 0x11, 0xDD,
+ 0x74, 0x2D, 0xB3, 0xCD, 0x87, 0x5D, 0x39, 0x19,
+ 0x91, 0x4A, 0x5E, 0x92, 0xDE, 0xDF, 0x89, 0x4A,
+ 0x0B, 0xEC, 0x59, 0x8D, 0x5E, 0x2E, 0x6E, 0xAE,
+ 0xE6, 0x31, 0x15, 0x62, 0xE7, 0xFD, 0x36, 0x3C,
+ 0x25, 0x6C, 0xB1, 0xF5, 0x08, 0x02, 0x42, 0x9F,
+ 0xEF, 0x34, 0xB4, 0x99, 0x41, 0xFD, 0x88, 0x09,
+ 0xBE, 0x66, 0xE7, 0x69, 0x9D, 0x6A, 0xE8, 0x27,
+ 0x95, 0x4A, 0xDB, 0x95, 0x49, 0xDF, 0x85, 0x67,
+ 0xC7, 0x3D, 0xAA, 0xE4, 0x78, 0xED, 0x90, 0xA0,
+ 0x79, 0xE6, 0xC2, 0xAA, 0x57, 0x65, 0x01, 0xE7,
+ 0x6C, 0x2E, 0x08, 0xF4, 0x58, 0x7A, 0x5E, 0xB9,
+ 0xA3, 0xF0, 0xC6, 0x2B, 0xD2, 0xE0, 0xC4, 0x21,
+ 0xBC, 0x97, 0x78, 0x20, 0x4A, 0xFE, 0xB9, 0xDB,
+ 0x5F, 0xA1, 0xB5, 0x9D, 0x4F, 0xE4, 0x2E, 0x4E,
+ 0x6E, 0xC1, 0xD5, 0xFD, 0x03, 0x09, 0xC3, 0xA3,
+ 0x82, 0x78, 0x6C, 0x44, 0xB9, 0x14, 0x84, 0x44,
+ 0xC4, 0x1F, 0x9F, 0xB2, 0x6A, 0x1A, 0x5A, 0x9A,
+ 0x16, 0xC4, 0xF3, 0xA2, 0x79, 0xF8, 0xA2, 0x61,
+ 0xB0, 0x50, 0xE5, 0xFB, 0x00, 0x3A, 0x9A, 0x7A,
+ 0xFA, 0x69, 0x9A, 0x94, 0x6F, 0x56, 0xB6, 0x01,
+ 0x91, 0xCA, 0x0B, 0x76, 0x2E, 0xF8, 0x88, 0x88,
+ 0x28, 0xF3, 0x77, 0x38, 0x61, 0xA1, 0xA7, 0x47,
+ 0xB6, 0x5B, 0xEE, 0xE2, 0x7E, 0xEE, 0xBE, 0xDF,
+ 0x5B, 0xE1, 0x6B, 0x04, 0xEC, 0xDD, 0xB9, 0x49,
+ 0x78, 0xE2, 0xEC, 0x87, 0x49, 0xD1, 0xB9, 0xFB,
+ 0x50, 0x94, 0x15, 0x71, 0xD5, 0xE4, 0xBA, 0x79,
+ 0xF5, 0x64, 0x5A, 0xDE, 0x36, 0x35, 0x75, 0x55,
+ 0xDD, 0x06, 0x78, 0x51, 0xA8, 0x2F, 0x4C, 0x87,
+ 0x9B, 0x56, 0xB9, 0xDF, 0xB5, 0xC9, 0x57, 0x81,
+ 0xBA, 0x6B, 0x0F, 0xAF, 0x8A, 0x2C, 0xE1, 0x2D,
+ 0xBB, 0xDC, 0x6A, 0x20, 0xB4, 0x0C, 0xCE, 0xAE,
+ 0x2E, 0x50, 0x50, 0x1C, 0x06, 0x93, 0xF7, 0xF7,
+ 0xE7, 0x48, 0x52, 0x57, 0xA9, 0x50, 0x14, 0x71,
+ 0xE1, 0x3A, 0x0D, 0x53, 0x88, 0xBA, 0xF2, 0x20,
+ 0x40, 0x93, 0x25, 0xEB, 0x93, 0xB7, 0x6F, 0xA8,
+ 0xE8, 0x13, 0xA5, 0x01, 0xDF, 0xFD, 0x86, 0x1B,
+ 0x31, 0x41, 0x3D, 0xC8, 0x82, 0x59, 0x11, 0x34,
+ 0x1D, 0xE6, 0x98, 0xB1, 0x65, 0xDE, 0x3E, 0x52,
+ 0xD3, 0xA8, 0xBA, 0xF6, 0x0B, 0xA8, 0xC8, 0xA5,
+ 0x26, 0xF1, 0x4C, 0x85, 0x4F, 0xFF, 0x57, 0xD2,
+ 0x92, 0xD9, 0x1B, 0xEB, 0xAA, 0x3C, 0x15, 0xC2,
+ 0x5F, 0x74, 0x02, 0x4E, 0x96, 0xEE, 0x88, 0xFA,
+ 0x61, 0xE7, 0xFC, 0x92, 0x80, 0x8B, 0x52, 0xA0,
+ 0xC5, 0xB8, 0x2E, 0x5F, 0x77, 0xC7, 0xA7, 0x67,
+ 0x55, 0x2E, 0x99, 0x27, 0xFD, 0x47, 0x85, 0x47,
+ 0xEF, 0x34, 0x5F, 0x22, 0x7A, 0x60, 0x11, 0x71,
+ 0x5D, 0xA6, 0xC0, 0x06, 0xFE, 0x6B, 0x04, 0xC4,
+ 0xEC, 0xB5, 0x0F, 0x68, 0x15, 0xAB, 0xCB, 0x2E,
+ 0xE7, 0x3C, 0x86, 0xC1, 0x3C, 0x82, 0xE2, 0x3F,
+ 0x4F, 0x94, 0x2E, 0x48, 0xF5, 0xE8, 0xA8, 0xA0,
+ 0x65, 0x38, 0x54, 0xC7, 0x1F, 0xAF, 0x62, 0xA1,
+ 0x04, 0x36, 0x7F, 0xE1, 0x3B, 0xAD, 0x2F, 0xED,
+ 0x4A, 0x66, 0x6E, 0x13, 0x43, 0xC1, 0x1D, 0x55,
+ 0x4D, 0xD4, 0xDE, 0xFB, 0x81, 0x33, 0x59, 0x95,
+ 0x1E, 0x7C, 0x8F, 0x41, 0xDB, 0x4E, 0xE6, 0x63,
+ 0x25, 0x2E, 0x67, 0xA6, 0x7D, 0x28, 0xAE, 0x91,
+ 0xC3, 0x1A, 0x8A, 0x24, 0xFE, 0x69, 0xDE, 0xA2,
+ 0x33, 0x00, 0x84, 0x44, 0x62, 0x2A, 0x08, 0x64,
+ 0x5B, 0x02, 0xB6, 0xD0, 0x04, 0xBD, 0x44, 0xC1,
+ 0xC3, 0x5A, 0xC9, 0x6D, 0xF0, 0xC6, 0x61, 0x5E,
+ 0xDE, 0x05, 0xBF, 0xD9, 0xE4, 0x4A, 0x2A, 0xBC,
+ 0x86, 0xA1, 0x1B, 0x6D, 0xD0, 0x7E, 0x1E, 0xD2,
+ 0x69, 0x7F, 0xC3, 0xA3, 0x31, 0x41, 0x8A, 0xD9,
+ 0xF0, 0x6E, 0xDE, 0x5C, 0x7B, 0xCB, 0xA7, 0x4D,
+ 0xE8, 0x2E, 0x98, 0x2C, 0xB1, 0x0D, 0x23, 0x43,
+ 0x1D, 0x45, 0x2A, 0x03, 0x1D, 0x5F, 0xC0, 0x00,
+ 0x80, 0x5B, 0xDB, 0xF6, 0x2E, 0x3C, 0xFC, 0x18,
+ 0x49, 0xAF, 0x1A, 0x97, 0x70, 0xC3, 0x92, 0x65,
+ 0xE6, 0x1C, 0x90, 0xFF, 0x66, 0xE8, 0x8B, 0x8B,
+ 0x2B, 0xF0, 0xC4, 0x8C, 0x5A, 0x58, 0x1A, 0x53,
+ 0x11, 0xC9, 0x57, 0xDB, 0xB8, 0x18, 0xF8, 0xF4,
+ 0x65, 0x6E, 0x14, 0x68, 0x70, 0x7B, 0x3B, 0x1B,
+ 0x93, 0x48, 0x3E, 0x72, 0xAA, 0x36, 0xDC, 0x94,
+ 0xF0, 0xFA, 0x0D, 0x62, 0x08, 0x9A, 0x70, 0x72,
+ 0xF1, 0x0F, 0x58, 0x74, 0xAF, 0x9F, 0x33, 0xE2,
+ 0x82, 0x95, 0x33, 0x8F, 0xEC, 0x4C, 0xEC, 0x97,
+ 0x37, 0x0C, 0xB2, 0xDE, 0x1B, 0x5B, 0x0D, 0x8C,
+ 0x0C, 0x96, 0x16, 0x79, 0xF0, 0x72, 0x11, 0x09,
+ 0x8D, 0x27, 0xA6, 0xC9, 0x83, 0x1E, 0x62, 0x62,
+ 0xC2, 0x19, 0x2D, 0x56, 0x80, 0xF2, 0x8F, 0x19,
+ 0xB0, 0x62, 0x56, 0xF2, 0xD2, 0xF0, 0xBD, 0x61,
+ 0xAA, 0xBD, 0xCB, 0x67, 0x4B, 0x39, 0x04, 0x92,
+ 0x59, 0x1B, 0x3F, 0x3E, 0xFA, 0xCD, 0x81, 0x37,
+ 0x96, 0x74, 0xC1, 0x48, 0xCC, 0x59, 0x81, 0x45,
+ 0x67, 0xD7, 0x43, 0xA3, 0xC1, 0xF3, 0xB9, 0x7A,
+ 0x78, 0x8B, 0x3D, 0xB1, 0x61, 0xD1, 0xF7, 0x36,
+ 0xB6, 0x6D, 0xD7, 0xB1, 0x8C, 0xA6, 0xE6, 0xAE,
+ 0x8B, 0xB0, 0x0E, 0x62, 0x57, 0xED, 0x5F, 0xBB,
+ 0x3B, 0x52, 0xFE, 0x86, 0xFC, 0x21, 0x63, 0x71,
+ 0xEC, 0x61, 0x65, 0xC2, 0xE2, 0x85, 0x4E, 0x8F,
+ 0xD2, 0x02, 0x09, 0x67, 0x17, 0x89, 0x39, 0x99,
+ 0xED, 0xFB, 0x4B, 0xAC, 0xDE, 0x8B, 0x8B, 0x63,
+ 0xC9, 0x34, 0x3A, 0x52, 0x02, 0xE7, 0x25, 0xCE,
+ 0x6C, 0x25, 0xB8, 0xC8, 0xD2, 0x79, 0x4F, 0xEF,
+ 0xF6, 0xED, 0x3B, 0x9B, 0x83, 0xF1, 0xCA, 0x5C,
+ 0x4E, 0xFE, 0x54, 0xD8, 0x08, 0xB8, 0x00, 0xC4,
+ 0xE6, 0x2A, 0x92, 0x3C, 0xF9, 0x1F, 0xDD, 0xD7,
+ 0xAF, 0xD3, 0xC9, 0x2B, 0x75, 0xC5, 0xA5, 0x44,
+ 0xFD, 0x25, 0x21, 0x8E, 0xA9, 0xEF, 0xA4, 0x30,
+ 0xA6, 0x91, 0x22, 0xAB, 0x27, 0xB2, 0x1A, 0xDE,
+ 0xFC, 0x4B, 0xDF, 0x3F, 0x5D, 0x6F, 0x25, 0xE6,
+ 0xE4, 0x17, 0xA1, 0x2D, 0xFD, 0x4D, 0x6B, 0xAA,
+ 0x2A, 0xF1, 0x4B, 0x2D, 0x10, 0x32, 0x72, 0x3A,
+ 0x1F, 0x24, 0x9A, 0xF6, 0xE6, 0x52, 0x8F, 0x4D,
+ 0x6F, 0xD8, 0x4C, 0x88, 0x7A, 0x08, 0x74, 0xE2,
+ 0xC0, 0xD1, 0x6F, 0xE6, 0x67, 0xFF, 0x2E, 0xD7,
+ 0x54, 0x07, 0xE4, 0x20, 0xFC, 0x8E, 0x4E, 0x8E,
+ 0xCC, 0x4D, 0xAD, 0x73, 0xC1, 0x6D, 0xAF, 0x45,
+ 0xE7, 0xDC, 0x62, 0x0E, 0x04, 0x90, 0xF0, 0xC0,
+ 0x60, 0xBB, 0xCF, 0xBE, 0x30, 0x0C, 0xF0, 0x92,
+ 0x3F, 0xF8, 0xF3, 0x9D, 0x20, 0xC7, 0x8F, 0x9D,
+ 0x39, 0xE2, 0x32, 0x7D, 0x9B, 0xC9, 0xB4, 0x23,
+ 0x1F, 0xAA, 0x79, 0x5B, 0xA6, 0xEE, 0x8A, 0xE8,
+ 0x07, 0xFE, 0xE4, 0x92, 0xC2, 0x48, 0xA0, 0x68,
+ 0x08, 0xDB, 0x6D, 0x89, 0xF4, 0xA4, 0xCC, 0x0C,
+ 0x14, 0xCB, 0xF5, 0xCC, 0xB6, 0x6F, 0x2D, 0x0D,
+ 0x85, 0x5E, 0x40, 0x28, 0x52, 0xF8, 0xCF, 0x59,
+ 0xA3, 0x85, 0x35, 0x5A, 0x82, 0x32, 0x52, 0x33,
+ 0xF0, 0x28, 0x2F, 0x01, 0xDA, 0xD3, 0xE4, 0x01,
+ 0x3D, 0xC1, 0xAF, 0xC7, 0xDD, 0x70, 0x47, 0x0B,
+ 0x87, 0x41, 0x07, 0xCA, 0x57, 0xE4, 0x55, 0xD1,
+ 0x52, 0x50, 0x81, 0x08, 0x6A, 0xFD, 0x80, 0xB0,
+ 0x30, 0xEB, 0x6B, 0x46, 0x9E, 0xEF, 0xB8, 0x7B,
+ 0x5A, 0xBA, 0x0F, 0xDF, 0xC5, 0xF7, 0x55, 0x6B,
+ 0xFD, 0x6E, 0xDE, 0xD4, 0x1E, 0x85, 0x5D, 0x97,
+ 0xF5, 0x22, 0xB0, 0x0E, 0xDD, 0x6A, 0xA8, 0x63,
+ 0xE5, 0xAC, 0x11, 0x78, 0x70, 0x6A, 0xCA, 0x9D,
+ 0x37, 0xA5, 0xB1, 0x91, 0x61, 0x33, 0x1F, 0xFA,
+ 0x58, 0x88, 0x37, 0xA9, 0x7A, 0xC2, 0x50, 0xDC,
+ 0x7B, 0x82, 0x78, 0x32, 0xE6, 0x44, 0x39, 0x09,
+ 0x89, 0x52, 0xE8, 0x8E, 0xB3, 0x87, 0xC7, 0x0B,
+ 0x89, 0x4F, 0x09, 0xDD, 0x0F, 0x6D, 0x01, 0xE9,
+ 0xCB, 0x1B, 0xAA, 0x44, 0x97, 0x23, 0x99, 0xF3,
+ 0xD4, 0x27, 0xD7, 0x19, 0x8D, 0x15, 0x57, 0x9C,
+ 0x15, 0x2C, 0x96, 0xDE, 0xF4, 0x4F, 0x27, 0x15,
+ 0xD9, 0x25, 0x71, 0x51, 0xAC, 0x3E, 0x12, 0xF4,
+ 0x78, 0xB1, 0x1A, 0x86, 0x52, 0xE0, 0x9D, 0xAD,
+ 0x95, 0x44, 0x50, 0x30, 0xC0, 0xA2, 0xC9, 0x0E,
+ 0x0C, 0xDC, 0x6F, 0xD3, 0xA1, 0xD1, 0x36, 0xDC,
+ 0x40, 0x39, 0xC3, 0x87, 0x7D, 0xC6, 0xAF, 0x8D,
+ 0x01, 0xFE, 0xBA, 0xDD, 0x0D, 0x4F, 0x63, 0x84,
+ 0xE6, 0x71, 0xE2, 0xAC, 0x38, 0xAE, 0xC2, 0x10,
+ 0x8D, 0xA6, 0x1C, 0x72, 0xB7, 0xF7, 0x9B, 0x59,
+ 0xC4, 0xEF, 0x6F, 0x42, 0x9A, 0x0B, 0x5D, 0x9E,
+ 0x9C, 0x65, 0xD3, 0xFE, 0x11, 0xA2, 0x40, 0x98,
+ 0x4F, 0xA5, 0x21, 0x4E, 0x3A, 0xF2, 0x37, 0xCA,
+ 0x6F, 0x2C, 0x98, 0x56, 0xE7, 0x75, 0xB9, 0xA3,
+ 0xAB, 0x4A, 0x74, 0x10, 0x28, 0x90, 0xF0, 0xB8,
+ 0x9B, 0xA0, 0x1E, 0x72, 0x32, 0x80, 0x62, 0x81,
+ 0x04, 0x7D, 0xA2, 0xEC, 0xD4, 0x6C, 0x0C, 0x64,
+ 0xE6, 0x9F, 0x33, 0x08, 0x86, 0x5C, 0xC1, 0xA0,
+ 0x65, 0xBD, 0xBA, 0x92, 0x49, 0x40, 0x44, 0x21,
+ 0x0A, 0xF6, 0x5D, 0xC1, 0x19, 0xA9, 0xC9, 0xA8,
+ 0x6B, 0xB3, 0xC4, 0xEA, 0x31, 0x48, 0x7C, 0x19,
+ 0x33, 0xCF, 0xA1, 0xCF, 0xC5, 0x68, 0x5F, 0xC9,
+ 0x34, 0x11, 0xE1, 0x7B, 0x5C, 0xEC, 0xBA, 0x3B,
+ 0xBB, 0x6C, 0xD0, 0x9D, 0x73, 0xC0, 0xDC, 0xF0,
+ 0xC8, 0x11, 0x26, 0x74, 0xAF, 0xAD, 0xE6, 0x05,
+ 0x0D, 0x3E, 0x48, 0x9F, 0x57, 0x07, 0x6F, 0xAF,
+ 0x87, 0x5E, 0x4A, 0xEC, 0x6C, 0x39, 0xFE, 0x19,
+ 0x84, 0xAF, 0x2F, 0x02, 0xDA, 0x76, 0xCE, 0x89,
+ 0x9B, 0x44, 0xD3, 0xF9, 0x22, 0x8F, 0x1F, 0x72,
+ 0xF0, 0x0E, 0x0E, 0x47, 0xB2, 0x08, 0x75, 0x45,
+ 0xC5, 0x1E, 0x9E, 0xB3, 0x6B, 0x76, 0x14, 0xB1,
+ 0x31, 0xEA, 0x50, 0x3E, 0xFB, 0xBB, 0xED, 0x6C,
+ 0xEC, 0x17, 0x03, 0x4F, 0xB2, 0xE0, 0xA7, 0x56,
+ 0xED, 0x35, 0x1B, 0x74, 0x0C, 0x34, 0x15, 0x57,
+ 0x9E, 0x44, 0x50, 0x75, 0xAD, 0x36, 0xF4, 0xD1,
+ 0xB1, 0x4D, 0x4A, 0x11, 0xCA, 0xF8, 0x9A, 0x5F,
+ 0x2D, 0xF4, 0x45, 0xFB, 0x21, 0x97, 0x35, 0xF7,
+ 0x7F, 0x4C, 0xF9, 0x07, 0xDD, 0x69, 0x9B, 0x15,
+ 0x91, 0xC8, 0x30, 0x59, 0x23, 0xDD, 0xBF, 0xDF,
+ 0xF7, 0x6D, 0x79, 0x5B, 0x80, 0x92, 0xF0, 0x39,
+ 0x4B, 0xDE, 0x6F, 0xA1, 0x32, 0xA4, 0x66, 0xE8,
+ 0x61, 0x78, 0x80, 0xE4, 0xEE, 0x10, 0x76, 0x66,
+ 0x36, 0x99, 0xEF, 0x43, 0xEF, 0x9D, 0xB6, 0x51,
+ 0x03, 0x93, 0x0D, 0xCB, 0xCF, 0xAF, 0x1E, 0xFF,
+ 0xAD, 0x3D, 0xAF, 0xDE, 0xF6, 0x46, 0x10, 0x91,
+ 0x11, 0x07, 0xB3, 0xD3, 0x06, 0xAD, 0xAE, 0xD3,
+ 0x55, 0xB9, 0x3B, 0x26, 0xD5, 0x31, 0x61, 0xE5,
+ 0xA5, 0x65, 0x97, 0xBB, 0xE2, 0x13, 0x74, 0xD0,
+ 0x56, 0xA6, 0xA3, 0x1D, 0xC7, 0x77, 0x0C, 0x0E,
+ 0x12, 0xF1, 0xEA, 0x8B, 0x78, 0x73, 0xF1, 0x3D,
+ 0xBD, 0xB4, 0x0E, 0x63, 0x90, 0xEC, 0x66, 0x0C,
+ 0x56, 0x27, 0xC6, 0x31, 0x07, 0x6A, 0x00, 0x6D,
+ 0xE0, 0x86, 0x34, 0x7D, 0xC5, 0x5D, 0xF0, 0x32,
+ 0x0F, 0xD2, 0x68, 0x09, 0x91, 0xC0, 0xE1, 0x26,
+ 0xC2, 0x15, 0xB8, 0x16, 0x1C, 0xAE, 0xCE, 0x15,
+ 0x23, 0x28, 0x44, 0xE8, 0xE0, 0x81, 0x81, 0xDD,
+ 0xA3, 0x55, 0xEE, 0x10, 0xC4, 0x74, 0x3F, 0x44,
+ 0x54, 0x15, 0x63, 0x9F, 0xD6, 0x06, 0xFC, 0x1E,
+ 0x1C, 0xCB, 0x7C, 0x3B, 0x2F, 0x1F, 0xF5, 0xF5,
+ 0xF5, 0xAF, 0x79, 0x9F, 0x65, 0x82, 0x79, 0x5B,
+ 0xC6, 0xED, 0x76, 0x17, 0xD2, 0x92, 0xFE, 0x3C,
+ 0xA1, 0x8A, 0x0A, 0x07, 0xDF, 0xAF, 0xEF, 0x2F,
+ 0xEE, 0x7C, 0xC9, 0x04, 0x94, 0x27, 0x66, 0xE1,
+ 0x62, 0xEB, 0xFD, 0x90, 0x1A, 0xC8, 0x29, 0x29,
+ 0x89, 0x52, 0x76, 0x38, 0x60, 0x10, 0x50, 0x90,
+ 0xB0, 0xF2, 0x64, 0x9A, 0x20, 0x10, 0xB0, 0x50,
+ 0xD0, 0x89, 0x1B, 0xF6, 0xEE, 0x7E, 0x1E, 0x8E,
+ 0x86, 0x7D, 0x49, 0x41, 0x18, 0xCD, 0x8F, 0x6A,
+ 0xD7, 0x06, 0xA6, 0x80, 0x54, 0x5C, 0x16, 0x6F,
+ 0xEE, 0x39, 0x84, 0x08, 0xB1, 0x01, 0xB3, 0xD3,
+ 0x53, 0x59, 0xD8, 0xB7, 0xAF, 0x3F, 0x5F, 0x5D,
+ 0xFF, 0xA4, 0xD2, 0x9E, 0x46, 0xA6, 0x0A, 0xEA,
+ 0xB8, 0x7E, 0xC6, 0x68, 0xD2, 0xE2, 0x24, 0xF9,
+ 0x5C, 0x25, 0x33, 0xA3, 0xB9, 0x28, 0x48, 0x48,
+ 0xE8, 0x33, 0x77, 0x39, 0x6B, 0x2B, 0xC3, 0x42,
+ 0x62, 0x46, 0xE0, 0x0B, 0xCC, 0x8C, 0x2C, 0xCC,
+ 0x4C, 0xDC, 0xD1, 0x3F, 0xC5, 0xF9, 0x1B, 0xB7,
+ 0x37, 0x2E, 0x54, 0x3C, 0x33, 0xA8, 0x17, 0x86,
+ 0x4C, 0x94, 0xC2, 0x48, 0x83, 0x23, 0x63, 0xA3,
+ 0xA1, 0x5F, 0xED, 0x61, 0xB1, 0x01, 0x77, 0xBD,
+ 0x3A, 0xED, 0x55, 0xF8, 0x1B, 0xA8, 0xB4, 0x9C,
+ 0x10, 0x81, 0x4B, 0x1E, 0x06, 0x96, 0xF6, 0xE4,
+ 0x40, 0x1D, 0x6B, 0x27, 0xFF, 0xDF, 0x22, 0xF2,
+ 0xD2, 0x90, 0x06, 0xF8, 0x44, 0x72, 0xD2, 0x32,
+ 0xB2, 0x9B, 0x09, 0xE4, 0xFC, 0x6C, 0x0C, 0x4C,
+ 0x33, 0xF8, 0xBC, 0xB4, 0xED, 0x9D, 0xDD, 0x1D,
+ 0x4F, 0xF0, 0xC0, 0x6C, 0x94, 0x24, 0x8C, 0x40,
+ 0x68, 0x90, 0xD4, 0xB4, 0x6C, 0x6E, 0x02, 0xC3,
+ 0x81, 0x96, 0x22, 0xCE, 0xAD, 0x0C, 0x9C, 0xE7,
+ 0x47, 0x4E, 0xF4, 0x98, 0x82, 0x3E, 0x5F, 0x7D,
+ 0x9F, 0xC5, 0xF3, 0x53, 0x9A, 0xFA, 0x56, 0xB6,
+ 0xD3, 0xE0, 0xA9, 0x4D, 0xA6, 0x3B, 0x51, 0x19,
+ 0x91, 0xE7, 0x52, 0xDE, 0x0E, 0xBE, 0xC3, 0xF3,
+ 0x73, 0xA8, 0x12, 0x74, 0x49, 0xAD, 0xED, 0xAB,
+ 0xE6, 0xC2, 0xFC, 0xD5, 0xED, 0x55, 0x35, 0xE3,
+ 0x19, 0x3D, 0x4D, 0xC1, 0xE6, 0x56, 0x00, 0x81,
+ 0x01, 0x7B, 0x86, 0xE9, 0x80, 0x7C, 0x1F, 0x12,
+ 0x90, 0x2E, 0x70, 0x38, 0x51, 0xAF, 0xCC, 0x2C,
+ 0x86, 0xFD, 0xEA, 0xCB, 0x10, 0x6D, 0x0F, 0xAA,
+ 0xCD, 0x32, 0x35, 0x09, 0xD2, 0x42, 0x18, 0x78,
+ 0x3A, 0x22, 0x84, 0x49, 0xDE, 0x6D, 0x01, 0xC3,
+ 0x6A, 0xB2, 0x2D, 0x52, 0xA3, 0x30, 0x79, 0x8A,
+ 0xEF, 0xD1, 0x43, 0x9E, 0x14, 0xA7, 0xF7, 0x0D,
+ 0x2D, 0x34, 0x41, 0x3D, 0x44, 0xA5, 0xC6, 0xE3,
+ 0x87, 0x78, 0xC2, 0xA7, 0x4F, 0xC5, 0x05, 0xF7,
+ 0xB4, 0x7F, 0xE2, 0x17, 0xE6, 0x55, 0x1C, 0xCF,
+ 0xC4, 0x2C, 0xFC, 0x09, 0x25, 0x38, 0x5B, 0x29,
+ 0x09, 0x77, 0xED, 0xCD, 0xF0, 0x73, 0x3B, 0x5A,
+ 0x89, 0x51, 0x56, 0x6E, 0xB5, 0xC7, 0x64, 0x80,
+ 0x65, 0x5C, 0xCE, 0x13, 0x9D, 0x2E, 0x7E, 0x84,
+ 0xA4, 0xDE, 0x3D, 0x52, 0xB8, 0xCB, 0x8F, 0x82,
+ 0x01, 0x3F, 0x6A, 0x22, 0x4B, 0xA3, 0xC0, 0x30,
+ 0x8A, 0xF1, 0xE6, 0xDD, 0x06, 0x7B, 0x18, 0xBD,
+ 0xD8, 0x27, 0x20, 0x16, 0xCD, 0x4D, 0x17, 0x77,
+ 0x56, 0xD4, 0x61, 0xC0, 0x1B, 0x0E, 0x8A, 0x6E,
+ 0x5F, 0xD8, 0x6D, 0x31, 0xD3, 0xC3, 0x02, 0x99,
+ 0x1A, 0x0C, 0xB9, 0x70, 0x4B, 0xDF, 0x8F, 0x65,
+ 0x45, 0x83, 0xC5, 0xA9, 0x71, 0xC1, 0xBB, 0x7A,
+ 0xFA, 0x21, 0x97, 0xFB, 0x23, 0x93, 0x7F, 0xB2,
+ 0x30, 0x8B, 0xA9, 0xD3, 0x0B, 0xDB, 0xA6, 0x66,
+ 0xEC, 0x37, 0x03, 0x6B, 0x30, 0x84, 0x44, 0x97,
+ 0x15, 0xAE, 0x19, 0x75, 0xAD, 0x1D, 0x01, 0xD7,
+ 0x57, 0xEC, 0x26, 0x5C, 0x84, 0x54, 0x9C, 0x4A,
+ 0xCA, 0x71, 0x4F, 0x35, 0xED, 0x3D, 0xD5, 0x03,
+ 0x83, 0x38, 0x22, 0x58, 0x80, 0x50, 0x30, 0xF0,
+ 0x70, 0xAB, 0x1D, 0x71, 0xA9, 0x19, 0x79, 0xB9,
+ 0x39, 0xE2, 0x54, 0x38, 0xE0, 0x50, 0x30, 0xF0,
+ 0x70, 0xAB, 0x1D, 0x71, 0xA9, 0x19, 0x79, 0xB9,
+ 0x39, 0xE2, 0x54, 0x38, 0xE0, 0x50, 0x30, 0xF0,
+ 0x70, 0xAB, 0x1D, 0x71, 0xA9, 0x19, 0x79, 0xB9,
+ 0x39, 0xE2, 0x7C, 0x19, 0xC1, 0x11, 0x55, 0x9C,
+ 0x1C, 0xA7, 0x03, 0x5F, 0x87, 0x37, 0x97, 0x41,
+ 0xC1, 0x7A, 0x7C, 0x10, 0xC8, 0x78, 0x64, 0xA3,
+ 0x23, 0x98, 0x82, 0xE3, 0x39, 0xE9, 0x79, 0xBE,
+ 0x3E, 0x85, 0xC3, 0xA2, 0x78, 0xA8, 0xB8, 0x76,
+ 0xF4, 0x4F, 0xF1, 0x92, 0x48, 0x98, 0x44, 0x83,
+ 0x03, 0xB8, 0x86, 0xF9, 0x23, 0xF3, 0x3F, 0xEA,
+ 0x68, 0xD3, 0x53, 0x7E, 0xA6, 0x97, 0x45, 0x80,
+ 0xB1, 0xDA, 0x69, 0xA7, 0xDF, 0x6C, 0x9D, 0xEC,
+ 0x69, 0x10, 0xED, 0x81, 0xDB, 0x02, 0x62, 0xC7,
+ 0x46, 0x9D, 0x0E, 0x60, 0xB8, 0x2D, 0x49, 0x89,
+ 0xA8, 0xC0, 0x73, 0xAE, 0xC2, 0x77, 0xF2, 0xA3,
+ 0x04, 0xC2, 0x84, 0xE8, 0x30, 0x80, 0xD6, 0x57,
+ 0xD7, 0x3D, 0x3E, 0x57, 0xAE, 0xA8, 0xCD, 0x24,
+ 0x77, 0xB1, 0xF7, 0x9B, 0x43, 0xF3, 0xA5, 0x24,
+ 0xA4, 0xCE, 0xC0, 0xA9, 0x40, 0x4B, 0x2E, 0xCF,
+ 0xF3, 0x2D, 0x1A, 0xCC, 0x11, 0x30, 0xE7, 0x22,
+ 0x03, 0x61, 0xD2, 0x17, 0x16, 0x24, 0x2D, 0xFD,
+ 0x54, 0xAC, 0xA3, 0x56, 0x93, 0xD3, 0x85, 0x04,
+ 0x84, 0x6E, 0x6D, 0x04, 0xFD, 0xF0, 0x95, 0x7C,
+ 0x6F, 0xA9, 0xEF, 0x83, 0x5B, 0xEB, 0x8B, 0x4B,
+ 0xCB, 0x10, 0xA6, 0xCA, 0x12, 0xA2, 0xC2, 0x02,
+ 0x82, 0x59, 0xEE, 0x82, 0x5E, 0xEE, 0x76, 0xA0,
+ 0x22, 0x99,
+};
+
+static unsigned char vfs5011_init_06[] = { /* 2855 B */
+ 0x02, 0xB0, 0x00, 0x62, 0x00, 0x03, 0x00, 0x09,
+ 0x00, 0x04, 0x20, 0x04, 0x30, 0x00, 0x00, 0x00,
+ 0x00, 0x04, 0x03, 0x00, 0x09, 0x00, 0x18, 0x20,
+ 0x04, 0x30, 0x01, 0x80, 0x64, 0x00, 0x04, 0x03,
+ 0x00, 0x09, 0x00, 0x20, 0x20, 0x04, 0x30, 0x08,
+ 0x00, 0x80, 0x00, 0x04, 0x03, 0x00, 0x09, 0x00,
+ 0x24, 0x20, 0x04, 0x30, 0x00, 0x00, 0xFF, 0x01,
+ 0x04, 0x03, 0x00, 0x09, 0x00, 0x2C, 0x20, 0x04,
+ 0x30, 0x01, 0x00, 0x00, 0x00, 0x04, 0x03, 0x00,
+ 0x09, 0x00, 0x40, 0x20, 0x04, 0x30, 0xFF, 0x03,
+ 0x00, 0x00, 0x04, 0x03, 0x00, 0x09, 0x00, 0x44,
+ 0x20, 0x04, 0x30, 0xE6, 0x03, 0x00, 0x00, 0x04,
+ 0x03, 0x00, 0x09, 0x00, 0x48, 0x20, 0x04, 0x30,
+ 0xE7, 0x03, 0x00, 0x00, 0x04, 0x03, 0x00, 0x09,
+ 0x00, 0x4C, 0x20, 0x04, 0x30, 0xE8, 0x03, 0x00,
+ 0x00, 0x04, 0x03, 0x00, 0x09, 0x00, 0x54, 0x20,
+ 0x04, 0x30, 0x00, 0x92, 0x01, 0x00, 0x04, 0x03,
+ 0x00, 0x09, 0x00, 0x00, 0x21, 0x04, 0x30, 0x00,
+ 0x00, 0x00, 0x00, 0x04, 0x03, 0x00, 0x09, 0x00,
+ 0x04, 0x21, 0x04, 0x30, 0x01, 0x00, 0x00, 0x00,
+ 0x04, 0x03, 0x00, 0x09, 0x00, 0x08, 0x21, 0x04,
+ 0x30, 0x01, 0x00, 0x00, 0x00, 0x04, 0x03, 0x00,
+ 0x09, 0x00, 0x0C, 0x21, 0x04, 0x30, 0x01, 0x00,
+ 0x00, 0x00, 0x04, 0x03, 0x00, 0x09, 0x00, 0x10,
+ 0x21, 0x04, 0x30, 0x01, 0x00, 0x00, 0x00, 0x04,
+ 0x03, 0x00, 0x09, 0x00, 0x14, 0x21, 0x04, 0x30,
+ 0x01, 0x00, 0x00, 0x00, 0x04, 0x03, 0x00, 0x09,
+ 0x00, 0x18, 0x21, 0x04, 0x30, 0x01, 0x00, 0x00,
+ 0x00, 0x04, 0x03, 0x00, 0x09, 0x00, 0x1C, 0x21,
+ 0x04, 0x30, 0x1F, 0x00, 0x00, 0x00, 0x04, 0x03,
+ 0x00, 0x09, 0x00, 0x20, 0x21, 0x04, 0x30, 0x01,
+ 0x00, 0x00, 0x00, 0x04, 0x03, 0x00, 0x09, 0x00,
+ 0x40, 0x21, 0x04, 0x30, 0x00, 0x00, 0x00, 0x00,
+ 0x04, 0x03, 0x00, 0x09, 0x00, 0x44, 0x21, 0x04,
+ 0x30, 0x01, 0x00, 0x00, 0x00, 0x04, 0x03, 0x00,
+ 0x09, 0x00, 0x48, 0x21, 0x04, 0x30, 0x01, 0x00,
+ 0x00, 0x00, 0x04, 0x03, 0x00, 0x09, 0x00, 0x4C,
+ 0x21, 0x04, 0x30, 0x01, 0x00, 0x00, 0x00, 0x04,
+ 0x03, 0x00, 0x09, 0x00, 0x50, 0x21, 0x04, 0x30,
+ 0x01, 0x00, 0x00, 0x00, 0x04, 0x03, 0x00, 0x09,
+ 0x00, 0x54, 0x21, 0x04, 0x30, 0x01, 0x00, 0x00,
+ 0x00, 0x04, 0x03, 0x00, 0x09, 0x00, 0x58, 0x21,
+ 0x04, 0x30, 0x01, 0x00, 0x00, 0x00, 0x04, 0x03,
+ 0x00, 0x09, 0x00, 0x5C, 0x21, 0x04, 0x30, 0x1F,
+ 0x00, 0x00, 0x00, 0x04, 0x03, 0x00, 0x09, 0x00,
+ 0x60, 0x21, 0x04, 0x30, 0x01, 0x00, 0x00, 0x00,
+ 0x04, 0x03, 0x00, 0x09, 0x00, 0x80, 0x21, 0x04,
+ 0x30, 0x00, 0x00, 0x00, 0x00, 0x04, 0x03, 0x00,
+ 0x09, 0x00, 0x84, 0x21, 0x04, 0x30, 0x01, 0x00,
+ 0x00, 0x00, 0x04, 0x03, 0x00, 0x09, 0x00, 0x88,
+ 0x21, 0x04, 0x30, 0x01, 0x00, 0x00, 0x00, 0x04,
+ 0x03, 0x00, 0x09, 0x00, 0x8C, 0x21, 0x04, 0x30,
+ 0x01, 0x00, 0x00, 0x00, 0x04, 0x03, 0x00, 0x09,
+ 0x00, 0x90, 0x21, 0x04, 0x30, 0x01, 0x00, 0x00,
+ 0x00, 0x04, 0x03, 0x00, 0x09, 0x00, 0x94, 0x21,
+ 0x04, 0x30, 0x01, 0x00, 0x00, 0x00, 0x04, 0x03,
+ 0x00, 0x09, 0x00, 0x98, 0x21, 0x04, 0x30, 0x01,
+ 0x00, 0x00, 0x00, 0x04, 0x03, 0x00, 0x09, 0x00,
+ 0x9C, 0x21, 0x04, 0x30, 0x1F, 0x00, 0x00, 0x00,
+ 0x04, 0x03, 0x00, 0x09, 0x00, 0xA0, 0x21, 0x04,
+ 0x30, 0x01, 0x00, 0x00, 0x00, 0x04, 0x03, 0x00,
+ 0x09, 0x00, 0xC0, 0x21, 0x04, 0x30, 0x00, 0x00,
+ 0x00, 0x00, 0x04, 0x03, 0x00, 0x09, 0x00, 0xC4,
+ 0x21, 0x04, 0x30, 0x01, 0x00, 0x00, 0x00, 0x04,
+ 0x03, 0x00, 0x09, 0x00, 0xC8, 0x21, 0x04, 0x30,
+ 0x01, 0x00, 0x00, 0x00, 0x04, 0x03, 0x00, 0x09,
+ 0x00, 0xCC, 0x21, 0x04, 0x30, 0x01, 0x00, 0x00,
+ 0x00, 0x04, 0x03, 0x00, 0x09, 0x00, 0xD0, 0x21,
+ 0x04, 0x30, 0x01, 0x00, 0x00, 0x00, 0x04, 0x03,
+ 0x00, 0x09, 0x00, 0xD4, 0x21, 0x04, 0x30, 0x01,
+ 0x00, 0x00, 0x00, 0x04, 0x03, 0x00, 0x09, 0x00,
+ 0xD8, 0x21, 0x04, 0x30, 0x01, 0x00, 0x00, 0x00,
+ 0x04, 0x03, 0x00, 0x09, 0x00, 0xDC, 0x21, 0x04,
+ 0x30, 0x1F, 0x00, 0x00, 0x00, 0x04, 0x03, 0x00,
+ 0x09, 0x00, 0xE0, 0x21, 0x04, 0x30, 0x01, 0x00,
+ 0x00, 0x00, 0x04, 0x03, 0x00, 0x09, 0x00, 0xA0,
+ 0x20, 0x04, 0x30, 0xEF, 0xE1, 0x00, 0x00, 0x04,
+ 0x03, 0x00, 0x09, 0x00, 0xA4, 0x20, 0x04, 0x30,
+ 0x00, 0x00, 0x00, 0x00, 0x04, 0x03, 0x00, 0x09,
+ 0x00, 0xB0, 0x20, 0x04, 0x30, 0x00, 0x00, 0x00,
+ 0x00, 0x04, 0x03, 0x00, 0x09, 0x00, 0xC4, 0x20,
+ 0x04, 0x30, 0x14, 0x00, 0x00, 0x00, 0x04, 0x03,
+ 0x00, 0x09, 0x00, 0xC8, 0x20, 0x04, 0x30, 0x00,
+ 0x00, 0x00, 0x00, 0x04, 0x03, 0x00, 0x09, 0x00,
+ 0xCC, 0x20, 0x04, 0x30, 0x20, 0x00, 0x00, 0x00,
+ 0x04, 0x03, 0x00, 0x09, 0x00, 0x50, 0x20, 0x04,
+ 0x30, 0x00, 0x02, 0xA8, 0x02, 0x04, 0x03, 0x00,
+ 0x09, 0x00, 0xA8, 0x20, 0x04, 0x30, 0xFE, 0x21,
+ 0x00, 0x00, 0x04, 0x03, 0x00, 0x09, 0x00, 0x04,
+ 0x00, 0x00, 0x38, 0x00, 0x07, 0x00, 0x00, 0x04,
+ 0x03, 0x00, 0x09, 0x00, 0x08, 0x00, 0x00, 0x38,
+ 0x00, 0x15, 0x00, 0x00, 0x04, 0x03, 0x00, 0x09,
+ 0x00, 0x0C, 0x00, 0x00, 0x38, 0x01, 0x03, 0x02,
+ 0x00, 0x04, 0x03, 0x00, 0x09, 0x00, 0x10, 0x00,
+ 0x00, 0x38, 0x01, 0x07, 0x02, 0x00, 0x04, 0x03,
+ 0x00, 0x09, 0x00, 0x14, 0x00, 0x00, 0x38, 0x0C,
+ 0x0C, 0x05, 0x00, 0x04, 0x02, 0x00, 0x80, 0x05,
+ 0xFF, 0x83, 0x07, 0x20, 0x5F, 0x82, 0x07, 0x20,
+ 0xFF, 0x83, 0x07, 0x20, 0x5F, 0x82, 0x07, 0x20,
+ 0xFF, 0x83, 0x07, 0x20, 0x5F, 0x82, 0x07, 0x20,
+ 0xFF, 0x83, 0x07, 0x20, 0x5F, 0x82, 0x07, 0x20,
+ 0xFF, 0x83, 0x07, 0x20, 0x5F, 0x82, 0x07, 0x20,
+ 0xFF, 0x8B, 0x07, 0x20, 0x60, 0x8A, 0x07, 0x20,
+ 0xFF, 0x93, 0x07, 0x20, 0x61, 0x92, 0x07, 0x20,
+ 0xFF, 0x9B, 0x07, 0x20, 0x62, 0x9A, 0x07, 0x20,
+ 0xFF, 0xA3, 0x07, 0x20, 0x63, 0xA2, 0x07, 0x20,
+ 0xFF, 0xAB, 0x07, 0x20, 0x64, 0xAA, 0x07, 0x20,
+ 0xFF, 0xB3, 0x07, 0x20, 0x65, 0xB2, 0x07, 0x20,
+ 0xFF, 0xBB, 0x07, 0x20, 0x66, 0xBA, 0x07, 0x20,
+ 0xFF, 0xC3, 0x07, 0x20, 0x67, 0xC2, 0x07, 0x20,
+ 0xFF, 0xCB, 0x07, 0x20, 0x68, 0xCA, 0x07, 0x20,
+ 0xFF, 0xD3, 0x07, 0x20, 0x69, 0xD2, 0x07, 0x20,
+ 0xFF, 0xDB, 0x07, 0x20, 0x6A, 0xDA, 0x07, 0x20,
+ 0xFF, 0xE3, 0x07, 0x20, 0x6B, 0xE2, 0x07, 0x20,
+ 0xFF, 0xEB, 0x07, 0x20, 0x6C, 0xEA, 0x07, 0x20,
+ 0xFF, 0xF3, 0x07, 0x20, 0x6D, 0xF2, 0x07, 0x20,
+ 0xFF, 0xFB, 0x07, 0x20, 0x6E, 0xFA, 0x07, 0x20,
+ 0xFF, 0x85, 0x07, 0x20, 0x6F, 0x84, 0x07, 0x20,
+ 0xFF, 0x8D, 0x07, 0x20, 0x70, 0x8C, 0x07, 0x20,
+ 0xFF, 0x95, 0x07, 0x20, 0x71, 0x94, 0x07, 0x20,
+ 0xFF, 0x9D, 0x07, 0x20, 0x72, 0x9C, 0x07, 0x20,
+ 0xFF, 0xA5, 0x07, 0x20, 0x73, 0xA4, 0x07, 0x20,
+ 0xFF, 0xAD, 0x07, 0x20, 0x74, 0xAC, 0x07, 0x20,
+ 0xFF, 0xB5, 0x07, 0x20, 0x75, 0xB4, 0x07, 0x20,
+ 0xFF, 0xBD, 0x07, 0x20, 0x76, 0xBC, 0x07, 0x20,
+ 0xFF, 0xC5, 0x07, 0x20, 0x77, 0xC4, 0x07, 0x20,
+ 0xFF, 0xCD, 0x07, 0x20, 0x78, 0xCC, 0x07, 0x20,
+ 0xFF, 0xD5, 0x07, 0x20, 0x79, 0xD4, 0x07, 0x20,
+ 0xFF, 0xDD, 0x07, 0x20, 0x7A, 0xDC, 0x07, 0x20,
+ 0xFF, 0xE5, 0x07, 0x20, 0x7B, 0xE4, 0x07, 0x20,
+ 0xFF, 0xED, 0x07, 0x20, 0x7C, 0xEC, 0x07, 0x20,
+ 0xFF, 0xF5, 0x07, 0x20, 0x7D, 0xF4, 0x07, 0x20,
+ 0xFF, 0xFD, 0x07, 0x20, 0x7E, 0xFC, 0x07, 0x20,
+ 0xFF, 0x87, 0x07, 0x20, 0x7F, 0x86, 0x07, 0x20,
+ 0xFF, 0x8F, 0x07, 0x20, 0x80, 0x8E, 0x07, 0x20,
+ 0xFF, 0x97, 0x07, 0x20, 0x81, 0x96, 0x07, 0x20,
+ 0xFF, 0x9F, 0x07, 0x20, 0x82, 0x9E, 0x07, 0x20,
+ 0xFF, 0xA7, 0x07, 0x20, 0x83, 0xA6, 0x07, 0x20,
+ 0xFF, 0xAF, 0x07, 0x20, 0x84, 0xAE, 0x07, 0x20,
+ 0xFF, 0xB7, 0x07, 0x20, 0x85, 0xB6, 0x07, 0x20,
+ 0xFF, 0xBF, 0x07, 0x20, 0x86, 0xBE, 0x07, 0x20,
+ 0xFF, 0xC7, 0x07, 0x20, 0x87, 0xC6, 0x07, 0x20,
+ 0xFF, 0xCF, 0x07, 0x20, 0x88, 0xCE, 0x07, 0x20,
+ 0xFF, 0xD7, 0x07, 0x20, 0x89, 0xD6, 0x07, 0x20,
+ 0xFF, 0xDF, 0x07, 0x20, 0x8A, 0xDE, 0x07, 0x20,
+ 0xFF, 0xE7, 0x07, 0x20, 0x8B, 0xE6, 0x07, 0x20,
+ 0xFF, 0xEF, 0x07, 0x20, 0x8C, 0xEE, 0x07, 0x20,
+ 0xFF, 0xF7, 0x07, 0x20, 0x8D, 0xF6, 0x07, 0x20,
+ 0xFF, 0xFF, 0x07, 0x20, 0x8E, 0xFE, 0x07, 0x20,
+ 0xFF, 0x83, 0xA7, 0x00, 0x5F, 0x82, 0xA7, 0x00,
+ 0xFF, 0x83, 0x27, 0x00, 0x5F, 0x82, 0x27, 0x00,
+ 0xFF, 0x83, 0x27, 0x00, 0x5F, 0x82, 0x27, 0x00,
+ 0xFF, 0x83, 0x27, 0x00, 0x5F, 0x82, 0x27, 0x00,
+ 0xFF, 0x83, 0x27, 0x00, 0x5F, 0x82, 0x27, 0x00,
+ 0xFF, 0x83, 0x27, 0x00, 0x5F, 0x82, 0x27, 0x00,
+ 0xFF, 0x83, 0x27, 0x00, 0x5F, 0x82, 0x27, 0x00,
+ 0xFF, 0x83, 0x27, 0x00, 0x5F, 0x82, 0x27, 0x00,
+ 0xFF, 0x83, 0x27, 0x00, 0x5F, 0x82, 0x27, 0x00,
+ 0xFF, 0x83, 0x27, 0x00, 0x5F, 0x82, 0x27, 0x00,
+ 0xFF, 0x83, 0x27, 0x00, 0x5F, 0x82, 0x27, 0x00,
+ 0xFF, 0x83, 0x27, 0x00, 0x5F, 0x82, 0x27, 0x00,
+ 0xFF, 0x83, 0x27, 0x00, 0x5F, 0x82, 0x27, 0x00,
+ 0xFF, 0x83, 0x27, 0x00, 0x5F, 0x82, 0x27, 0x00,
+ 0xFF, 0x83, 0x27, 0x00, 0x5F, 0x82, 0x27, 0x00,
+ 0xFF, 0x83, 0x27, 0x00, 0x5F, 0x82, 0x27, 0x00,
+ 0xFF, 0x83, 0x27, 0x00, 0x5F, 0x82, 0x27, 0x00,
+ 0xFF, 0x83, 0x27, 0x00, 0x5F, 0x82, 0x27, 0x00,
+ 0xFF, 0x83, 0x27, 0x00, 0x5F, 0x82, 0x27, 0x00,
+ 0xFF, 0x83, 0x27, 0x00, 0x5F, 0x82, 0x27, 0x00,
+ 0xFF, 0x83, 0x27, 0x00, 0x5F, 0x82, 0x27, 0x00,
+ 0xFF, 0x83, 0x27, 0x20, 0x5F, 0x82, 0x27, 0x20,
+ 0xFF, 0x8B, 0x27, 0x20, 0x60, 0x8A, 0x27, 0x20,
+ 0xFF, 0x93, 0x27, 0x20, 0x61, 0x92, 0x27, 0x20,
+ 0xFF, 0x9B, 0x27, 0x20, 0x62, 0x9A, 0x27, 0x20,
+ 0xFF, 0xA3, 0x27, 0x20, 0x63, 0xA2, 0x27, 0x20,
+ 0xFF, 0xAB, 0x27, 0x20, 0x64, 0xAA, 0x27, 0x20,
+ 0xFF, 0xB3, 0x27, 0x20, 0x65, 0xB2, 0x27, 0x20,
+ 0xFF, 0xBB, 0x27, 0x20, 0x66, 0xBA, 0x27, 0x20,
+ 0xFF, 0xC3, 0x27, 0x20, 0x67, 0xC2, 0x27, 0x20,
+ 0xFF, 0xCB, 0x27, 0x20, 0x68, 0xCA, 0x27, 0x20,
+ 0xFF, 0xD3, 0x27, 0x20, 0x69, 0xD2, 0x27, 0x20,
+ 0xFF, 0xDB, 0x27, 0x20, 0x6A, 0xDA, 0x27, 0x20,
+ 0xFF, 0xE3, 0x27, 0x20, 0x6B, 0xE2, 0x27, 0x20,
+ 0xFF, 0xEB, 0x27, 0x20, 0x6C, 0xEA, 0x27, 0x20,
+ 0xFF, 0xF3, 0x27, 0x20, 0x6D, 0xF2, 0x27, 0x20,
+ 0xFF, 0xFB, 0x27, 0x20, 0x6E, 0xFA, 0x27, 0x20,
+ 0xFF, 0x85, 0x27, 0x20, 0x6F, 0x84, 0x27, 0x20,
+ 0xFF, 0x8D, 0x27, 0x20, 0x70, 0x8C, 0x27, 0x20,
+ 0xFF, 0x95, 0x27, 0x20, 0x71, 0x94, 0x27, 0x20,
+ 0xFF, 0x9D, 0x27, 0x20, 0x72, 0x9C, 0x27, 0x20,
+ 0xFF, 0xA5, 0x27, 0x20, 0x73, 0xA4, 0x27, 0x20,
+ 0xFF, 0xAD, 0x27, 0x20, 0x74, 0xAC, 0x27, 0x20,
+ 0xFF, 0xB5, 0x27, 0x20, 0x75, 0xB4, 0x27, 0x20,
+ 0xFF, 0xBD, 0x27, 0x20, 0x76, 0xBC, 0x27, 0x20,
+ 0xFF, 0xC5, 0x27, 0x20, 0x77, 0xC4, 0x27, 0x20,
+ 0xFF, 0xCD, 0x27, 0x20, 0x78, 0xCC, 0x27, 0x20,
+ 0xFF, 0xD5, 0x27, 0x20, 0x79, 0xD4, 0x27, 0x20,
+ 0xFF, 0xDD, 0x27, 0x20, 0x7A, 0xDC, 0x27, 0x20,
+ 0xFF, 0xE5, 0x27, 0x20, 0x7B, 0xE4, 0x27, 0x20,
+ 0xFF, 0xED, 0x27, 0x20, 0x7C, 0xEC, 0x27, 0x20,
+ 0xFF, 0xF5, 0x27, 0x20, 0x7D, 0xF4, 0x27, 0x20,
+ 0xFF, 0xFD, 0x27, 0x20, 0x7E, 0xFC, 0x27, 0x20,
+ 0xFF, 0x87, 0x27, 0x20, 0x7F, 0x86, 0x27, 0x20,
+ 0xFF, 0x8F, 0x27, 0x20, 0x80, 0x8E, 0x27, 0x20,
+ 0xFF, 0x97, 0x27, 0x20, 0x81, 0x96, 0x27, 0x20,
+ 0xFF, 0x9F, 0x27, 0x20, 0x82, 0x9E, 0x27, 0x20,
+ 0xFF, 0xA7, 0x27, 0x20, 0x83, 0xA6, 0x27, 0x20,
+ 0xFF, 0xAF, 0x27, 0x20, 0x84, 0xAE, 0x27, 0x20,
+ 0xFF, 0xB7, 0x27, 0x20, 0x85, 0xB6, 0x27, 0x20,
+ 0xFF, 0xBF, 0x27, 0x20, 0x86, 0xBE, 0x27, 0x20,
+ 0xFF, 0xC7, 0x27, 0x20, 0x87, 0xC6, 0x27, 0x20,
+ 0xFF, 0xCF, 0x27, 0x20, 0x88, 0xCE, 0x27, 0x20,
+ 0xFF, 0xD7, 0x27, 0x20, 0x89, 0xD6, 0x27, 0x20,
+ 0xFF, 0xDF, 0x27, 0x20, 0x8A, 0xDE, 0x27, 0x20,
+ 0xFF, 0xE7, 0x27, 0x20, 0x8B, 0xE6, 0x27, 0x20,
+ 0xFF, 0xEF, 0x27, 0x20, 0x8C, 0xEE, 0x27, 0x20,
+ 0xFF, 0xF7, 0x27, 0x20, 0x8D, 0xF6, 0x27, 0x20,
+ 0xFF, 0xFF, 0x27, 0x20, 0x8E, 0xFE, 0x27, 0x20,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x0A, 0x00, 0x08, 0x00, 0x10, 0x03, 0x18, 0x1C,
+ 0x10, 0x03, 0x18, 0x1C, 0x03, 0x00, 0x09, 0x00,
+ 0x00, 0x20, 0x04, 0x30, 0x80, 0x00, 0x00, 0x00,
+ 0x04, 0x0C, 0x00, 0x01, 0x00, 0x00, 0x0D, 0x00,
+ 0x78, 0x01, 0x50, 0x01, 0x00, 0x00, 0x0E, 0x00,
+ 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x6E,
+ 0x00, 0x65, 0x00, 0x65, 0x00, 0x72, 0x00, 0x69,
+ 0x00, 0x6E, 0x00, 0x67, 0x00, 0x5C, 0x00, 0x70,
+ 0x00, 0x72, 0x00, 0x69, 0x00, 0x76, 0x03, 0x00,
+ 0x00, 0x00, 0x0C, 0x00, 0x00, 0x38, 0x00, 0x07,
+ 0x00, 0x00, 0xFD, 0x00, 0xFF, 0xFF, 0x0C, 0x00,
+ 0x00, 0x38, 0x02, 0x07, 0x00, 0x00, 0xFD, 0x00,
+ 0xFF, 0xFF, 0x0C, 0x00, 0x00, 0x38, 0x00, 0x08,
+ 0x00, 0x00, 0xFD, 0x00, 0xFF, 0xFF, 0x0C, 0x00,
+ 0x00, 0x38, 0x02, 0x08, 0x00, 0x00, 0xFD, 0x00,
+ 0xFF, 0xFF, 0x0C, 0x00, 0x00, 0x38, 0x00, 0x02,
+ 0x00, 0x00, 0xFD, 0x00, 0xFF, 0xFF, 0x0C, 0x00,
+ 0x00, 0x38, 0x02, 0x02, 0x00, 0x00, 0xFD, 0x00,
+ 0xFF, 0xFF, 0x0C, 0x00, 0x00, 0x38, 0x00, 0x03,
+ 0x00, 0x00, 0xFD, 0x00, 0xFF, 0xFF, 0x0C, 0x00,
+ 0x00, 0x38, 0x02, 0x03, 0x00, 0x00, 0xFD, 0x00,
+ 0xFF, 0xFF, 0x0C, 0x00, 0x00, 0x38, 0x00, 0x04,
+ 0x00, 0x00, 0xFD, 0x00, 0xFF, 0xFF, 0x0C, 0x00,
+ 0x00, 0x38, 0x02, 0x04, 0x00, 0x00, 0xFD, 0x00,
+ 0xFF, 0xFF, 0x0C, 0x00, 0x00, 0x38, 0x00, 0x05,
+ 0x00, 0x00, 0xFD, 0x00, 0xFF, 0xFF, 0x0C, 0x00,
+ 0x00, 0x38, 0x02, 0x05, 0x00, 0x00, 0xFD, 0x00,
+ 0xFF, 0xFF, 0x0C, 0x00, 0x00, 0x38, 0x00, 0x06,
+ 0x00, 0x00, 0xFD, 0x00, 0xFF, 0xFF, 0x0C, 0x00,
+ 0x00, 0x38, 0x02, 0x06, 0x00, 0x00, 0xFD, 0x00,
+ 0xFF, 0xFF, 0x10, 0x00, 0x00, 0x38, 0x02, 0x03,
+ 0x00, 0x00, 0xFD, 0x00, 0xFF, 0xFF, 0x10, 0x00,
+ 0x00, 0x38, 0x00, 0x04, 0x00, 0x00, 0xFD, 0x00,
+ 0xFF, 0xFF, 0x10, 0x00, 0x00, 0x38, 0x02, 0x04,
+ 0x00, 0x00, 0xFD, 0x00, 0xFF, 0xFF, 0x10, 0x00,
+ 0x00, 0x38, 0x00, 0x05, 0x00, 0x00, 0xFD, 0x00,
+ 0xFF, 0xFF, 0x10, 0x00, 0x00, 0x38, 0x02, 0x05,
+ 0x00, 0x00, 0xFD, 0x00, 0xFF, 0xFF, 0x10, 0x00,
+ 0x00, 0x38, 0x00, 0x06, 0x00, 0x00, 0xFD, 0x00,
+ 0xFF, 0xFF, 0x10, 0x00, 0x00, 0x38, 0x02, 0x06,
+ 0x00, 0x00, 0xFD, 0x00, 0xFF, 0xFF, 0x10, 0x00,
+ 0x00, 0x38, 0x00, 0x07, 0x00, 0x00, 0xFD, 0x00,
+ 0xFF, 0xFF, 0x10, 0x00, 0x00, 0x38, 0x02, 0x07,
+ 0x00, 0x00, 0xFD, 0x00, 0xFF, 0xFF, 0x10, 0x00,
+ 0x00, 0x38, 0x00, 0x08, 0x00, 0x00, 0xFD, 0x00,
+ 0xFF, 0xFF, 0x10, 0x00, 0x00, 0x38, 0x02, 0x08,
+ 0x00, 0x00, 0xFD, 0x00, 0xFF, 0xFF, 0x10, 0x00,
+ 0x00, 0x38, 0x00, 0x09, 0x00, 0x00, 0xFD, 0x00,
+ 0xFF, 0xFF, 0x10, 0x00, 0x00, 0x38, 0x02, 0x09,
+ 0x00, 0x00, 0xFD, 0x00, 0xFF, 0xFF, 0x10, 0x00,
+ 0x00, 0x38, 0x00, 0x0A, 0x00, 0x00, 0xFD, 0x00,
+ 0xFF, 0xFF, 0x0E, 0x00, 0xE0, 0x00, 0x00, 0x01,
+ 0x00, 0x01, 0x00, 0x01, 0x00, 0x1F, 0x01, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0xFE, 0x01, 0x00, 0x01,
+ 0x01, 0x01, 0x00, 0x01, 0x00, 0x1F, 0x01, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0xFE, 0x01, 0x00, 0x01,
+ 0x01, 0x01, 0x01, 0x01, 0x00, 0x1F, 0x01, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0xFE, 0x01, 0x00, 0x01,
+ 0x02, 0x01, 0x01, 0x01, 0x00, 0x1F, 0x01, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0xFE, 0x01, 0x00, 0x01,
+ 0x01, 0x01, 0x01, 0x01, 0x01, 0x1F, 0x01, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0xFE, 0x01, 0x00, 0x01,
+ 0x02, 0x01, 0x01, 0x01, 0x01, 0x1F, 0x01, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0xFE, 0x01, 0x00, 0x01,
+ 0x04, 0x01, 0x01, 0x01, 0x01, 0x1F, 0x01, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0xFE, 0x01, 0x00, 0x01,
+ 0x04, 0x01, 0x02, 0x01, 0x01, 0x1F, 0x01, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0xFE, 0x01, 0x00, 0x01,
+ 0x08, 0x01, 0x02, 0x01, 0x01, 0x1F, 0x01, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0xFE, 0x01, 0x00, 0x01,
+ 0x08, 0x01, 0x04, 0x01, 0x01, 0x1F, 0x01, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0xFE, 0x01, 0x00, 0x01,
+ 0x10, 0x01, 0x04, 0x01, 0x01, 0x1F, 0x01, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0xFE, 0x01, 0x00, 0x01,
+ 0x10, 0x01, 0x08, 0x01, 0x01, 0x1F, 0x01, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0xFE, 0x01, 0x00, 0x01,
+ 0x10, 0x01, 0x08, 0x01, 0x02, 0x1F, 0x01, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0xFE, 0x01, 0x00, 0x01,
+ 0x10, 0x01, 0x10, 0x01, 0x02, 0x1F, 0x01, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0xFE, 0x01, 0x0F, 0x00,
+ 0x01, 0x00, 0x02, 0x10, 0x00, 0x01, 0x00, 0x01,
+ 0x11, 0x00, 0x02, 0x00, 0x0E, 0x00, 0x12, 0x00,
+ 0x01, 0x00, 0x0E, 0x15, 0x00, 0x08, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x20, 0x28, 0x00, 0x00,
+};
+
+static unsigned char vfs5011_init_07[] = { /* 2503 B */
+ 0x02, 0xB0, 0x00, 0x00, 0x01, 0x03, 0x00, 0x09,
+ 0x00, 0x04, 0x20, 0x04, 0x30, 0x00, 0x00, 0x00,
+ 0x00, 0x04, 0x03, 0x00, 0x09, 0x00, 0x18, 0x20,
+ 0x04, 0x30, 0x01, 0x80, 0x4F, 0x00, 0x04, 0x03,
+ 0x00, 0x09, 0x00, 0x20, 0x20, 0x04, 0x30, 0x08,
+ 0x00, 0x80, 0x00, 0x04, 0x03, 0x00, 0x09, 0x00,
+ 0x24, 0x20, 0x04, 0x30, 0x00, 0x00, 0xFF, 0x01,
+ 0x04, 0x03, 0x00, 0x09, 0x00, 0x2C, 0x20, 0x04,
+ 0x30, 0x01, 0x00, 0x00, 0x00, 0x04, 0x03, 0x00,
+ 0x09, 0x00, 0x40, 0x20, 0x04, 0x30, 0xFF, 0x03,
+ 0x00, 0x00, 0x04, 0x03, 0x00, 0x09, 0x00, 0x44,
+ 0x20, 0x04, 0x30, 0xE6, 0x03, 0x00, 0x00, 0x04,
+ 0x03, 0x00, 0x09, 0x00, 0x48, 0x20, 0x04, 0x30,
+ 0xE7, 0x03, 0x00, 0x00, 0x04, 0x03, 0x00, 0x09,
+ 0x00, 0x4C, 0x20, 0x04, 0x30, 0xE8, 0x03, 0x00,
+ 0x00, 0x04, 0x03, 0x00, 0x09, 0x00, 0x54, 0x20,
+ 0x04, 0x30, 0x00, 0x3E, 0x01, 0x00, 0x04, 0x03,
+ 0x00, 0x09, 0x00, 0x00, 0x21, 0x04, 0x30, 0x00,
+ 0x00, 0x00, 0x00, 0x04, 0x03, 0x00, 0x09, 0x00,
+ 0x04, 0x21, 0x04, 0x30, 0x00, 0x00, 0x00, 0x00,
+ 0x04, 0x03, 0x00, 0x09, 0x00, 0x08, 0x21, 0x04,
+ 0x30, 0x00, 0x00, 0x00, 0x00, 0x04, 0x03, 0x00,
+ 0x09, 0x00, 0x0C, 0x21, 0x04, 0x30, 0x00, 0x00,
+ 0x00, 0x00, 0x04, 0x03, 0x00, 0x09, 0x00, 0x10,
+ 0x21, 0x04, 0x30, 0x00, 0x00, 0x00, 0x00, 0x04,
+ 0x03, 0x00, 0x09, 0x00, 0x14, 0x21, 0x04, 0x30,
+ 0x00, 0x00, 0x00, 0x00, 0x04, 0x03, 0x00, 0x09,
+ 0x00, 0x18, 0x21, 0x04, 0x30, 0x00, 0x00, 0x00,
+ 0x00, 0x04, 0x03, 0x00, 0x09, 0x00, 0x1C, 0x21,
+ 0x04, 0x30, 0x1F, 0x00, 0x00, 0x00, 0x04, 0x03,
+ 0x00, 0x09, 0x00, 0x20, 0x21, 0x04, 0x30, 0x01,
+ 0x00, 0x00, 0x00, 0x04, 0x03, 0x00, 0x09, 0x00,
+ 0x40, 0x21, 0x04, 0x30, 0x00, 0x00, 0x00, 0x00,
+ 0x04, 0x03, 0x00, 0x09, 0x00, 0x44, 0x21, 0x04,
+ 0x30, 0x00, 0x00, 0x00, 0x00, 0x04, 0x03, 0x00,
+ 0x09, 0x00, 0x48, 0x21, 0x04, 0x30, 0x00, 0x00,
+ 0x00, 0x00, 0x04, 0x03, 0x00, 0x09, 0x00, 0x4C,
+ 0x21, 0x04, 0x30, 0x00, 0x00, 0x00, 0x00, 0x04,
+ 0x03, 0x00, 0x09, 0x00, 0x50, 0x21, 0x04, 0x30,
+ 0x00, 0x00, 0x00, 0x00, 0x04, 0x03, 0x00, 0x09,
+ 0x00, 0x54, 0x21, 0x04, 0x30, 0x00, 0x00, 0x00,
+ 0x00, 0x04, 0x03, 0x00, 0x09, 0x00, 0x58, 0x21,
+ 0x04, 0x30, 0x00, 0x00, 0x00, 0x00, 0x04, 0x03,
+ 0x00, 0x09, 0x00, 0x5C, 0x21, 0x04, 0x30, 0x1F,
+ 0x00, 0x00, 0x00, 0x04, 0x03, 0x00, 0x09, 0x00,
+ 0x60, 0x21, 0x04, 0x30, 0x01, 0x00, 0x00, 0x00,
+ 0x04, 0x03, 0x00, 0x09, 0x00, 0x80, 0x21, 0x04,
+ 0x30, 0x00, 0x00, 0x00, 0x00, 0x04, 0x03, 0x00,
+ 0x09, 0x00, 0x84, 0x21, 0x04, 0x30, 0x00, 0x00,
+ 0x00, 0x00, 0x04, 0x03, 0x00, 0x09, 0x00, 0x88,
+ 0x21, 0x04, 0x30, 0x00, 0x00, 0x00, 0x00, 0x04,
+ 0x03, 0x00, 0x09, 0x00, 0x8C, 0x21, 0x04, 0x30,
+ 0x00, 0x00, 0x00, 0x00, 0x04, 0x03, 0x00, 0x09,
+ 0x00, 0x90, 0x21, 0x04, 0x30, 0x00, 0x00, 0x00,
+ 0x00, 0x04, 0x03, 0x00, 0x09, 0x00, 0x94, 0x21,
+ 0x04, 0x30, 0x00, 0x00, 0x00, 0x00, 0x04, 0x03,
+ 0x00, 0x09, 0x00, 0x98, 0x21, 0x04, 0x30, 0x00,
+ 0x00, 0x00, 0x00, 0x04, 0x03, 0x00, 0x09, 0x00,
+ 0x9C, 0x21, 0x04, 0x30, 0x1F, 0x00, 0x00, 0x00,
+ 0x04, 0x03, 0x00, 0x09, 0x00, 0xA0, 0x21, 0x04,
+ 0x30, 0x01, 0x00, 0x00, 0x00, 0x04, 0x03, 0x00,
+ 0x09, 0x00, 0xC0, 0x21, 0x04, 0x30, 0x00, 0x00,
+ 0x00, 0x00, 0x04, 0x03, 0x00, 0x09, 0x00, 0xC4,
+ 0x21, 0x04, 0x30, 0x00, 0x00, 0x00, 0x00, 0x04,
+ 0x03, 0x00, 0x09, 0x00, 0xC8, 0x21, 0x04, 0x30,
+ 0x00, 0x00, 0x00, 0x00, 0x04, 0x03, 0x00, 0x09,
+ 0x00, 0xCC, 0x21, 0x04, 0x30, 0x00, 0x00, 0x00,
+ 0x00, 0x04, 0x03, 0x00, 0x09, 0x00, 0xD0, 0x21,
+ 0x04, 0x30, 0x00, 0x00, 0x00, 0x00, 0x04, 0x03,
+ 0x00, 0x09, 0x00, 0xD4, 0x21, 0x04, 0x30, 0x00,
+ 0x00, 0x00, 0x00, 0x04, 0x03, 0x00, 0x09, 0x00,
+ 0xD8, 0x21, 0x04, 0x30, 0x00, 0x00, 0x00, 0x00,
+ 0x04, 0x03, 0x00, 0x09, 0x00, 0xDC, 0x21, 0x04,
+ 0x30, 0x1F, 0x00, 0x00, 0x00, 0x04, 0x03, 0x00,
+ 0x09, 0x00, 0xE0, 0x21, 0x04, 0x30, 0x01, 0x00,
+ 0x00, 0x00, 0x04, 0x03, 0x00, 0x09, 0x00, 0xA0,
+ 0x20, 0x04, 0x30, 0xEF, 0xE1, 0x00, 0x00, 0x04,
+ 0x03, 0x00, 0x09, 0x00, 0xA4, 0x20, 0x04, 0x30,
+ 0x00, 0x40, 0x00, 0x00, 0x04, 0x03, 0x00, 0x09,
+ 0x00, 0xB0, 0x20, 0x04, 0x30, 0x00, 0x00, 0x00,
+ 0x00, 0x04, 0x03, 0x00, 0x09, 0x00, 0xC4, 0x20,
+ 0x04, 0x30, 0x14, 0x00, 0x00, 0x00, 0x04, 0x03,
+ 0x00, 0x09, 0x00, 0xC8, 0x20, 0x04, 0x30, 0x00,
+ 0x00, 0x00, 0x00, 0x04, 0x03, 0x00, 0x09, 0x00,
+ 0xCC, 0x20, 0x04, 0x30, 0x20, 0x00, 0x00, 0x00,
+ 0x04, 0x03, 0x00, 0x09, 0x00, 0x50, 0x20, 0x04,
+ 0x30, 0x00, 0x02, 0xA8, 0x02, 0x04, 0x03, 0x00,
+ 0x09, 0x00, 0xA8, 0x20, 0x04, 0x30, 0xFE, 0x21,
+ 0x00, 0x00, 0x04, 0x03, 0x00, 0x09, 0x00, 0x04,
+ 0x00, 0x00, 0x38, 0x00, 0x07, 0x00, 0x00, 0x04,
+ 0x03, 0x00, 0x09, 0x00, 0x08, 0x00, 0x00, 0x38,
+ 0x00, 0x15, 0x00, 0x00, 0x04, 0x03, 0x00, 0x09,
+ 0x00, 0x0C, 0x00, 0x00, 0x38, 0x01, 0x03, 0x02,
+ 0x00, 0x04, 0x03, 0x00, 0x09, 0x00, 0x10, 0x00,
+ 0x00, 0x38, 0x01, 0x07, 0x02, 0x00, 0x04, 0x03,
+ 0x00, 0x09, 0x00, 0x14, 0x00, 0x00, 0x38, 0x0C,
+ 0x0C, 0x05, 0x00, 0x04, 0x02, 0x00, 0x80, 0x05,
+ 0xFF, 0x83, 0x07, 0x20, 0x5F, 0x82, 0x07, 0x20,
+ 0xFF, 0x83, 0x07, 0x20, 0x5F, 0x82, 0x07, 0x20,
+ 0xFF, 0x83, 0x07, 0x20, 0x5F, 0x82, 0x07, 0x20,
+ 0xFF, 0x83, 0x07, 0x20, 0x5F, 0x82, 0x07, 0x20,
+ 0xFF, 0x83, 0x07, 0x20, 0x5F, 0x82, 0x07, 0x20,
+ 0xFF, 0x8B, 0x07, 0x20, 0x60, 0x8A, 0x07, 0x20,
+ 0xFF, 0x93, 0x07, 0x20, 0x61, 0x92, 0x07, 0x20,
+ 0xFF, 0x9B, 0x07, 0x20, 0x62, 0x9A, 0x07, 0x20,
+ 0xFF, 0xA3, 0x07, 0x20, 0x63, 0xA2, 0x07, 0x20,
+ 0xFF, 0xAB, 0x07, 0x20, 0x64, 0xAA, 0x07, 0x20,
+ 0xFF, 0xB3, 0x07, 0x20, 0x65, 0xB2, 0x07, 0x20,
+ 0xFF, 0xBB, 0x07, 0x20, 0x66, 0xBA, 0x07, 0x20,
+ 0xFF, 0xC3, 0x07, 0x20, 0x67, 0xC2, 0x07, 0x20,
+ 0xFF, 0xCB, 0x07, 0x20, 0x68, 0xCA, 0x07, 0x20,
+ 0xFF, 0xD3, 0x07, 0x20, 0x69, 0xD2, 0x07, 0x20,
+ 0xFF, 0xDB, 0x07, 0x20, 0x6A, 0xDA, 0x07, 0x20,
+ 0xFF, 0xE3, 0x07, 0x20, 0x6B, 0xE2, 0x07, 0x20,
+ 0xFF, 0xEB, 0x07, 0x20, 0x6C, 0xEA, 0x07, 0x20,
+ 0xFF, 0xF3, 0x07, 0x20, 0x6D, 0xF2, 0x07, 0x20,
+ 0xFF, 0xFB, 0x07, 0x20, 0x6E, 0xFA, 0x07, 0x20,
+ 0xFF, 0x85, 0x07, 0x20, 0x6F, 0x84, 0x07, 0x20,
+ 0xFF, 0x8D, 0x07, 0x20, 0x70, 0x8C, 0x07, 0x20,
+ 0xFF, 0x95, 0x07, 0x20, 0x71, 0x94, 0x07, 0x20,
+ 0xFF, 0x9D, 0x07, 0x20, 0x72, 0x9C, 0x07, 0x20,
+ 0xFF, 0xA5, 0x07, 0x20, 0x73, 0xA4, 0x07, 0x20,
+ 0xFF, 0xAD, 0x07, 0x20, 0x74, 0xAC, 0x07, 0x20,
+ 0xFF, 0xB5, 0x07, 0x20, 0x75, 0xB4, 0x07, 0x20,
+ 0xFF, 0xBD, 0x07, 0x20, 0x76, 0xBC, 0x07, 0x20,
+ 0xFF, 0xC5, 0x07, 0x20, 0x77, 0xC4, 0x07, 0x20,
+ 0xFF, 0xCD, 0x07, 0x20, 0x78, 0xCC, 0x07, 0x20,
+ 0xFF, 0xD5, 0x07, 0x20, 0x79, 0xD4, 0x07, 0x20,
+ 0xFF, 0xDD, 0x07, 0x20, 0x7A, 0xDC, 0x07, 0x20,
+ 0xFF, 0xE5, 0x07, 0x20, 0x7B, 0xE4, 0x07, 0x20,
+ 0xFF, 0xED, 0x07, 0x20, 0x7C, 0xEC, 0x07, 0x20,
+ 0xFF, 0xF5, 0x07, 0x20, 0x7D, 0xF4, 0x07, 0x20,
+ 0xFF, 0xFD, 0x07, 0x20, 0x7E, 0xFC, 0x07, 0x20,
+ 0xFF, 0x87, 0x07, 0x20, 0x7F, 0x86, 0x07, 0x20,
+ 0xFF, 0x8F, 0x07, 0x20, 0x80, 0x8E, 0x07, 0x20,
+ 0xFF, 0x97, 0x07, 0x20, 0x81, 0x96, 0x07, 0x20,
+ 0xFF, 0x9F, 0x07, 0x20, 0x82, 0x9E, 0x07, 0x20,
+ 0xFF, 0xA7, 0x07, 0x20, 0x83, 0xA6, 0x07, 0x20,
+ 0xFF, 0xAF, 0x07, 0x20, 0x84, 0xAE, 0x07, 0x20,
+ 0xFF, 0xB7, 0x07, 0x20, 0x85, 0xB6, 0x07, 0x20,
+ 0xFF, 0xBF, 0x07, 0x20, 0x86, 0xBE, 0x07, 0x20,
+ 0xFF, 0xC7, 0x07, 0x20, 0x87, 0xC6, 0x07, 0x20,
+ 0xFF, 0xCF, 0x07, 0x20, 0x88, 0xCE, 0x07, 0x20,
+ 0xFF, 0xD7, 0x07, 0x20, 0x89, 0xD6, 0x07, 0x20,
+ 0xFF, 0xDF, 0x07, 0x20, 0x8A, 0xDE, 0x07, 0x20,
+ 0xFF, 0xE7, 0x07, 0x20, 0x8B, 0xE6, 0x07, 0x20,
+ 0xFF, 0xEF, 0x07, 0x20, 0x8C, 0xEE, 0x07, 0x20,
+ 0xFF, 0xF7, 0x07, 0x20, 0x8D, 0xF6, 0x07, 0x20,
+ 0xFF, 0xFF, 0x07, 0x20, 0x8E, 0xFE, 0x07, 0x20,
+ 0xFF, 0xFF, 0x07, 0x20, 0x8E, 0xFE, 0x07, 0x20,
+ 0xFF, 0xF7, 0x07, 0x20, 0x8D, 0xF6, 0x07, 0x20,
+ 0xFF, 0xEF, 0x07, 0x20, 0x8C, 0xEE, 0x07, 0x20,
+ 0xFF, 0xE7, 0x07, 0x20, 0x8B, 0xE6, 0x07, 0x20,
+ 0xFF, 0xDF, 0x07, 0x20, 0x8A, 0xDE, 0x07, 0x20,
+ 0xFF, 0xD7, 0x07, 0x20, 0x89, 0xD6, 0x07, 0x20,
+ 0xFF, 0xCF, 0x07, 0x20, 0x88, 0xCE, 0x07, 0x20,
+ 0xFF, 0xC7, 0x07, 0x20, 0x87, 0xC6, 0x07, 0x20,
+ 0xFF, 0xBF, 0x07, 0x20, 0x86, 0xBE, 0x07, 0x20,
+ 0xFF, 0xB7, 0x07, 0x20, 0x85, 0xB6, 0x07, 0x20,
+ 0xFF, 0xAF, 0x07, 0x20, 0x84, 0xAE, 0x07, 0x20,
+ 0xFF, 0xA7, 0x07, 0x20, 0x83, 0xA6, 0x07, 0x20,
+ 0xFF, 0x9F, 0x07, 0x20, 0x82, 0x9E, 0x07, 0x20,
+ 0xFF, 0x97, 0x07, 0x20, 0x81, 0x96, 0x07, 0x20,
+ 0xFF, 0x8F, 0x07, 0x20, 0x80, 0x8E, 0x07, 0x20,
+ 0xFF, 0x87, 0x07, 0x20, 0x7F, 0x86, 0x07, 0x20,
+ 0xFF, 0xFD, 0x07, 0x20, 0x7E, 0xFC, 0x07, 0x20,
+ 0xFF, 0xF5, 0x07, 0x20, 0x7D, 0xF4, 0x07, 0x20,
+ 0xFF, 0xED, 0x07, 0x20, 0x7C, 0xEC, 0x07, 0x20,
+ 0xFF, 0xE5, 0x07, 0x20, 0x7B, 0xE4, 0x07, 0x20,
+ 0xFF, 0xDD, 0x07, 0x20, 0x7A, 0xDC, 0x07, 0x20,
+ 0xFF, 0xD5, 0x07, 0x20, 0x79, 0xD4, 0x07, 0x20,
+ 0xFF, 0xCD, 0x07, 0x20, 0x78, 0xCC, 0x07, 0x20,
+ 0xFF, 0xC5, 0x07, 0x20, 0x77, 0xC4, 0x07, 0x20,
+ 0xFF, 0xBD, 0x07, 0x20, 0x76, 0xBC, 0x07, 0x20,
+ 0xFF, 0xB5, 0x07, 0x20, 0x75, 0xB4, 0x07, 0x20,
+ 0xFF, 0xAD, 0x07, 0x20, 0x74, 0xAC, 0x07, 0x20,
+ 0xFF, 0xA5, 0x07, 0x20, 0x73, 0xA4, 0x07, 0x20,
+ 0xFF, 0x9D, 0x07, 0x20, 0x72, 0x9C, 0x07, 0x20,
+ 0xFF, 0x95, 0x07, 0x20, 0x71, 0x94, 0x07, 0x20,
+ 0xFF, 0x8D, 0x07, 0x20, 0x70, 0x8C, 0x07, 0x20,
+ 0xFF, 0x85, 0x07, 0x20, 0x6F, 0x84, 0x07, 0x20,
+ 0xFF, 0xFB, 0x07, 0x20, 0x6E, 0xFA, 0x07, 0x20,
+ 0xFF, 0xF3, 0x07, 0x20, 0x6D, 0xF2, 0x07, 0x20,
+ 0xFF, 0xEB, 0x07, 0x20, 0x6C, 0xEA, 0x07, 0x20,
+ 0xFF, 0xE3, 0x07, 0x20, 0x6B, 0xE2, 0x07, 0x20,
+ 0xFF, 0xDB, 0x07, 0x20, 0x6A, 0xDA, 0x07, 0x20,
+ 0xFF, 0xD3, 0x07, 0x20, 0x69, 0xD2, 0x07, 0x20,
+ 0xFF, 0xCB, 0x07, 0x20, 0x68, 0xCA, 0x07, 0x20,
+ 0xFF, 0xC3, 0x07, 0x20, 0x67, 0xC2, 0x07, 0x20,
+ 0xFF, 0xBB, 0x07, 0x20, 0x66, 0xBA, 0x07, 0x20,
+ 0xFF, 0xB3, 0x07, 0x20, 0x65, 0xB2, 0x07, 0x20,
+ 0xFF, 0xAB, 0x07, 0x20, 0x64, 0xAA, 0x07, 0x20,
+ 0xFF, 0xA3, 0x07, 0x20, 0x63, 0xA2, 0x07, 0x20,
+ 0xFF, 0x9B, 0x07, 0x20, 0x62, 0x9A, 0x07, 0x20,
+ 0xFF, 0x93, 0x07, 0x20, 0x61, 0x92, 0x07, 0x20,
+ 0xFF, 0x8B, 0x07, 0x20, 0x60, 0x8A, 0x07, 0x20,
+ 0xFF, 0x83, 0x07, 0x20, 0x5F, 0x82, 0x07, 0x20,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x0A, 0x00, 0x08, 0x00, 0x10, 0x03, 0x18, 0x1C,
+ 0x10, 0x03, 0x18, 0x1C, 0x03, 0x00, 0x09, 0x00,
+ 0x00, 0x20, 0x04, 0x30, 0x80, 0x00, 0x00, 0x00,
+ 0x04, 0x0C, 0x00, 0x01, 0x00, 0x03, 0x0D, 0x00,
+ 0x28, 0x00, 0xC8, 0x20, 0x04, 0x30, 0x00, 0x00,
+ 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0xFF, 0x00,
+ 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x01, 0x00,
+ 0x00, 0x00, 0xC8, 0x20, 0x04, 0x30, 0x00, 0x00,
+ 0x00, 0x00, 0x01, 0x1C, 0x02, 0xB0, 0x01, 0x00,
+ 0x00, 0x00, 0x0E, 0x00, 0x10, 0x00, 0x00, 0x01,
+ 0x01, 0x01, 0x01, 0x00, 0x01, 0x1F, 0x08, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x0F, 0x00,
+ 0x01, 0x00, 0x01, 0x10, 0x00, 0x01, 0x00, 0x01,
+ 0x11, 0x00, 0x02, 0x00, 0x00, 0x01, 0x12, 0x00,
+ 0x01, 0x00, 0x01, 0x05, 0x00, 0x0E, 0x00, 0x0C,
+ 0x20, 0xFD, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x00,
+ 0x00, 0x02, 0x08, 0x00, 0x00, 0x05, 0x00, 0x0E,
+ 0x00, 0x10, 0x20, 0xFD, 0x00, 0xFF, 0xFF, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x03,
+ 0x00, 0x09, 0x00, 0x04, 0x21, 0x04, 0x30, 0x01,
+ 0x00, 0x00, 0x00, 0x04, 0x03, 0x00, 0x09, 0x00,
+ 0x08, 0x21, 0x04, 0x30, 0x01, 0x00, 0x00, 0x00,
+ 0x04, 0x03, 0x00, 0x09, 0x00, 0x0C, 0x21, 0x04,
+ 0x30, 0x01, 0x00, 0x00, 0x00, 0x04, 0x03, 0x00,
+ 0x09, 0x00, 0x10, 0x21, 0x04, 0x30, 0x01, 0x00,
+ 0x00, 0x00, 0x04, 0x03, 0x00, 0x09, 0x00, 0x14,
+ 0x21, 0x04, 0x30, 0x01, 0x00, 0x00, 0x00, 0x04,
+ 0x03, 0x00, 0x09, 0x00, 0x18, 0x21, 0x04, 0x30,
+ 0x01, 0x00, 0x00, 0x00, 0x04, 0x03, 0x00, 0x09,
+ 0x00, 0x44, 0x21, 0x04, 0x30, 0x01, 0x00, 0x00,
+ 0x00, 0x04, 0x03, 0x00, 0x09, 0x00, 0x48, 0x21,
+ 0x04, 0x30, 0x01, 0x00, 0x00, 0x00, 0x04, 0x03,
+ 0x00, 0x09, 0x00, 0x4C, 0x21, 0x04, 0x30, 0x01,
+ 0x00, 0x00, 0x00, 0x04, 0x03, 0x00, 0x09, 0x00,
+ 0x50, 0x21, 0x04, 0x30, 0x01, 0x00, 0x00, 0x00,
+ 0x04, 0x03, 0x00, 0x09, 0x00, 0x54, 0x21, 0x04,
+ 0x30, 0x01, 0x00, 0x00, 0x00, 0x04, 0x03, 0x00,
+ 0x09, 0x00, 0x58, 0x21, 0x04, 0x30, 0x01, 0x00,
+ 0x00, 0x00, 0x04, 0x15, 0x00, 0x08, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x20, 0x28, 0x00, 0x00,
+};
+
+static unsigned char vfs5011_init_08[] = { /* 2516 B */
+ 0x02, 0xB0, 0x00, 0x60, 0x00, 0x03, 0x00, 0x09,
+ 0x00, 0x04, 0x20, 0x04, 0x30, 0x00, 0x00, 0x00,
+ 0x00, 0x04, 0x03, 0x00, 0x09, 0x00, 0x18, 0x20,
+ 0x04, 0x30, 0x01, 0x80, 0x4F, 0x00, 0x04, 0x03,
+ 0x00, 0x09, 0x00, 0x20, 0x20, 0x04, 0x30, 0x08,
+ 0x00, 0x80, 0x00, 0x04, 0x03, 0x00, 0x09, 0x00,
+ 0x24, 0x20, 0x04, 0x30, 0x00, 0x00, 0xFF, 0x01,
+ 0x04, 0x03, 0x00, 0x09, 0x00, 0x2C, 0x20, 0x04,
+ 0x30, 0x01, 0x00, 0x00, 0x00, 0x04, 0x03, 0x00,
+ 0x09, 0x00, 0x40, 0x20, 0x04, 0x30, 0xFF, 0x03,
+ 0x00, 0x00, 0x04, 0x03, 0x00, 0x09, 0x00, 0x44,
+ 0x20, 0x04, 0x30, 0xE6, 0x03, 0x00, 0x00, 0x04,
+ 0x03, 0x00, 0x09, 0x00, 0x48, 0x20, 0x04, 0x30,
+ 0xE7, 0x03, 0x00, 0x00, 0x04, 0x03, 0x00, 0x09,
+ 0x00, 0x4C, 0x20, 0x04, 0x30, 0xE8, 0x03, 0x00,
+ 0x00, 0x04, 0x03, 0x00, 0x09, 0x00, 0x54, 0x20,
+ 0x04, 0x30, 0x00, 0x3E, 0x01, 0x00, 0x04, 0x03,
+ 0x00, 0x09, 0x00, 0x00, 0x21, 0x04, 0x30, 0x00,
+ 0x00, 0x00, 0x00, 0x04, 0x03, 0x00, 0x09, 0x00,
+ 0x04, 0x21, 0x04, 0x30, 0x01, 0x00, 0x00, 0x00,
+ 0x04, 0x03, 0x00, 0x09, 0x00, 0x08, 0x21, 0x04,
+ 0x30, 0x01, 0x00, 0x00, 0x00, 0x04, 0x03, 0x00,
+ 0x09, 0x00, 0x0C, 0x21, 0x04, 0x30, 0x01, 0x00,
+ 0x00, 0x00, 0x04, 0x03, 0x00, 0x09, 0x00, 0x10,
+ 0x21, 0x04, 0x30, 0x01, 0x00, 0x00, 0x00, 0x04,
+ 0x03, 0x00, 0x09, 0x00, 0x14, 0x21, 0x04, 0x30,
+ 0x01, 0x00, 0x00, 0x00, 0x04, 0x03, 0x00, 0x09,
+ 0x00, 0x18, 0x21, 0x04, 0x30, 0x01, 0x00, 0x00,
+ 0x00, 0x04, 0x03, 0x00, 0x09, 0x00, 0x1C, 0x21,
+ 0x04, 0x30, 0x1F, 0x00, 0x00, 0x00, 0x04, 0x03,
+ 0x00, 0x09, 0x00, 0x20, 0x21, 0x04, 0x30, 0x05,
+ 0x00, 0x00, 0x00, 0x04, 0x03, 0x00, 0x09, 0x00,
+ 0x40, 0x21, 0x04, 0x30, 0x00, 0x00, 0x00, 0x00,
+ 0x04, 0x03, 0x00, 0x09, 0x00, 0x44, 0x21, 0x04,
+ 0x30, 0x01, 0x00, 0x00, 0x00, 0x04, 0x03, 0x00,
+ 0x09, 0x00, 0x48, 0x21, 0x04, 0x30, 0x01, 0x00,
+ 0x00, 0x00, 0x04, 0x03, 0x00, 0x09, 0x00, 0x4C,
+ 0x21, 0x04, 0x30, 0x01, 0x00, 0x00, 0x00, 0x04,
+ 0x03, 0x00, 0x09, 0x00, 0x50, 0x21, 0x04, 0x30,
+ 0x01, 0x00, 0x00, 0x00, 0x04, 0x03, 0x00, 0x09,
+ 0x00, 0x54, 0x21, 0x04, 0x30, 0x01, 0x00, 0x00,
+ 0x00, 0x04, 0x03, 0x00, 0x09, 0x00, 0x58, 0x21,
+ 0x04, 0x30, 0x01, 0x00, 0x00, 0x00, 0x04, 0x03,
+ 0x00, 0x09, 0x00, 0x5C, 0x21, 0x04, 0x30, 0x1F,
+ 0x00, 0x00, 0x00, 0x04, 0x03, 0x00, 0x09, 0x00,
+ 0x60, 0x21, 0x04, 0x30, 0x05, 0x00, 0x00, 0x00,
+ 0x04, 0x03, 0x00, 0x09, 0x00, 0x80, 0x21, 0x04,
+ 0x30, 0x00, 0x00, 0x00, 0x00, 0x04, 0x03, 0x00,
+ 0x09, 0x00, 0x84, 0x21, 0x04, 0x30, 0x01, 0x00,
+ 0x00, 0x00, 0x04, 0x03, 0x00, 0x09, 0x00, 0x88,
+ 0x21, 0x04, 0x30, 0x01, 0x00, 0x00, 0x00, 0x04,
+ 0x03, 0x00, 0x09, 0x00, 0x8C, 0x21, 0x04, 0x30,
+ 0x01, 0x00, 0x00, 0x00, 0x04, 0x03, 0x00, 0x09,
+ 0x00, 0x90, 0x21, 0x04, 0x30, 0x01, 0x00, 0x00,
+ 0x00, 0x04, 0x03, 0x00, 0x09, 0x00, 0x94, 0x21,
+ 0x04, 0x30, 0x01, 0x00, 0x00, 0x00, 0x04, 0x03,
+ 0x00, 0x09, 0x00, 0x98, 0x21, 0x04, 0x30, 0x01,
+ 0x00, 0x00, 0x00, 0x04, 0x03, 0x00, 0x09, 0x00,
+ 0x9C, 0x21, 0x04, 0x30, 0x1F, 0x00, 0x00, 0x00,
+ 0x04, 0x03, 0x00, 0x09, 0x00, 0xA0, 0x21, 0x04,
+ 0x30, 0x05, 0x00, 0x00, 0x00, 0x04, 0x03, 0x00,
+ 0x09, 0x00, 0xC0, 0x21, 0x04, 0x30, 0x00, 0x00,
+ 0x00, 0x00, 0x04, 0x03, 0x00, 0x09, 0x00, 0xC4,
+ 0x21, 0x04, 0x30, 0x01, 0x00, 0x00, 0x00, 0x04,
+ 0x03, 0x00, 0x09, 0x00, 0xC8, 0x21, 0x04, 0x30,
+ 0x01, 0x00, 0x00, 0x00, 0x04, 0x03, 0x00, 0x09,
+ 0x00, 0xCC, 0x21, 0x04, 0x30, 0x01, 0x00, 0x00,
+ 0x00, 0x04, 0x03, 0x00, 0x09, 0x00, 0xD0, 0x21,
+ 0x04, 0x30, 0x01, 0x00, 0x00, 0x00, 0x04, 0x03,
+ 0x00, 0x09, 0x00, 0xD4, 0x21, 0x04, 0x30, 0x01,
+ 0x00, 0x00, 0x00, 0x04, 0x03, 0x00, 0x09, 0x00,
+ 0xD8, 0x21, 0x04, 0x30, 0x01, 0x00, 0x00, 0x00,
+ 0x04, 0x03, 0x00, 0x09, 0x00, 0xDC, 0x21, 0x04,
+ 0x30, 0x1F, 0x00, 0x00, 0x00, 0x04, 0x03, 0x00,
+ 0x09, 0x00, 0xE0, 0x21, 0x04, 0x30, 0x05, 0x00,
+ 0x00, 0x00, 0x04, 0x03, 0x00, 0x09, 0x00, 0xA0,
+ 0x20, 0x04, 0x30, 0xEF, 0xE1, 0x00, 0x00, 0x04,
+ 0x03, 0x00, 0x09, 0x00, 0xA4, 0x20, 0x04, 0x30,
+ 0x00, 0x00, 0x00, 0x00, 0x04, 0x03, 0x00, 0x09,
+ 0x00, 0xB0, 0x20, 0x04, 0x30, 0x00, 0x00, 0x00,
+ 0x00, 0x04, 0x03, 0x00, 0x09, 0x00, 0xC4, 0x20,
+ 0x04, 0x30, 0x14, 0x00, 0x00, 0x00, 0x04, 0x03,
+ 0x00, 0x09, 0x00, 0xC8, 0x20, 0x04, 0x30, 0x00,
+ 0x00, 0x00, 0x00, 0x04, 0x03, 0x00, 0x09, 0x00,
+ 0xCC, 0x20, 0x04, 0x30, 0x20, 0x00, 0x00, 0x00,
+ 0x04, 0x03, 0x00, 0x09, 0x00, 0x50, 0x20, 0x04,
+ 0x30, 0x00, 0x02, 0xA8, 0x02, 0x04, 0x03, 0x00,
+ 0x09, 0x00, 0xA8, 0x20, 0x04, 0x30, 0xFE, 0x21,
+ 0x00, 0x00, 0x04, 0x03, 0x00, 0x09, 0x00, 0x04,
+ 0x00, 0x00, 0x38, 0x00, 0x07, 0x00, 0x00, 0x04,
+ 0x03, 0x00, 0x09, 0x00, 0x08, 0x00, 0x00, 0x38,
+ 0x00, 0x15, 0x00, 0x00, 0x04, 0x03, 0x00, 0x09,
+ 0x00, 0x0C, 0x00, 0x00, 0x38, 0x01, 0x03, 0x02,
+ 0x00, 0x04, 0x03, 0x00, 0x09, 0x00, 0x10, 0x00,
+ 0x00, 0x38, 0x01, 0x07, 0x02, 0x00, 0x04, 0x03,
+ 0x00, 0x09, 0x00, 0x14, 0x00, 0x00, 0x38, 0x0C,
+ 0x0C, 0x05, 0x00, 0x04, 0x02, 0x00, 0x80, 0x05,
+ 0xFF, 0x83, 0x07, 0x20, 0x5F, 0x82, 0x07, 0x20,
+ 0xFF, 0x83, 0x07, 0x20, 0x5F, 0x82, 0x07, 0x20,
+ 0xFF, 0x83, 0x07, 0x20, 0x5F, 0x82, 0x07, 0x20,
+ 0xFF, 0x83, 0x07, 0x20, 0x5F, 0x82, 0x07, 0x20,
+ 0xFF, 0x83, 0x07, 0x20, 0x5F, 0x82, 0x07, 0x20,
+ 0xFF, 0x8B, 0x07, 0x20, 0x60, 0x8A, 0x07, 0x20,
+ 0xFF, 0x93, 0x07, 0x20, 0x61, 0x92, 0x07, 0x20,
+ 0xFF, 0x9B, 0x07, 0x20, 0x62, 0x9A, 0x07, 0x20,
+ 0xFF, 0xA3, 0x07, 0x20, 0x63, 0xA2, 0x07, 0x20,
+ 0xFF, 0xAB, 0x07, 0x20, 0x64, 0xAA, 0x07, 0x20,
+ 0xFF, 0xB3, 0x07, 0x20, 0x65, 0xB2, 0x07, 0x20,
+ 0xFF, 0xBB, 0x07, 0x20, 0x66, 0xBA, 0x07, 0x20,
+ 0xFF, 0xC3, 0x07, 0x20, 0x67, 0xC2, 0x07, 0x20,
+ 0xFF, 0xCB, 0x07, 0x20, 0x68, 0xCA, 0x07, 0x20,
+ 0xFF, 0xD3, 0x07, 0x20, 0x69, 0xD2, 0x07, 0x20,
+ 0xFF, 0xDB, 0x07, 0x20, 0x6A, 0xDA, 0x07, 0x20,
+ 0xFF, 0xE3, 0x07, 0x20, 0x6B, 0xE2, 0x07, 0x20,
+ 0xFF, 0xEB, 0x07, 0x20, 0x6C, 0xEA, 0x07, 0x20,
+ 0xFF, 0xF3, 0x07, 0x20, 0x6D, 0xF2, 0x07, 0x20,
+ 0xFF, 0xFB, 0x07, 0x20, 0x6E, 0xFA, 0x07, 0x20,
+ 0xFF, 0x85, 0x07, 0x20, 0x6F, 0x84, 0x07, 0x20,
+ 0xFF, 0x8D, 0x07, 0x20, 0x70, 0x8C, 0x07, 0x20,
+ 0xFF, 0x95, 0x07, 0x20, 0x71, 0x94, 0x07, 0x20,
+ 0xFF, 0x9D, 0x07, 0x20, 0x72, 0x9C, 0x07, 0x20,
+ 0xFF, 0xA5, 0x07, 0x20, 0x73, 0xA4, 0x07, 0x20,
+ 0xFF, 0xAD, 0x07, 0x20, 0x74, 0xAC, 0x07, 0x20,
+ 0xFF, 0xB5, 0x07, 0x20, 0x75, 0xB4, 0x07, 0x20,
+ 0xFF, 0xBD, 0x07, 0x20, 0x76, 0xBC, 0x07, 0x20,
+ 0xFF, 0xC5, 0x07, 0x20, 0x77, 0xC4, 0x07, 0x20,
+ 0xFF, 0xCD, 0x07, 0x20, 0x78, 0xCC, 0x07, 0x20,
+ 0xFF, 0xD5, 0x07, 0x20, 0x79, 0xD4, 0x07, 0x20,
+ 0xFF, 0xDD, 0x07, 0x20, 0x7A, 0xDC, 0x07, 0x20,
+ 0xFF, 0xE5, 0x07, 0x20, 0x7B, 0xE4, 0x07, 0x20,
+ 0xFF, 0xED, 0x07, 0x20, 0x7C, 0xEC, 0x07, 0x20,
+ 0xFF, 0xF5, 0x07, 0x20, 0x7D, 0xF4, 0x07, 0x20,
+ 0xFF, 0xFD, 0x07, 0x20, 0x7E, 0xFC, 0x07, 0x20,
+ 0xFF, 0x87, 0x07, 0x20, 0x7F, 0x86, 0x07, 0x20,
+ 0xFF, 0x8F, 0x07, 0x20, 0x80, 0x8E, 0x07, 0x20,
+ 0xFF, 0x97, 0x07, 0x20, 0x81, 0x96, 0x07, 0x20,
+ 0xFF, 0x9F, 0x07, 0x20, 0x82, 0x9E, 0x07, 0x20,
+ 0xFF, 0xA7, 0x07, 0x20, 0x83, 0xA6, 0x07, 0x20,
+ 0xFF, 0xAF, 0x07, 0x20, 0x84, 0xAE, 0x07, 0x20,
+ 0xFF, 0xB7, 0x07, 0x20, 0x85, 0xB6, 0x07, 0x20,
+ 0xFF, 0xBF, 0x07, 0x20, 0x86, 0xBE, 0x07, 0x20,
+ 0xFF, 0xC7, 0x07, 0x20, 0x87, 0xC6, 0x07, 0x20,
+ 0xFF, 0xCF, 0x07, 0x20, 0x88, 0xCE, 0x07, 0x20,
+ 0xFF, 0xD7, 0x07, 0x20, 0x89, 0xD6, 0x07, 0x20,
+ 0xFF, 0xDF, 0x07, 0x20, 0x8A, 0xDE, 0x07, 0x20,
+ 0xFF, 0xE7, 0x07, 0x20, 0x8B, 0xE6, 0x07, 0x20,
+ 0xFF, 0xEF, 0x07, 0x20, 0x8C, 0xEE, 0x07, 0x20,
+ 0xFF, 0xF7, 0x07, 0x20, 0x8D, 0xF6, 0x07, 0x20,
+ 0xFF, 0xFF, 0x07, 0x20, 0x8E, 0xFE, 0x07, 0x20,
+ 0xFF, 0xFF, 0x07, 0x20, 0x8E, 0xFE, 0x07, 0x20,
+ 0xFF, 0xF7, 0x07, 0x20, 0x8D, 0xF6, 0x07, 0x20,
+ 0xFF, 0xEF, 0x07, 0x20, 0x8C, 0xEE, 0x07, 0x20,
+ 0xFF, 0xE7, 0x07, 0x20, 0x8B, 0xE6, 0x07, 0x20,
+ 0xFF, 0xDF, 0x07, 0x20, 0x8A, 0xDE, 0x07, 0x20,
+ 0xFF, 0xD7, 0x07, 0x20, 0x89, 0xD6, 0x07, 0x20,
+ 0xFF, 0xCF, 0x07, 0x20, 0x88, 0xCE, 0x07, 0x20,
+ 0xFF, 0xC7, 0x07, 0x20, 0x87, 0xC6, 0x07, 0x20,
+ 0xFF, 0xBF, 0x07, 0x20, 0x86, 0xBE, 0x07, 0x20,
+ 0xFF, 0xB7, 0x07, 0x20, 0x85, 0xB6, 0x07, 0x20,
+ 0xFF, 0xAF, 0x07, 0x20, 0x84, 0xAE, 0x07, 0x20,
+ 0xFF, 0xA7, 0x07, 0x20, 0x83, 0xA6, 0x07, 0x20,
+ 0xFF, 0x9F, 0x07, 0x20, 0x82, 0x9E, 0x07, 0x20,
+ 0xFF, 0x97, 0x07, 0x20, 0x81, 0x96, 0x07, 0x20,
+ 0xFF, 0x8F, 0x07, 0x20, 0x80, 0x8E, 0x07, 0x20,
+ 0xFF, 0x87, 0x07, 0x20, 0x7F, 0x86, 0x07, 0x20,
+ 0xFF, 0xFD, 0x07, 0x20, 0x7E, 0xFC, 0x07, 0x20,
+ 0xFF, 0xF5, 0x07, 0x20, 0x7D, 0xF4, 0x07, 0x20,
+ 0xFF, 0xED, 0x07, 0x20, 0x7C, 0xEC, 0x07, 0x20,
+ 0xFF, 0xE5, 0x07, 0x20, 0x7B, 0xE4, 0x07, 0x20,
+ 0xFF, 0xDD, 0x07, 0x20, 0x7A, 0xDC, 0x07, 0x20,
+ 0xFF, 0xD5, 0x07, 0x20, 0x79, 0xD4, 0x07, 0x20,
+ 0xFF, 0xCD, 0x07, 0x20, 0x78, 0xCC, 0x07, 0x20,
+ 0xFF, 0xC5, 0x07, 0x20, 0x77, 0xC4, 0x07, 0x20,
+ 0xFF, 0xBD, 0x07, 0x20, 0x76, 0xBC, 0x07, 0x20,
+ 0xFF, 0xB5, 0x07, 0x20, 0x75, 0xB4, 0x07, 0x20,
+ 0xFF, 0xAD, 0x07, 0x20, 0x74, 0xAC, 0x07, 0x20,
+ 0xFF, 0xA5, 0x07, 0x20, 0x73, 0xA4, 0x07, 0x20,
+ 0xFF, 0x9D, 0x07, 0x20, 0x72, 0x9C, 0x07, 0x20,
+ 0xFF, 0x95, 0x07, 0x20, 0x71, 0x94, 0x07, 0x20,
+ 0xFF, 0x8D, 0x07, 0x20, 0x70, 0x8C, 0x07, 0x20,
+ 0xFF, 0x85, 0x07, 0x20, 0x6F, 0x84, 0x07, 0x20,
+ 0xFF, 0xFB, 0x07, 0x20, 0x6E, 0xFA, 0x07, 0x20,
+ 0xFF, 0xF3, 0x07, 0x20, 0x6D, 0xF2, 0x07, 0x20,
+ 0xFF, 0xEB, 0x07, 0x20, 0x6C, 0xEA, 0x07, 0x20,
+ 0xFF, 0xE3, 0x07, 0x20, 0x6B, 0xE2, 0x07, 0x20,
+ 0xFF, 0xDB, 0x07, 0x20, 0x6A, 0xDA, 0x07, 0x20,
+ 0xFF, 0xD3, 0x07, 0x20, 0x69, 0xD2, 0x07, 0x20,
+ 0xFF, 0xCB, 0x07, 0x20, 0x68, 0xCA, 0x07, 0x20,
+ 0xFF, 0xC3, 0x07, 0x20, 0x67, 0xC2, 0x07, 0x20,
+ 0xFF, 0xBB, 0x07, 0x20, 0x66, 0xBA, 0x07, 0x20,
+ 0xFF, 0xB3, 0x07, 0x20, 0x65, 0xB2, 0x07, 0x20,
+ 0xFF, 0xAB, 0x07, 0x20, 0x64, 0xAA, 0x07, 0x20,
+ 0xFF, 0xA3, 0x07, 0x20, 0x63, 0xA2, 0x07, 0x20,
+ 0xFF, 0x9B, 0x07, 0x20, 0x62, 0x9A, 0x07, 0x20,
+ 0xFF, 0x93, 0x07, 0x20, 0x61, 0x92, 0x07, 0x20,
+ 0xFF, 0x8B, 0x07, 0x20, 0x60, 0x8A, 0x07, 0x20,
+ 0xFF, 0x83, 0x07, 0x20, 0x5F, 0x82, 0x07, 0x20,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x0A, 0x00, 0x08, 0x00, 0x10, 0x03, 0x18, 0x1C,
+ 0x10, 0x03, 0x18, 0x1C, 0x03, 0x00, 0x09, 0x00,
+ 0x00, 0x20, 0x04, 0x30, 0x80, 0x00, 0x00, 0x00,
+ 0x04, 0x0C, 0x00, 0x01, 0x00, 0x02, 0x0D, 0x00,
+ 0x28, 0x00, 0x14, 0x00, 0x00, 0x38, 0x00, 0x00,
+ 0x6E, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,
+ 0x8F, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0x01, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00,
+ 0x01, 0x00, 0x00, 0x00, 0x0F, 0x00, 0x02, 0x00,
+ 0x00, 0x00, 0x0E, 0x00, 0x10, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x0F, 0x00,
+ 0x01, 0x00, 0x01, 0x10, 0x00, 0x01, 0x00, 0x02,
+ 0x11, 0x00, 0x02, 0x00, 0x60, 0x00, 0x12, 0x00,
+ 0x01, 0x00, 0x01, 0x05, 0x00, 0x0E, 0x00, 0x0C,
+ 0x20, 0xFD, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x00,
+ 0x00, 0x02, 0x08, 0x00, 0x00, 0x05, 0x00, 0x0E,
+ 0x00, 0x10, 0x20, 0xFD, 0x00, 0xFF, 0xFF, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x03,
+ 0x00, 0x09, 0x00, 0x04, 0x21, 0x04, 0x30, 0x01,
+ 0x00, 0x00, 0x00, 0x04, 0x03, 0x00, 0x09, 0x00,
+ 0x08, 0x21, 0x04, 0x30, 0x01, 0x00, 0x00, 0x00,
+ 0x04, 0x03, 0x00, 0x09, 0x00, 0x0C, 0x21, 0x04,
+ 0x30, 0x01, 0x00, 0x00, 0x00, 0x04, 0x03, 0x00,
+ 0x09, 0x00, 0x10, 0x21, 0x04, 0x30, 0x01, 0x00,
+ 0x00, 0x00, 0x04, 0x03, 0x00, 0x09, 0x00, 0x14,
+ 0x21, 0x04, 0x30, 0x01, 0x00, 0x00, 0x00, 0x04,
+ 0x03, 0x00, 0x09, 0x00, 0x18, 0x21, 0x04, 0x30,
+ 0x01, 0x00, 0x00, 0x00, 0x04, 0x03, 0x00, 0x09,
+ 0x00, 0x44, 0x21, 0x04, 0x30, 0x01, 0x00, 0x00,
+ 0x00, 0x04, 0x03, 0x00, 0x09, 0x00, 0x48, 0x21,
+ 0x04, 0x30, 0x01, 0x00, 0x00, 0x00, 0x04, 0x03,
+ 0x00, 0x09, 0x00, 0x4C, 0x21, 0x04, 0x30, 0x01,
+ 0x00, 0x00, 0x00, 0x04, 0x03, 0x00, 0x09, 0x00,
+ 0x50, 0x21, 0x04, 0x30, 0x01, 0x00, 0x00, 0x00,
+ 0x04, 0x03, 0x00, 0x09, 0x00, 0x54, 0x21, 0x04,
+ 0x30, 0x01, 0x00, 0x00, 0x00, 0x04, 0x03, 0x00,
+ 0x09, 0x00, 0x58, 0x21, 0x04, 0x30, 0x01, 0x00,
+ 0x00, 0x00, 0x04, 0x03, 0x00, 0x09, 0x00, 0xC8,
+ 0x20, 0x04, 0x30, 0x04, 0x00, 0x00, 0x00, 0x04,
+ 0x15, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x20, 0x28, 0x00, 0x00,
+};
+
+static unsigned char vfs5011_init_09[] = { /* 2742 B */
+ 0x02, 0xB0, 0x00, 0x1C, 0x00, 0x03, 0x00, 0x09,
+ 0x00, 0x04, 0x20, 0x04, 0x30, 0x00, 0x00, 0x00,
+ 0x00, 0x04, 0x03, 0x00, 0x09, 0x00, 0x18, 0x20,
+ 0x04, 0x30, 0x01, 0x80, 0x4F, 0x00, 0x04, 0x03,
+ 0x00, 0x09, 0x00, 0x20, 0x20, 0x04, 0x30, 0x08,
+ 0x00, 0x80, 0x00, 0x04, 0x03, 0x00, 0x09, 0x00,
+ 0x24, 0x20, 0x04, 0x30, 0x00, 0x00, 0xFF, 0x01,
+ 0x04, 0x03, 0x00, 0x09, 0x00, 0x2C, 0x20, 0x04,
+ 0x30, 0x01, 0x00, 0x00, 0x00, 0x04, 0x03, 0x00,
+ 0x09, 0x00, 0x40, 0x20, 0x04, 0x30, 0xFF, 0x03,
+ 0x00, 0x00, 0x04, 0x03, 0x00, 0x09, 0x00, 0x44,
+ 0x20, 0x04, 0x30, 0xE7, 0x03, 0x00, 0x00, 0x04,
+ 0x03, 0x00, 0x09, 0x00, 0x48, 0x20, 0x04, 0x30,
+ 0xFF, 0x03, 0x00, 0x00, 0x04, 0x03, 0x00, 0x09,
+ 0x00, 0x4C, 0x20, 0x04, 0x30, 0xFF, 0x03, 0x00,
+ 0x00, 0x04, 0x03, 0x00, 0x09, 0x00, 0x54, 0x20,
+ 0x04, 0x30, 0x00, 0x3E, 0x01, 0x00, 0x04, 0x03,
+ 0x00, 0x09, 0x00, 0x00, 0x21, 0x04, 0x30, 0x30,
+ 0x00, 0x00, 0x00, 0x04, 0x03, 0x00, 0x09, 0x00,
+ 0x04, 0x21, 0x04, 0x30, 0x01, 0x00, 0x00, 0x00,
+ 0x04, 0x03, 0x00, 0x09, 0x00, 0x08, 0x21, 0x04,
+ 0x30, 0x01, 0x00, 0x00, 0x00, 0x04, 0x03, 0x00,
+ 0x09, 0x00, 0x0C, 0x21, 0x04, 0x30, 0x01, 0x00,
+ 0x00, 0x00, 0x04, 0x03, 0x00, 0x09, 0x00, 0x10,
+ 0x21, 0x04, 0x30, 0x01, 0x00, 0x00, 0x00, 0x04,
+ 0x03, 0x00, 0x09, 0x00, 0x14, 0x21, 0x04, 0x30,
+ 0x01, 0x00, 0x00, 0x00, 0x04, 0x03, 0x00, 0x09,
+ 0x00, 0x18, 0x21, 0x04, 0x30, 0x01, 0x00, 0x00,
+ 0x00, 0x04, 0x03, 0x00, 0x09, 0x00, 0x1C, 0x21,
+ 0x04, 0x30, 0x1F, 0x00, 0x00, 0x00, 0x04, 0x03,
+ 0x00, 0x09, 0x00, 0x20, 0x21, 0x04, 0x30, 0x00,
+ 0x00, 0x00, 0x00, 0x04, 0x03, 0x00, 0x09, 0x00,
+ 0x40, 0x21, 0x04, 0x30, 0x30, 0x00, 0x00, 0x00,
+ 0x04, 0x03, 0x00, 0x09, 0x00, 0x44, 0x21, 0x04,
+ 0x30, 0x01, 0x00, 0x00, 0x00, 0x04, 0x03, 0x00,
+ 0x09, 0x00, 0x48, 0x21, 0x04, 0x30, 0x01, 0x00,
+ 0x00, 0x00, 0x04, 0x03, 0x00, 0x09, 0x00, 0x4C,
+ 0x21, 0x04, 0x30, 0x01, 0x00, 0x00, 0x00, 0x04,
+ 0x03, 0x00, 0x09, 0x00, 0x50, 0x21, 0x04, 0x30,
+ 0x01, 0x00, 0x00, 0x00, 0x04, 0x03, 0x00, 0x09,
+ 0x00, 0x54, 0x21, 0x04, 0x30, 0x01, 0x00, 0x00,
+ 0x00, 0x04, 0x03, 0x00, 0x09, 0x00, 0x58, 0x21,
+ 0x04, 0x30, 0x01, 0x00, 0x00, 0x00, 0x04, 0x03,
+ 0x00, 0x09, 0x00, 0x5C, 0x21, 0x04, 0x30, 0x1F,
+ 0x00, 0x00, 0x00, 0x04, 0x03, 0x00, 0x09, 0x00,
+ 0x60, 0x21, 0x04, 0x30, 0x00, 0x00, 0x00, 0x00,
+ 0x04, 0x03, 0x00, 0x09, 0x00, 0x80, 0x21, 0x04,
+ 0x30, 0x30, 0x00, 0x00, 0x00, 0x04, 0x03, 0x00,
+ 0x09, 0x00, 0x84, 0x21, 0x04, 0x30, 0x01, 0x00,
+ 0x00, 0x00, 0x04, 0x03, 0x00, 0x09, 0x00, 0x88,
+ 0x21, 0x04, 0x30, 0x01, 0x00, 0x00, 0x00, 0x04,
+ 0x03, 0x00, 0x09, 0x00, 0x8C, 0x21, 0x04, 0x30,
+ 0x01, 0x00, 0x00, 0x00, 0x04, 0x03, 0x00, 0x09,
+ 0x00, 0x90, 0x21, 0x04, 0x30, 0x01, 0x00, 0x00,
+ 0x00, 0x04, 0x03, 0x00, 0x09, 0x00, 0x94, 0x21,
+ 0x04, 0x30, 0x01, 0x00, 0x00, 0x00, 0x04, 0x03,
+ 0x00, 0x09, 0x00, 0x98, 0x21, 0x04, 0x30, 0x01,
+ 0x00, 0x00, 0x00, 0x04, 0x03, 0x00, 0x09, 0x00,
+ 0x9C, 0x21, 0x04, 0x30, 0x1F, 0x00, 0x00, 0x00,
+ 0x04, 0x03, 0x00, 0x09, 0x00, 0xA0, 0x21, 0x04,
+ 0x30, 0x00, 0x00, 0x00, 0x00, 0x04, 0x03, 0x00,
+ 0x09, 0x00, 0xC0, 0x21, 0x04, 0x30, 0x30, 0x00,
+ 0x00, 0x00, 0x04, 0x03, 0x00, 0x09, 0x00, 0xC4,
+ 0x21, 0x04, 0x30, 0x01, 0x00, 0x00, 0x00, 0x04,
+ 0x03, 0x00, 0x09, 0x00, 0xC8, 0x21, 0x04, 0x30,
+ 0x01, 0x00, 0x00, 0x00, 0x04, 0x03, 0x00, 0x09,
+ 0x00, 0xCC, 0x21, 0x04, 0x30, 0x01, 0x00, 0x00,
+ 0x00, 0x04, 0x03, 0x00, 0x09, 0x00, 0xD0, 0x21,
+ 0x04, 0x30, 0x01, 0x00, 0x00, 0x00, 0x04, 0x03,
+ 0x00, 0x09, 0x00, 0xD4, 0x21, 0x04, 0x30, 0x01,
+ 0x00, 0x00, 0x00, 0x04, 0x03, 0x00, 0x09, 0x00,
+ 0xD8, 0x21, 0x04, 0x30, 0x01, 0x00, 0x00, 0x00,
+ 0x04, 0x03, 0x00, 0x09, 0x00, 0xDC, 0x21, 0x04,
+ 0x30, 0x1F, 0x00, 0x00, 0x00, 0x04, 0x03, 0x00,
+ 0x09, 0x00, 0xE0, 0x21, 0x04, 0x30, 0x00, 0x00,
+ 0x00, 0x00, 0x04, 0x03, 0x00, 0x09, 0x00, 0xA0,
+ 0x20, 0x04, 0x30, 0xEF, 0xE1, 0x00, 0x00, 0x04,
+ 0x03, 0x00, 0x09, 0x00, 0xA4, 0x20, 0x04, 0x30,
+ 0x00, 0x00, 0x00, 0x00, 0x04, 0x03, 0x00, 0x09,
+ 0x00, 0xB0, 0x20, 0x04, 0x30, 0x00, 0x00, 0x00,
+ 0x00, 0x04, 0x03, 0x00, 0x09, 0x00, 0xC4, 0x20,
+ 0x04, 0x30, 0x14, 0x00, 0x00, 0x00, 0x04, 0x03,
+ 0x00, 0x09, 0x00, 0xC8, 0x20, 0x04, 0x30, 0x00,
+ 0x00, 0x00, 0x00, 0x04, 0x03, 0x00, 0x09, 0x00,
+ 0xCC, 0x20, 0x04, 0x30, 0x20, 0x00, 0x00, 0x00,
+ 0x04, 0x03, 0x00, 0x09, 0x00, 0x50, 0x20, 0x04,
+ 0x30, 0x00, 0x02, 0xA8, 0x02, 0x04, 0x03, 0x00,
+ 0x09, 0x00, 0xA8, 0x20, 0x04, 0x30, 0xFE, 0x21,
+ 0x00, 0x00, 0x04, 0x03, 0x00, 0x09, 0x00, 0x04,
+ 0x00, 0x00, 0x38, 0x00, 0x07, 0x00, 0x00, 0x04,
+ 0x03, 0x00, 0x09, 0x00, 0x08, 0x00, 0x00, 0x38,
+ 0x00, 0x15, 0x00, 0x00, 0x04, 0x03, 0x00, 0x09,
+ 0x00, 0x0C, 0x00, 0x00, 0x38, 0x01, 0x03, 0x02,
+ 0x00, 0x04, 0x03, 0x00, 0x09, 0x00, 0x10, 0x00,
+ 0x00, 0x38, 0x01, 0x07, 0x02, 0x00, 0x04, 0x03,
+ 0x00, 0x09, 0x00, 0x14, 0x00, 0x00, 0x38, 0x0C,
+ 0x0C, 0x05, 0x00, 0x04, 0x02, 0x00, 0x80, 0x05,
+ 0xFF, 0xF3, 0x07, 0x20, 0x80, 0xF2, 0x07, 0x20,
+ 0xFF, 0xF3, 0x07, 0x20, 0x80, 0xF2, 0x07, 0x20,
+ 0xFF, 0xF3, 0x07, 0x20, 0x80, 0xF2, 0x07, 0x20,
+ 0xFF, 0xF3, 0x07, 0x20, 0x80, 0xF2, 0x07, 0x20,
+ 0xFF, 0xF3, 0x07, 0x20, 0x80, 0xF2, 0x07, 0x20,
+ 0xFF, 0xF3, 0x07, 0x20, 0x80, 0xF2, 0x07, 0x20,
+ 0xFF, 0xF3, 0x07, 0x20, 0x80, 0xF2, 0x07, 0x20,
+ 0xFF, 0xF3, 0x07, 0x20, 0x80, 0xF2, 0x07, 0x20,
+ 0xFF, 0xF3, 0x07, 0x20, 0x80, 0xF2, 0x07, 0x20,
+ 0xFF, 0xF3, 0x07, 0x20, 0x80, 0xF2, 0x07, 0x20,
+ 0xFF, 0xF3, 0x07, 0x20, 0x80, 0xF2, 0x07, 0x20,
+ 0xFF, 0xF3, 0x07, 0x20, 0x80, 0xF2, 0x07, 0x20,
+ 0xFF, 0xF3, 0x07, 0x20, 0x80, 0xF2, 0x07, 0x20,
+ 0xFF, 0xF3, 0x07, 0x20, 0x80, 0xF2, 0x07, 0x20,
+ 0xFF, 0xF3, 0x07, 0x20, 0x80, 0xF2, 0x07, 0x20,
+ 0xFF, 0xF3, 0x07, 0x20, 0x80, 0xF2, 0x07, 0x20,
+ 0xFF, 0xF3, 0x07, 0x20, 0x80, 0xF2, 0x07, 0x20,
+ 0xFF, 0xF3, 0x07, 0x20, 0x80, 0xF2, 0x07, 0x20,
+ 0xFF, 0xF3, 0x07, 0x20, 0x80, 0xF2, 0x07, 0x20,
+ 0xFF, 0xF3, 0x07, 0x20, 0x80, 0xF2, 0x07, 0x20,
+ 0xFF, 0xF3, 0x07, 0x20, 0x80, 0xF2, 0x07, 0x20,
+ 0xFF, 0xF3, 0x07, 0x20, 0x80, 0xF2, 0x07, 0x20,
+ 0xFF, 0xF3, 0x07, 0x20, 0x80, 0xF2, 0x07, 0x20,
+ 0xFF, 0xF3, 0x07, 0x20, 0x80, 0xF2, 0x07, 0x20,
+ 0xFF, 0xF3, 0x07, 0x20, 0x80, 0xF2, 0x07, 0x20,
+ 0xFF, 0xF3, 0x07, 0x20, 0x80, 0xF2, 0x07, 0x20,
+ 0xFF, 0xF3, 0x07, 0x20, 0x80, 0xF2, 0x07, 0x20,
+ 0xFF, 0xF3, 0x07, 0x20, 0x80, 0xF2, 0x07, 0x20,
+ 0xFF, 0xF3, 0x07, 0x20, 0x80, 0xF2, 0x07, 0x20,
+ 0xFF, 0xF3, 0x07, 0x20, 0x80, 0xF2, 0x07, 0x20,
+ 0xFF, 0xF3, 0x07, 0x20, 0x80, 0xF2, 0x07, 0x20,
+ 0xFF, 0xF3, 0x07, 0x20, 0x80, 0xF2, 0x07, 0x20,
+ 0xFF, 0xF3, 0x07, 0x20, 0x80, 0xF2, 0x07, 0x20,
+ 0xFF, 0xF3, 0x07, 0x20, 0x80, 0xF2, 0x07, 0x20,
+ 0xFF, 0xF3, 0x07, 0x20, 0x80, 0xF2, 0x07, 0x20,
+ 0xFF, 0xF3, 0x07, 0x20, 0x80, 0xF2, 0x07, 0x20,
+ 0xFF, 0xF3, 0x07, 0x20, 0x80, 0xF2, 0x07, 0x20,
+ 0xFF, 0xF3, 0x07, 0x20, 0x80, 0xF2, 0x07, 0x20,
+ 0xFF, 0xF3, 0x07, 0x20, 0x80, 0xF2, 0x07, 0x20,
+ 0xFF, 0xF3, 0x07, 0x20, 0x80, 0xF2, 0x07, 0x20,
+ 0xFF, 0xF3, 0x07, 0x20, 0x80, 0xF2, 0x07, 0x20,
+ 0xFF, 0xF3, 0x07, 0x20, 0x80, 0xF2, 0x07, 0x20,
+ 0xFF, 0xF3, 0x07, 0x20, 0x80, 0xF2, 0x07, 0x20,
+ 0xFF, 0xF3, 0x07, 0x20, 0x80, 0xF2, 0x07, 0x20,
+ 0xFF, 0xF3, 0x07, 0x20, 0x80, 0xF2, 0x07, 0x20,
+ 0xFF, 0xF3, 0x07, 0x20, 0x80, 0xF2, 0x07, 0x20,
+ 0xFF, 0xF3, 0x07, 0x20, 0x80, 0xF2, 0x07, 0x20,
+ 0xFF, 0xF3, 0x07, 0x20, 0x80, 0xF2, 0x07, 0x20,
+ 0xFF, 0xF3, 0x07, 0x20, 0x80, 0xF2, 0x07, 0x20,
+ 0xFF, 0xF3, 0x07, 0x20, 0x80, 0xF2, 0x07, 0x20,
+ 0xFF, 0xF3, 0x07, 0x20, 0x80, 0xF2, 0x07, 0x20,
+ 0xFF, 0xF3, 0x07, 0x20, 0x80, 0xF2, 0x07, 0x20,
+ 0xFF, 0xF3, 0x07, 0x20, 0x80, 0xF2, 0x07, 0x20,
+ 0xFF, 0xF3, 0x07, 0x20, 0x80, 0xF2, 0x07, 0x20,
+ 0xFF, 0xF3, 0x07, 0x20, 0x80, 0xF2, 0x07, 0x20,
+ 0xFF, 0xF3, 0x07, 0x20, 0x80, 0xF2, 0x07, 0x20,
+ 0xFF, 0xF3, 0x07, 0x20, 0x80, 0xF2, 0x07, 0x20,
+ 0xFF, 0xF3, 0x07, 0x20, 0x80, 0xF2, 0x07, 0x20,
+ 0xFF, 0xF3, 0x07, 0x20, 0x80, 0xF2, 0x07, 0x20,
+ 0xFF, 0xF3, 0x07, 0x20, 0x80, 0xF2, 0x07, 0x20,
+ 0xFF, 0xF3, 0x07, 0x20, 0x80, 0xF2, 0x07, 0x20,
+ 0xFF, 0xF3, 0x07, 0x20, 0x80, 0xF2, 0x07, 0x20,
+ 0xFF, 0xF3, 0x07, 0x20, 0x80, 0xF2, 0x07, 0x20,
+ 0xFF, 0xF3, 0x07, 0x20, 0x80, 0xF2, 0x07, 0x20,
+ 0xFF, 0xF3, 0x07, 0x20, 0x80, 0xF2, 0x07, 0x20,
+ 0xFF, 0xF3, 0x07, 0x20, 0x80, 0xF2, 0x07, 0x20,
+ 0xFF, 0xF3, 0x07, 0x20, 0x80, 0xF2, 0x07, 0x20,
+ 0xFF, 0xF3, 0x07, 0x20, 0x80, 0xF2, 0x07, 0x20,
+ 0xFF, 0xF3, 0x07, 0x20, 0x80, 0xF2, 0x07, 0x20,
+ 0xFF, 0xF3, 0x07, 0x20, 0x80, 0xF2, 0x07, 0x20,
+ 0xFF, 0xF3, 0x07, 0x20, 0x80, 0xF2, 0x07, 0x20,
+ 0xFF, 0xF3, 0x07, 0x20, 0x80, 0xF2, 0x07, 0x20,
+ 0xFF, 0xF3, 0x07, 0x20, 0x80, 0xF2, 0x07, 0x20,
+ 0xFF, 0xF3, 0x07, 0x20, 0x80, 0xF2, 0x07, 0x20,
+ 0xFF, 0xF3, 0x07, 0x20, 0x80, 0xF2, 0x07, 0x20,
+ 0xFF, 0xF3, 0x07, 0x20, 0x80, 0xF2, 0x07, 0x20,
+ 0xFF, 0xF3, 0x07, 0x20, 0x80, 0xF2, 0x07, 0x20,
+ 0xFF, 0xF3, 0x07, 0x20, 0x80, 0xF2, 0x07, 0x20,
+ 0xFF, 0xF3, 0x07, 0x20, 0x80, 0xF2, 0x07, 0x20,
+ 0xFF, 0xF3, 0x07, 0x20, 0x80, 0xF2, 0x07, 0x20,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x0A, 0x00, 0x08, 0x00, 0x10, 0x03, 0x18, 0x1C,
+ 0x10, 0x03, 0x18, 0x1C, 0x03, 0x00, 0x09, 0x00,
+ 0x00, 0x20, 0x04, 0x30, 0x80, 0x00, 0x00, 0x00,
+ 0x04, 0x0C, 0x00, 0x01, 0x00, 0x00, 0x0D, 0x00,
+ 0x28, 0x00, 0xA0, 0x21, 0x04, 0x30, 0x01, 0x00,
+ 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00,
+ 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00,
+ 0x00, 0x00, 0xA0, 0x21, 0x04, 0x30, 0x00, 0x00,
+ 0x00, 0x00, 0x73, 0x00, 0x00, 0x10, 0x01, 0x00,
+ 0x00, 0x00, 0x0E, 0x00, 0xE0, 0x00, 0x00, 0x01,
+ 0x00, 0x01, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x7E, 0x00, 0x00, 0x01,
+ 0x01, 0x01, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x7E, 0x00, 0x00, 0x01,
+ 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x7E, 0x00, 0x00, 0x01,
+ 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x7E, 0x00, 0x00, 0x01,
+ 0x02, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x7E, 0x00, 0x00, 0x01,
+ 0x04, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x7E, 0x00, 0x00, 0x01,
+ 0x08, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x7E, 0x00, 0x00, 0x01,
+ 0x10, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x7E, 0x00, 0x00, 0x01,
+ 0x10, 0x01, 0x02, 0x01, 0x01, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x7E, 0x00, 0x00, 0x01,
+ 0x10, 0x01, 0x04, 0x01, 0x01, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x7E, 0x00, 0x00, 0x01,
+ 0x10, 0x01, 0x08, 0x01, 0x01, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x7E, 0x00, 0x00, 0x01,
+ 0x10, 0x01, 0x10, 0x01, 0x02, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x7E, 0x00, 0x00, 0x01,
+ 0x10, 0x01, 0x10, 0x01, 0x04, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x7E, 0x00, 0x00, 0x01,
+ 0x10, 0x01, 0x10, 0x01, 0x08, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x7E, 0x00, 0x0F, 0x00,
+ 0x01, 0x00, 0x01, 0x10, 0x00, 0x01, 0x00, 0x02,
+ 0x11, 0x00, 0x02, 0x00, 0x02, 0x00, 0x12, 0x00,
+ 0x01, 0x00, 0x0E, 0x05, 0x00, 0x0E, 0x00, 0x0C,
+ 0x20, 0xFD, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x00,
+ 0x00, 0x02, 0x08, 0x00, 0x00, 0x05, 0x00, 0x0E,
+ 0x00, 0x10, 0x20, 0xFD, 0x00, 0xFF, 0xFF, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x03,
+ 0x00, 0x09, 0x00, 0x04, 0x21, 0x04, 0x30, 0x01,
+ 0x00, 0x00, 0x00, 0x04, 0x03, 0x00, 0x09, 0x00,
+ 0x08, 0x21, 0x04, 0x30, 0x01, 0x00, 0x00, 0x00,
+ 0x04, 0x03, 0x00, 0x09, 0x00, 0x0C, 0x21, 0x04,
+ 0x30, 0x01, 0x00, 0x00, 0x00, 0x04, 0x03, 0x00,
+ 0x09, 0x00, 0x10, 0x21, 0x04, 0x30, 0x01, 0x00,
+ 0x00, 0x00, 0x04, 0x03, 0x00, 0x09, 0x00, 0x14,
+ 0x21, 0x04, 0x30, 0x01, 0x00, 0x00, 0x00, 0x04,
+ 0x03, 0x00, 0x09, 0x00, 0x18, 0x21, 0x04, 0x30,
+ 0x01, 0x00, 0x00, 0x00, 0x04, 0x03, 0x00, 0x09,
+ 0x00, 0x44, 0x21, 0x04, 0x30, 0x01, 0x00, 0x00,
+ 0x00, 0x04, 0x03, 0x00, 0x09, 0x00, 0x48, 0x21,
+ 0x04, 0x30, 0x01, 0x00, 0x00, 0x00, 0x04, 0x03,
+ 0x00, 0x09, 0x00, 0x4C, 0x21, 0x04, 0x30, 0x01,
+ 0x00, 0x00, 0x00, 0x04, 0x03, 0x00, 0x09, 0x00,
+ 0x50, 0x21, 0x04, 0x30, 0x01, 0x00, 0x00, 0x00,
+ 0x04, 0x03, 0x00, 0x09, 0x00, 0x54, 0x21, 0x04,
+ 0x30, 0x01, 0x00, 0x00, 0x00, 0x04, 0x03, 0x00,
+ 0x09, 0x00, 0x58, 0x21, 0x04, 0x30, 0x01, 0x00,
+ 0x00, 0x00, 0x04, 0x03, 0x00, 0x09, 0x00, 0xC8,
+ 0x20, 0x04, 0x30, 0x04, 0x00, 0x00, 0x00, 0x04,
+ 0x05, 0x00, 0x0E, 0x00, 0x14, 0x20, 0xFF, 0xFF,
+ 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x83, 0x00, 0x15, 0x00, 0x08, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x20, 0x28, 0x00, 0x00,
+};
+
+static unsigned char vfs5011_init_10[] = { /* 2612 B */
+ 0x02, 0xB0, 0x00, 0x20, 0x00, 0x03, 0x00, 0x09,
+ 0x00, 0x04, 0x20, 0x04, 0x30, 0x00, 0x00, 0x00,
+ 0x00, 0x04, 0x03, 0x00, 0x09, 0x00, 0x18, 0x20,
+ 0x04, 0x30, 0x01, 0x80, 0x4F, 0x00, 0x04, 0x03,
+ 0x00, 0x09, 0x00, 0x20, 0x20, 0x04, 0x30, 0x08,
+ 0x00, 0x80, 0x00, 0x04, 0x03, 0x00, 0x09, 0x00,
+ 0x24, 0x20, 0x04, 0x30, 0x00, 0x00, 0xFF, 0x01,
+ 0x04, 0x03, 0x00, 0x09, 0x00, 0x2C, 0x20, 0x04,
+ 0x30, 0x01, 0x00, 0x00, 0x00, 0x04, 0x03, 0x00,
+ 0x09, 0x00, 0x40, 0x20, 0x04, 0x30, 0xFF, 0x03,
+ 0x00, 0x00, 0x04, 0x03, 0x00, 0x09, 0x00, 0x44,
+ 0x20, 0x04, 0x30, 0xE7, 0x03, 0x00, 0x00, 0x04,
+ 0x03, 0x00, 0x09, 0x00, 0x48, 0x20, 0x04, 0x30,
+ 0xFF, 0x03, 0x00, 0x00, 0x04, 0x03, 0x00, 0x09,
+ 0x00, 0x4C, 0x20, 0x04, 0x30, 0xFF, 0x03, 0x00,
+ 0x00, 0x04, 0x03, 0x00, 0x09, 0x00, 0x54, 0x20,
+ 0x04, 0x30, 0x00, 0x3E, 0x01, 0x00, 0x04, 0x03,
+ 0x00, 0x09, 0x00, 0x00, 0x21, 0x04, 0x30, 0x30,
+ 0x00, 0x00, 0x00, 0x04, 0x03, 0x00, 0x09, 0x00,
+ 0x04, 0x21, 0x04, 0x30, 0x01, 0x00, 0x00, 0x00,
+ 0x04, 0x03, 0x00, 0x09, 0x00, 0x08, 0x21, 0x04,
+ 0x30, 0x01, 0x00, 0x00, 0x00, 0x04, 0x03, 0x00,
+ 0x09, 0x00, 0x0C, 0x21, 0x04, 0x30, 0x01, 0x00,
+ 0x00, 0x00, 0x04, 0x03, 0x00, 0x09, 0x00, 0x10,
+ 0x21, 0x04, 0x30, 0x00, 0x00, 0x00, 0x00, 0x04,
+ 0x03, 0x00, 0x09, 0x00, 0x14, 0x21, 0x04, 0x30,
+ 0x01, 0x00, 0x00, 0x00, 0x04, 0x03, 0x00, 0x09,
+ 0x00, 0x18, 0x21, 0x04, 0x30, 0x00, 0x00, 0x00,
+ 0x00, 0x04, 0x03, 0x00, 0x09, 0x00, 0x1C, 0x21,
+ 0x04, 0x30, 0x1F, 0x00, 0x00, 0x00, 0x04, 0x03,
+ 0x00, 0x09, 0x00, 0x20, 0x21, 0x04, 0x30, 0x04,
+ 0x00, 0x00, 0x00, 0x04, 0x03, 0x00, 0x09, 0x00,
+ 0x40, 0x21, 0x04, 0x30, 0x30, 0x00, 0x00, 0x00,
+ 0x04, 0x03, 0x00, 0x09, 0x00, 0x44, 0x21, 0x04,
+ 0x30, 0x01, 0x00, 0x00, 0x00, 0x04, 0x03, 0x00,
+ 0x09, 0x00, 0x48, 0x21, 0x04, 0x30, 0x01, 0x00,
+ 0x00, 0x00, 0x04, 0x03, 0x00, 0x09, 0x00, 0x4C,
+ 0x21, 0x04, 0x30, 0x01, 0x00, 0x00, 0x00, 0x04,
+ 0x03, 0x00, 0x09, 0x00, 0x50, 0x21, 0x04, 0x30,
+ 0x00, 0x00, 0x00, 0x00, 0x04, 0x03, 0x00, 0x09,
+ 0x00, 0x54, 0x21, 0x04, 0x30, 0x01, 0x00, 0x00,
+ 0x00, 0x04, 0x03, 0x00, 0x09, 0x00, 0x58, 0x21,
+ 0x04, 0x30, 0x00, 0x00, 0x00, 0x00, 0x04, 0x03,
+ 0x00, 0x09, 0x00, 0x5C, 0x21, 0x04, 0x30, 0x1F,
+ 0x00, 0x00, 0x00, 0x04, 0x03, 0x00, 0x09, 0x00,
+ 0x60, 0x21, 0x04, 0x30, 0x04, 0x00, 0x00, 0x00,
+ 0x04, 0x03, 0x00, 0x09, 0x00, 0x80, 0x21, 0x04,
+ 0x30, 0x30, 0x00, 0x00, 0x00, 0x04, 0x03, 0x00,
+ 0x09, 0x00, 0x84, 0x21, 0x04, 0x30, 0x01, 0x00,
+ 0x00, 0x00, 0x04, 0x03, 0x00, 0x09, 0x00, 0x88,
+ 0x21, 0x04, 0x30, 0x01, 0x00, 0x00, 0x00, 0x04,
+ 0x03, 0x00, 0x09, 0x00, 0x8C, 0x21, 0x04, 0x30,
+ 0x01, 0x00, 0x00, 0x00, 0x04, 0x03, 0x00, 0x09,
+ 0x00, 0x90, 0x21, 0x04, 0x30, 0x00, 0x00, 0x00,
+ 0x00, 0x04, 0x03, 0x00, 0x09, 0x00, 0x94, 0x21,
+ 0x04, 0x30, 0x01, 0x00, 0x00, 0x00, 0x04, 0x03,
+ 0x00, 0x09, 0x00, 0x98, 0x21, 0x04, 0x30, 0x00,
+ 0x00, 0x00, 0x00, 0x04, 0x03, 0x00, 0x09, 0x00,
+ 0x9C, 0x21, 0x04, 0x30, 0x1F, 0x00, 0x00, 0x00,
+ 0x04, 0x03, 0x00, 0x09, 0x00, 0xA0, 0x21, 0x04,
+ 0x30, 0x04, 0x00, 0x00, 0x00, 0x04, 0x03, 0x00,
+ 0x09, 0x00, 0xC0, 0x21, 0x04, 0x30, 0x30, 0x00,
+ 0x00, 0x00, 0x04, 0x03, 0x00, 0x09, 0x00, 0xC4,
+ 0x21, 0x04, 0x30, 0x01, 0x00, 0x00, 0x00, 0x04,
+ 0x03, 0x00, 0x09, 0x00, 0xC8, 0x21, 0x04, 0x30,
+ 0x01, 0x00, 0x00, 0x00, 0x04, 0x03, 0x00, 0x09,
+ 0x00, 0xCC, 0x21, 0x04, 0x30, 0x01, 0x00, 0x00,
+ 0x00, 0x04, 0x03, 0x00, 0x09, 0x00, 0xD0, 0x21,
+ 0x04, 0x30, 0x00, 0x00, 0x00, 0x00, 0x04, 0x03,
+ 0x00, 0x09, 0x00, 0xD4, 0x21, 0x04, 0x30, 0x01,
+ 0x00, 0x00, 0x00, 0x04, 0x03, 0x00, 0x09, 0x00,
+ 0xD8, 0x21, 0x04, 0x30, 0x00, 0x00, 0x00, 0x00,
+ 0x04, 0x03, 0x00, 0x09, 0x00, 0xDC, 0x21, 0x04,
+ 0x30, 0x1F, 0x00, 0x00, 0x00, 0x04, 0x03, 0x00,
+ 0x09, 0x00, 0xE0, 0x21, 0x04, 0x30, 0x04, 0x00,
+ 0x00, 0x00, 0x04, 0x03, 0x00, 0x09, 0x00, 0xA0,
+ 0x20, 0x04, 0x30, 0xEF, 0xE1, 0x00, 0x00, 0x04,
+ 0x03, 0x00, 0x09, 0x00, 0xA4, 0x20, 0x04, 0x30,
+ 0x00, 0x00, 0x00, 0x00, 0x04, 0x03, 0x00, 0x09,
+ 0x00, 0xB0, 0x20, 0x04, 0x30, 0x00, 0x00, 0x00,
+ 0x00, 0x04, 0x03, 0x00, 0x09, 0x00, 0xC4, 0x20,
+ 0x04, 0x30, 0x14, 0x00, 0x00, 0x00, 0x04, 0x03,
+ 0x00, 0x09, 0x00, 0xC8, 0x20, 0x04, 0x30, 0x00,
+ 0x00, 0x00, 0x00, 0x04, 0x03, 0x00, 0x09, 0x00,
+ 0xCC, 0x20, 0x04, 0x30, 0x20, 0x00, 0x00, 0x00,
+ 0x04, 0x03, 0x00, 0x09, 0x00, 0x50, 0x20, 0x04,
+ 0x30, 0x00, 0x02, 0xA8, 0x02, 0x04, 0x03, 0x00,
+ 0x09, 0x00, 0xA8, 0x20, 0x04, 0x30, 0xFE, 0x21,
+ 0x00, 0x00, 0x04, 0x03, 0x00, 0x09, 0x00, 0x04,
+ 0x00, 0x00, 0x38, 0x00, 0x07, 0x00, 0x00, 0x04,
+ 0x03, 0x00, 0x09, 0x00, 0x08, 0x00, 0x00, 0x38,
+ 0x00, 0x15, 0x00, 0x00, 0x04, 0x03, 0x00, 0x09,
+ 0x00, 0x0C, 0x00, 0x00, 0x38, 0x01, 0x03, 0x02,
+ 0x00, 0x04, 0x03, 0x00, 0x09, 0x00, 0x10, 0x00,
+ 0x00, 0x38, 0x01, 0x07, 0x02, 0x00, 0x04, 0x03,
+ 0x00, 0x09, 0x00, 0x14, 0x00, 0x00, 0x38, 0x0C,
+ 0x0C, 0x05, 0x00, 0x04, 0x02, 0x00, 0x80, 0x05,
+ 0xFF, 0xF3, 0x47, 0x20, 0x80, 0xF2, 0x47, 0x20,
+ 0xFF, 0xF3, 0x47, 0x20, 0x80, 0xF2, 0x47, 0x20,
+ 0xFF, 0xF3, 0x47, 0x20, 0x80, 0xF2, 0x47, 0x20,
+ 0xFF, 0xF3, 0x47, 0x20, 0x80, 0xF2, 0x47, 0x20,
+ 0xFF, 0xF3, 0x47, 0x20, 0x80, 0xF2, 0x47, 0x20,
+ 0xFF, 0xF3, 0x47, 0x20, 0x80, 0xF2, 0x47, 0x20,
+ 0xFF, 0xF3, 0x47, 0x20, 0x80, 0xF2, 0x47, 0x20,
+ 0xFF, 0xF3, 0x47, 0x20, 0x80, 0xF2, 0x47, 0x20,
+ 0xFF, 0xF3, 0x47, 0x20, 0x80, 0xF2, 0x47, 0x20,
+ 0xFF, 0xF3, 0x47, 0x20, 0x80, 0xF2, 0x47, 0x20,
+ 0xFF, 0xF3, 0x47, 0x20, 0x80, 0xF2, 0x47, 0x20,
+ 0xFF, 0xF3, 0x47, 0x20, 0x80, 0xF2, 0x47, 0x20,
+ 0xFF, 0xF3, 0x47, 0x20, 0x80, 0xF2, 0x47, 0x20,
+ 0xFF, 0xF3, 0x47, 0x20, 0x80, 0xF2, 0x47, 0x20,
+ 0xFF, 0xF3, 0x47, 0x20, 0x80, 0xF2, 0x47, 0x20,
+ 0xFF, 0xF3, 0x47, 0x20, 0x80, 0xF2, 0x47, 0x20,
+ 0xFF, 0xF3, 0x47, 0x20, 0x80, 0xF2, 0x47, 0x20,
+ 0xFF, 0xF3, 0x47, 0x20, 0x80, 0xF2, 0x47, 0x20,
+ 0xFF, 0xF3, 0x47, 0x20, 0x80, 0xF2, 0x47, 0x20,
+ 0xFF, 0xF3, 0x47, 0x20, 0x80, 0xF2, 0x47, 0x20,
+ 0xFF, 0xF3, 0x47, 0x20, 0x80, 0xF2, 0x47, 0x20,
+ 0xFF, 0xF3, 0x47, 0x20, 0x80, 0xF2, 0x47, 0x20,
+ 0xFF, 0xF3, 0x47, 0x20, 0x80, 0xF2, 0x47, 0x20,
+ 0xFF, 0xF3, 0x47, 0x20, 0x80, 0xF2, 0x47, 0x20,
+ 0xFF, 0xF3, 0x47, 0x20, 0x80, 0xF2, 0x47, 0x20,
+ 0xFF, 0xF3, 0x47, 0x20, 0x80, 0xF2, 0x47, 0x20,
+ 0xFF, 0xF3, 0x47, 0x20, 0x80, 0xF2, 0x47, 0x20,
+ 0xFF, 0xF3, 0x47, 0x20, 0x80, 0xF2, 0x47, 0x20,
+ 0xFF, 0xF3, 0x47, 0x20, 0x80, 0xF2, 0x47, 0x20,
+ 0xFF, 0xF3, 0x47, 0x20, 0x80, 0xF2, 0x47, 0x20,
+ 0xFF, 0xF3, 0x47, 0x20, 0x80, 0xF2, 0x47, 0x20,
+ 0xFF, 0xF3, 0x47, 0x20, 0x80, 0xF2, 0x47, 0x20,
+ 0xFF, 0xF3, 0x47, 0x20, 0x80, 0xF2, 0x47, 0x20,
+ 0xFF, 0xF3, 0x47, 0x20, 0x80, 0xF2, 0x47, 0x20,
+ 0xFF, 0xF3, 0x47, 0x20, 0x80, 0xF2, 0x47, 0x20,
+ 0xFF, 0xF3, 0x47, 0x20, 0x80, 0xF2, 0x47, 0x20,
+ 0xFF, 0xF3, 0x47, 0x20, 0x80, 0xF2, 0x47, 0x20,
+ 0xFF, 0xF3, 0x47, 0x20, 0x80, 0xF2, 0x47, 0x20,
+ 0xFF, 0xF3, 0x47, 0x20, 0x80, 0xF2, 0x47, 0x20,
+ 0xFF, 0xF3, 0x47, 0x20, 0x80, 0xF2, 0x47, 0x20,
+ 0xFF, 0xF3, 0x47, 0x20, 0x80, 0xF2, 0x47, 0x20,
+ 0xFF, 0xF3, 0x47, 0x20, 0x80, 0xF2, 0x47, 0x20,
+ 0xFF, 0xF3, 0x47, 0x20, 0x80, 0xF2, 0x47, 0x20,
+ 0xFF, 0xF3, 0x47, 0x20, 0x80, 0xF2, 0x47, 0x20,
+ 0xFF, 0xF3, 0x47, 0x20, 0x80, 0xF2, 0x47, 0x20,
+ 0xFF, 0xF3, 0x47, 0x20, 0x80, 0xF2, 0x47, 0x20,
+ 0xFF, 0xF3, 0x47, 0x20, 0x80, 0xF2, 0x47, 0x20,
+ 0xFF, 0xF3, 0x47, 0x20, 0x80, 0xF2, 0x47, 0x20,
+ 0xFF, 0xF3, 0x47, 0x20, 0x80, 0xF2, 0x47, 0x20,
+ 0xFF, 0xF3, 0x47, 0x20, 0x80, 0xF2, 0x47, 0x20,
+ 0xFF, 0xF3, 0x47, 0x20, 0x80, 0xF2, 0x47, 0x20,
+ 0xFF, 0xF3, 0x47, 0x20, 0x80, 0xF2, 0x47, 0x20,
+ 0xFF, 0xF3, 0x47, 0x20, 0x80, 0xF2, 0x47, 0x20,
+ 0xFF, 0xF3, 0x47, 0x20, 0x80, 0xF2, 0x47, 0x20,
+ 0xFF, 0xF3, 0x47, 0x20, 0x80, 0xF2, 0x47, 0x20,
+ 0xFF, 0xF3, 0x47, 0x20, 0x80, 0xF2, 0x47, 0x20,
+ 0xFF, 0xF3, 0x47, 0x20, 0x80, 0xF2, 0x47, 0x20,
+ 0xFF, 0xF3, 0x47, 0x20, 0x80, 0xF2, 0x47, 0x20,
+ 0xFF, 0xF3, 0x47, 0x20, 0x80, 0xF2, 0x47, 0x20,
+ 0xFF, 0xF3, 0x47, 0x20, 0x80, 0xF2, 0x47, 0x20,
+ 0xFF, 0xF3, 0x47, 0x20, 0x80, 0xF2, 0x47, 0x20,
+ 0xFF, 0xF3, 0x47, 0x20, 0x80, 0xF2, 0x47, 0x20,
+ 0xFF, 0xF3, 0x47, 0x20, 0x80, 0xF2, 0x47, 0x20,
+ 0xFF, 0xF3, 0x47, 0x20, 0x80, 0xF2, 0x47, 0x20,
+ 0xFF, 0xF3, 0x47, 0x20, 0x80, 0xF2, 0x47, 0x20,
+ 0xFF, 0xF3, 0x47, 0x20, 0x80, 0xF2, 0x47, 0x20,
+ 0xFF, 0xF3, 0x47, 0x20, 0x80, 0xF2, 0x47, 0x20,
+ 0xFF, 0xF3, 0x47, 0x20, 0x80, 0xF2, 0x47, 0x20,
+ 0xFF, 0xF3, 0x47, 0x20, 0x80, 0xF2, 0x47, 0x20,
+ 0xFF, 0xF3, 0x47, 0x20, 0x80, 0xF2, 0x47, 0x20,
+ 0xFF, 0xF3, 0x47, 0x20, 0x80, 0xF2, 0x47, 0x20,
+ 0xFF, 0xF3, 0x47, 0x20, 0x80, 0xF2, 0x47, 0x20,
+ 0xFF, 0xF3, 0x47, 0x20, 0x80, 0xF2, 0x47, 0x20,
+ 0xFF, 0xF3, 0x47, 0x20, 0x80, 0xF2, 0x47, 0x20,
+ 0xFF, 0xF3, 0x47, 0x20, 0x80, 0xF2, 0x47, 0x20,
+ 0xFF, 0xF3, 0x47, 0x20, 0x80, 0xF2, 0x47, 0x20,
+ 0xFF, 0xF3, 0x47, 0x20, 0x80, 0xF2, 0x47, 0x20,
+ 0xFF, 0xF3, 0x47, 0x20, 0x80, 0xF2, 0x47, 0x20,
+ 0xFF, 0xF3, 0x47, 0x20, 0x80, 0xF2, 0x47, 0x20,
+ 0xFF, 0xF3, 0x47, 0x20, 0x80, 0xF2, 0x47, 0x20,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x0A, 0x00, 0x08, 0x00, 0x10, 0x03, 0x18, 0x1C,
+ 0x10, 0x03, 0x18, 0x1C, 0x03, 0x00, 0x09, 0x00,
+ 0x00, 0x20, 0x04, 0x30, 0x80, 0x00, 0x00, 0x00,
+ 0x04, 0x0C, 0x00, 0x01, 0x00, 0x01, 0x0D, 0x00,
+ 0x28, 0x00, 0xA0, 0x21, 0x04, 0x30, 0x00, 0x00,
+ 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x0F, 0x00,
+ 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x01, 0x00,
+ 0x00, 0x00, 0xA0, 0x21, 0x04, 0x30, 0x00, 0x00,
+ 0x00, 0x00, 0x01, 0x1C, 0x02, 0xB0, 0x01, 0x00,
+ 0x00, 0x00, 0x0E, 0x00, 0x10, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0F, 0x00,
+ 0x01, 0x00, 0x01, 0x10, 0x00, 0x01, 0x00, 0x02,
+ 0x11, 0x00, 0x02, 0x00, 0x20, 0x00, 0x12, 0x00,
+ 0x01, 0x00, 0x01, 0x05, 0x00, 0x0E, 0x00, 0x0C,
+ 0x20, 0xFD, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x00,
+ 0x00, 0x02, 0x08, 0x00, 0x00, 0x05, 0x00, 0x0E,
+ 0x00, 0x10, 0x20, 0xFD, 0x00, 0xFF, 0xFF, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x03,
+ 0x00, 0x09, 0x00, 0x04, 0x21, 0x04, 0x30, 0x01,
+ 0x00, 0x00, 0x00, 0x04, 0x03, 0x00, 0x09, 0x00,
+ 0x08, 0x21, 0x04, 0x30, 0x01, 0x00, 0x00, 0x00,
+ 0x04, 0x03, 0x00, 0x09, 0x00, 0x0C, 0x21, 0x04,
+ 0x30, 0x01, 0x00, 0x00, 0x00, 0x04, 0x03, 0x00,
+ 0x09, 0x00, 0x10, 0x21, 0x04, 0x30, 0x01, 0x00,
+ 0x00, 0x00, 0x04, 0x03, 0x00, 0x09, 0x00, 0x14,
+ 0x21, 0x04, 0x30, 0x01, 0x00, 0x00, 0x00, 0x04,
+ 0x03, 0x00, 0x09, 0x00, 0x18, 0x21, 0x04, 0x30,
+ 0x01, 0x00, 0x00, 0x00, 0x04, 0x03, 0x00, 0x09,
+ 0x00, 0x44, 0x21, 0x04, 0x30, 0x01, 0x00, 0x00,
+ 0x00, 0x04, 0x03, 0x00, 0x09, 0x00, 0x48, 0x21,
+ 0x04, 0x30, 0x01, 0x00, 0x00, 0x00, 0x04, 0x03,
+ 0x00, 0x09, 0x00, 0x4C, 0x21, 0x04, 0x30, 0x01,
+ 0x00, 0x00, 0x00, 0x04, 0x03, 0x00, 0x09, 0x00,
+ 0x50, 0x21, 0x04, 0x30, 0x01, 0x00, 0x00, 0x00,
+ 0x04, 0x03, 0x00, 0x09, 0x00, 0x54, 0x21, 0x04,
+ 0x30, 0x01, 0x00, 0x00, 0x00, 0x04, 0x03, 0x00,
+ 0x09, 0x00, 0x58, 0x21, 0x04, 0x30, 0x01, 0x00,
+ 0x00, 0x00, 0x04, 0x03, 0x00, 0x09, 0x00, 0xC8,
+ 0x20, 0x04, 0x30, 0x04, 0x00, 0x00, 0x00, 0x04,
+ 0x05, 0x00, 0x0E, 0x00, 0x14, 0x20, 0xFF, 0xFF,
+ 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x83, 0x00, 0x03, 0x00, 0x09, 0x00, 0x84, 0x21,
+ 0x04, 0x30, 0x01, 0x00, 0x00, 0x00, 0x04, 0x03,
+ 0x00, 0x09, 0x00, 0x88, 0x21, 0x04, 0x30, 0x01,
+ 0x00, 0x00, 0x00, 0x04, 0x03, 0x00, 0x09, 0x00,
+ 0x8C, 0x21, 0x04, 0x30, 0x01, 0x00, 0x00, 0x00,
+ 0x04, 0x03, 0x00, 0x09, 0x00, 0x90, 0x21, 0x04,
+ 0x30, 0x01, 0x00, 0x00, 0x00, 0x04, 0x03, 0x00,
+ 0x09, 0x00, 0x94, 0x21, 0x04, 0x30, 0x01, 0x00,
+ 0x00, 0x00, 0x04, 0x03, 0x00, 0x09, 0x00, 0x98,
+ 0x21, 0x04, 0x30, 0x00, 0x00, 0x00, 0x00, 0x04,
+ 0x15, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x20, 0x28, 0x00, 0x00,
+};
+
+static unsigned char vfs5011_init_11[] = { /* 2625 B */
+ 0x02, 0xB0, 0x00, 0x20, 0x00, 0x03, 0x00, 0x09,
+ 0x00, 0x04, 0x20, 0x04, 0x30, 0x00, 0x00, 0x00,
+ 0x00, 0x04, 0x03, 0x00, 0x09, 0x00, 0x18, 0x20,
+ 0x04, 0x30, 0x01, 0x80, 0x4F, 0x00, 0x04, 0x03,
+ 0x00, 0x09, 0x00, 0x20, 0x20, 0x04, 0x30, 0x08,
+ 0x00, 0x80, 0x00, 0x04, 0x03, 0x00, 0x09, 0x00,
+ 0x24, 0x20, 0x04, 0x30, 0x00, 0x00, 0xFF, 0x01,
+ 0x04, 0x03, 0x00, 0x09, 0x00, 0x2C, 0x20, 0x04,
+ 0x30, 0x01, 0x00, 0x00, 0x00, 0x04, 0x03, 0x00,
+ 0x09, 0x00, 0x40, 0x20, 0x04, 0x30, 0xFF, 0x03,
+ 0x00, 0x00, 0x04, 0x03, 0x00, 0x09, 0x00, 0x44,
+ 0x20, 0x04, 0x30, 0xE6, 0x03, 0x00, 0x00, 0x04,
+ 0x03, 0x00, 0x09, 0x00, 0x48, 0x20, 0x04, 0x30,
+ 0xE7, 0x03, 0x00, 0x00, 0x04, 0x03, 0x00, 0x09,
+ 0x00, 0x4C, 0x20, 0x04, 0x30, 0xE8, 0x03, 0x00,
+ 0x00, 0x04, 0x03, 0x00, 0x09, 0x00, 0x54, 0x20,
+ 0x04, 0x30, 0x00, 0x3E, 0x01, 0x00, 0x04, 0x03,
+ 0x00, 0x09, 0x00, 0x00, 0x21, 0x04, 0x30, 0x00,
+ 0x00, 0x00, 0x00, 0x04, 0x03, 0x00, 0x09, 0x00,
+ 0x04, 0x21, 0x04, 0x30, 0x01, 0x00, 0x00, 0x00,
+ 0x04, 0x03, 0x00, 0x09, 0x00, 0x08, 0x21, 0x04,
+ 0x30, 0x01, 0x00, 0x00, 0x00, 0x04, 0x03, 0x00,
+ 0x09, 0x00, 0x0C, 0x21, 0x04, 0x30, 0x01, 0x00,
+ 0x00, 0x00, 0x04, 0x03, 0x00, 0x09, 0x00, 0x10,
+ 0x21, 0x04, 0x30, 0x01, 0x00, 0x00, 0x00, 0x04,
+ 0x03, 0x00, 0x09, 0x00, 0x14, 0x21, 0x04, 0x30,
+ 0x01, 0x00, 0x00, 0x00, 0x04, 0x03, 0x00, 0x09,
+ 0x00, 0x18, 0x21, 0x04, 0x30, 0x01, 0x00, 0x00,
+ 0x00, 0x04, 0x03, 0x00, 0x09, 0x00, 0x1C, 0x21,
+ 0x04, 0x30, 0x1F, 0x00, 0x00, 0x00, 0x04, 0x03,
+ 0x00, 0x09, 0x00, 0x20, 0x21, 0x04, 0x30, 0x08,
+ 0x00, 0x00, 0x00, 0x04, 0x03, 0x00, 0x09, 0x00,
+ 0x40, 0x21, 0x04, 0x30, 0x00, 0x00, 0x00, 0x00,
+ 0x04, 0x03, 0x00, 0x09, 0x00, 0x44, 0x21, 0x04,
+ 0x30, 0x01, 0x00, 0x00, 0x00, 0x04, 0x03, 0x00,
+ 0x09, 0x00, 0x48, 0x21, 0x04, 0x30, 0x01, 0x00,
+ 0x00, 0x00, 0x04, 0x03, 0x00, 0x09, 0x00, 0x4C,
+ 0x21, 0x04, 0x30, 0x01, 0x00, 0x00, 0x00, 0x04,
+ 0x03, 0x00, 0x09, 0x00, 0x50, 0x21, 0x04, 0x30,
+ 0x01, 0x00, 0x00, 0x00, 0x04, 0x03, 0x00, 0x09,
+ 0x00, 0x54, 0x21, 0x04, 0x30, 0x01, 0x00, 0x00,
+ 0x00, 0x04, 0x03, 0x00, 0x09, 0x00, 0x58, 0x21,
+ 0x04, 0x30, 0x01, 0x00, 0x00, 0x00, 0x04, 0x03,
+ 0x00, 0x09, 0x00, 0x5C, 0x21, 0x04, 0x30, 0x1F,
+ 0x00, 0x00, 0x00, 0x04, 0x03, 0x00, 0x09, 0x00,
+ 0x60, 0x21, 0x04, 0x30, 0x08, 0x00, 0x00, 0x00,
+ 0x04, 0x03, 0x00, 0x09, 0x00, 0x80, 0x21, 0x04,
+ 0x30, 0x00, 0x00, 0x00, 0x00, 0x04, 0x03, 0x00,
+ 0x09, 0x00, 0x84, 0x21, 0x04, 0x30, 0x01, 0x00,
+ 0x00, 0x00, 0x04, 0x03, 0x00, 0x09, 0x00, 0x88,
+ 0x21, 0x04, 0x30, 0x01, 0x00, 0x00, 0x00, 0x04,
+ 0x03, 0x00, 0x09, 0x00, 0x8C, 0x21, 0x04, 0x30,
+ 0x01, 0x00, 0x00, 0x00, 0x04, 0x03, 0x00, 0x09,
+ 0x00, 0x90, 0x21, 0x04, 0x30, 0x01, 0x00, 0x00,
+ 0x00, 0x04, 0x03, 0x00, 0x09, 0x00, 0x94, 0x21,
+ 0x04, 0x30, 0x01, 0x00, 0x00, 0x00, 0x04, 0x03,
+ 0x00, 0x09, 0x00, 0x98, 0x21, 0x04, 0x30, 0x01,
+ 0x00, 0x00, 0x00, 0x04, 0x03, 0x00, 0x09, 0x00,
+ 0x9C, 0x21, 0x04, 0x30, 0x1F, 0x00, 0x00, 0x00,
+ 0x04, 0x03, 0x00, 0x09, 0x00, 0xA0, 0x21, 0x04,
+ 0x30, 0x08, 0x00, 0x00, 0x00, 0x04, 0x03, 0x00,
+ 0x09, 0x00, 0xC0, 0x21, 0x04, 0x30, 0x00, 0x00,
+ 0x00, 0x00, 0x04, 0x03, 0x00, 0x09, 0x00, 0xC4,
+ 0x21, 0x04, 0x30, 0x01, 0x00, 0x00, 0x00, 0x04,
+ 0x03, 0x00, 0x09, 0x00, 0xC8, 0x21, 0x04, 0x30,
+ 0x01, 0x00, 0x00, 0x00, 0x04, 0x03, 0x00, 0x09,
+ 0x00, 0xCC, 0x21, 0x04, 0x30, 0x01, 0x00, 0x00,
+ 0x00, 0x04, 0x03, 0x00, 0x09, 0x00, 0xD0, 0x21,
+ 0x04, 0x30, 0x01, 0x00, 0x00, 0x00, 0x04, 0x03,
+ 0x00, 0x09, 0x00, 0xD4, 0x21, 0x04, 0x30, 0x01,
+ 0x00, 0x00, 0x00, 0x04, 0x03, 0x00, 0x09, 0x00,
+ 0xD8, 0x21, 0x04, 0x30, 0x01, 0x00, 0x00, 0x00,
+ 0x04, 0x03, 0x00, 0x09, 0x00, 0xDC, 0x21, 0x04,
+ 0x30, 0x1F, 0x00, 0x00, 0x00, 0x04, 0x03, 0x00,
+ 0x09, 0x00, 0xE0, 0x21, 0x04, 0x30, 0x08, 0x00,
+ 0x00, 0x00, 0x04, 0x03, 0x00, 0x09, 0x00, 0xA0,
+ 0x20, 0x04, 0x30, 0xEF, 0xE1, 0x00, 0x00, 0x04,
+ 0x03, 0x00, 0x09, 0x00, 0xA4, 0x20, 0x04, 0x30,
+ 0x00, 0x00, 0x00, 0x00, 0x04, 0x03, 0x00, 0x09,
+ 0x00, 0xB0, 0x20, 0x04, 0x30, 0x00, 0x00, 0x00,
+ 0x00, 0x04, 0x03, 0x00, 0x09, 0x00, 0xC4, 0x20,
+ 0x04, 0x30, 0x14, 0x00, 0x00, 0x00, 0x04, 0x03,
+ 0x00, 0x09, 0x00, 0xC8, 0x20, 0x04, 0x30, 0x00,
+ 0x00, 0x00, 0x00, 0x04, 0x03, 0x00, 0x09, 0x00,
+ 0xCC, 0x20, 0x04, 0x30, 0x20, 0x00, 0x00, 0x00,
+ 0x04, 0x03, 0x00, 0x09, 0x00, 0x50, 0x20, 0x04,
+ 0x30, 0x00, 0x02, 0xA8, 0x02, 0x04, 0x03, 0x00,
+ 0x09, 0x00, 0xA8, 0x20, 0x04, 0x30, 0xFE, 0x21,
+ 0x00, 0x00, 0x04, 0x03, 0x00, 0x09, 0x00, 0x04,
+ 0x00, 0x00, 0x38, 0x00, 0x07, 0x00, 0x00, 0x04,
+ 0x03, 0x00, 0x09, 0x00, 0x08, 0x00, 0x00, 0x38,
+ 0x00, 0x15, 0x00, 0x00, 0x04, 0x03, 0x00, 0x09,
+ 0x00, 0x0C, 0x00, 0x00, 0x38, 0x01, 0x03, 0x02,
+ 0x00, 0x04, 0x03, 0x00, 0x09, 0x00, 0x10, 0x00,
+ 0x00, 0x38, 0x01, 0x07, 0x02, 0x00, 0x04, 0x03,
+ 0x00, 0x09, 0x00, 0x14, 0x00, 0x00, 0x38, 0x0C,
+ 0x0C, 0x05, 0x00, 0x04, 0x02, 0x00, 0x80, 0x05,
+ 0xFF, 0x83, 0x07, 0x20, 0x5F, 0x82, 0x07, 0x20,
+ 0xFF, 0x83, 0x07, 0x20, 0x5F, 0x82, 0x07, 0x20,
+ 0xFF, 0x83, 0x07, 0x20, 0x5F, 0x82, 0x07, 0x20,
+ 0xFF, 0x83, 0x07, 0x20, 0x5F, 0x82, 0x07, 0x20,
+ 0xFF, 0x83, 0x07, 0x20, 0x5F, 0x82, 0x07, 0x20,
+ 0xFF, 0x8B, 0x07, 0x20, 0x60, 0x8A, 0x07, 0x20,
+ 0xFF, 0x93, 0x07, 0x20, 0x61, 0x92, 0x07, 0x20,
+ 0xFF, 0x9B, 0x07, 0x20, 0x62, 0x9A, 0x07, 0x20,
+ 0xFF, 0xA3, 0x07, 0x20, 0x63, 0xA2, 0x07, 0x20,
+ 0xFF, 0xAB, 0x07, 0x20, 0x64, 0xAA, 0x07, 0x20,
+ 0xFF, 0xB3, 0x07, 0x20, 0x65, 0xB2, 0x07, 0x20,
+ 0xFF, 0xBB, 0x07, 0x20, 0x66, 0xBA, 0x07, 0x20,
+ 0xFF, 0xC3, 0x07, 0x20, 0x67, 0xC2, 0x07, 0x20,
+ 0xFF, 0xCB, 0x07, 0x20, 0x68, 0xCA, 0x07, 0x20,
+ 0xFF, 0xD3, 0x07, 0x20, 0x69, 0xD2, 0x07, 0x20,
+ 0xFF, 0xDB, 0x07, 0x20, 0x6A, 0xDA, 0x07, 0x20,
+ 0xFF, 0xE3, 0x07, 0x20, 0x6B, 0xE2, 0x07, 0x20,
+ 0xFF, 0xEB, 0x07, 0x20, 0x6C, 0xEA, 0x07, 0x20,
+ 0xFF, 0xF3, 0x07, 0x20, 0x6D, 0xF2, 0x07, 0x20,
+ 0xFF, 0xFB, 0x07, 0x20, 0x6E, 0xFA, 0x07, 0x20,
+ 0xFF, 0x85, 0x07, 0x20, 0x6F, 0x84, 0x07, 0x20,
+ 0xFF, 0x8D, 0x07, 0x20, 0x70, 0x8C, 0x07, 0x20,
+ 0xFF, 0x95, 0x07, 0x20, 0x71, 0x94, 0x07, 0x20,
+ 0xFF, 0x9D, 0x07, 0x20, 0x72, 0x9C, 0x07, 0x20,
+ 0xFF, 0xA5, 0x07, 0x20, 0x73, 0xA4, 0x07, 0x20,
+ 0xFF, 0xAD, 0x07, 0x20, 0x74, 0xAC, 0x07, 0x20,
+ 0xFF, 0xB5, 0x07, 0x20, 0x75, 0xB4, 0x07, 0x20,
+ 0xFF, 0xBD, 0x07, 0x20, 0x76, 0xBC, 0x07, 0x20,
+ 0xFF, 0xC5, 0x07, 0x20, 0x77, 0xC4, 0x07, 0x20,
+ 0xFF, 0xCD, 0x07, 0x20, 0x78, 0xCC, 0x07, 0x20,
+ 0xFF, 0xD5, 0x07, 0x20, 0x79, 0xD4, 0x07, 0x20,
+ 0xFF, 0xDD, 0x07, 0x20, 0x7A, 0xDC, 0x07, 0x20,
+ 0xFF, 0xE5, 0x07, 0x20, 0x7B, 0xE4, 0x07, 0x20,
+ 0xFF, 0xED, 0x07, 0x20, 0x7C, 0xEC, 0x07, 0x20,
+ 0xFF, 0xF5, 0x07, 0x20, 0x7D, 0xF4, 0x07, 0x20,
+ 0xFF, 0xFD, 0x07, 0x20, 0x7E, 0xFC, 0x07, 0x20,
+ 0xFF, 0x87, 0x07, 0x20, 0x7F, 0x86, 0x07, 0x20,
+ 0xFF, 0x8F, 0x07, 0x20, 0x80, 0x8E, 0x07, 0x20,
+ 0xFF, 0x97, 0x07, 0x20, 0x81, 0x96, 0x07, 0x20,
+ 0xFF, 0x9F, 0x07, 0x20, 0x82, 0x9E, 0x07, 0x20,
+ 0xFF, 0xA7, 0x07, 0x20, 0x83, 0xA6, 0x07, 0x20,
+ 0xFF, 0xAF, 0x07, 0x20, 0x84, 0xAE, 0x07, 0x20,
+ 0xFF, 0xB7, 0x07, 0x20, 0x85, 0xB6, 0x07, 0x20,
+ 0xFF, 0xBF, 0x07, 0x20, 0x86, 0xBE, 0x07, 0x20,
+ 0xFF, 0xC7, 0x07, 0x20, 0x87, 0xC6, 0x07, 0x20,
+ 0xFF, 0xCF, 0x07, 0x20, 0x88, 0xCE, 0x07, 0x20,
+ 0xFF, 0xD7, 0x07, 0x20, 0x89, 0xD6, 0x07, 0x20,
+ 0xFF, 0xDF, 0x07, 0x20, 0x8A, 0xDE, 0x07, 0x20,
+ 0xFF, 0xE7, 0x07, 0x20, 0x8B, 0xE6, 0x07, 0x20,
+ 0xFF, 0xEF, 0x07, 0x20, 0x8C, 0xEE, 0x07, 0x20,
+ 0xFF, 0xF7, 0x07, 0x20, 0x8D, 0xF6, 0x07, 0x20,
+ 0xFF, 0xFF, 0x07, 0x20, 0x8E, 0xFE, 0x07, 0x20,
+ 0xFF, 0xFF, 0x07, 0x20, 0x8E, 0xFE, 0x07, 0x20,
+ 0xFF, 0xF7, 0x07, 0x20, 0x8D, 0xF6, 0x07, 0x20,
+ 0xFF, 0xEF, 0x07, 0x20, 0x8C, 0xEE, 0x07, 0x20,
+ 0xFF, 0xE7, 0x07, 0x20, 0x8B, 0xE6, 0x07, 0x20,
+ 0xFF, 0xDF, 0x07, 0x20, 0x8A, 0xDE, 0x07, 0x20,
+ 0xFF, 0xD7, 0x07, 0x20, 0x89, 0xD6, 0x07, 0x20,
+ 0xFF, 0xCF, 0x07, 0x20, 0x88, 0xCE, 0x07, 0x20,
+ 0xFF, 0xC7, 0x07, 0x20, 0x87, 0xC6, 0x07, 0x20,
+ 0xFF, 0xBF, 0x07, 0x20, 0x86, 0xBE, 0x07, 0x20,
+ 0xFF, 0xB7, 0x07, 0x20, 0x85, 0xB6, 0x07, 0x20,
+ 0xFF, 0xAF, 0x07, 0x20, 0x84, 0xAE, 0x07, 0x20,
+ 0xFF, 0xA7, 0x07, 0x20, 0x83, 0xA6, 0x07, 0x20,
+ 0xFF, 0x9F, 0x07, 0x20, 0x82, 0x9E, 0x07, 0x20,
+ 0xFF, 0x97, 0x07, 0x20, 0x81, 0x96, 0x07, 0x20,
+ 0xFF, 0x8F, 0x07, 0x20, 0x80, 0x8E, 0x07, 0x20,
+ 0xFF, 0x87, 0x07, 0x20, 0x7F, 0x86, 0x07, 0x20,
+ 0xFF, 0xFD, 0x07, 0x20, 0x7E, 0xFC, 0x07, 0x20,
+ 0xFF, 0xF5, 0x07, 0x20, 0x7D, 0xF4, 0x07, 0x20,
+ 0xFF, 0xED, 0x07, 0x20, 0x7C, 0xEC, 0x07, 0x20,
+ 0xFF, 0xE5, 0x07, 0x20, 0x7B, 0xE4, 0x07, 0x20,
+ 0xFF, 0xDD, 0x07, 0x20, 0x7A, 0xDC, 0x07, 0x20,
+ 0xFF, 0xD5, 0x07, 0x20, 0x79, 0xD4, 0x07, 0x20,
+ 0xFF, 0xCD, 0x07, 0x20, 0x78, 0xCC, 0x07, 0x20,
+ 0xFF, 0xC5, 0x07, 0x20, 0x77, 0xC4, 0x07, 0x20,
+ 0xFF, 0xBD, 0x07, 0x20, 0x76, 0xBC, 0x07, 0x20,
+ 0xFF, 0xB5, 0x07, 0x20, 0x75, 0xB4, 0x07, 0x20,
+ 0xFF, 0xAD, 0x07, 0x20, 0x74, 0xAC, 0x07, 0x20,
+ 0xFF, 0xA5, 0x07, 0x20, 0x73, 0xA4, 0x07, 0x20,
+ 0xFF, 0x9D, 0x07, 0x20, 0x72, 0x9C, 0x07, 0x20,
+ 0xFF, 0x95, 0x07, 0x20, 0x71, 0x94, 0x07, 0x20,
+ 0xFF, 0x8D, 0x07, 0x20, 0x70, 0x8C, 0x07, 0x20,
+ 0xFF, 0x85, 0x07, 0x20, 0x6F, 0x84, 0x07, 0x20,
+ 0xFF, 0xFB, 0x07, 0x20, 0x6E, 0xFA, 0x07, 0x20,
+ 0xFF, 0xF3, 0x07, 0x20, 0x6D, 0xF2, 0x07, 0x20,
+ 0xFF, 0xEB, 0x07, 0x20, 0x6C, 0xEA, 0x07, 0x20,
+ 0xFF, 0xE3, 0x07, 0x20, 0x6B, 0xE2, 0x07, 0x20,
+ 0xFF, 0xDB, 0x07, 0x20, 0x6A, 0xDA, 0x07, 0x20,
+ 0xFF, 0xD3, 0x07, 0x20, 0x69, 0xD2, 0x07, 0x20,
+ 0xFF, 0xCB, 0x07, 0x20, 0x68, 0xCA, 0x07, 0x20,
+ 0xFF, 0xC3, 0x07, 0x20, 0x67, 0xC2, 0x07, 0x20,
+ 0xFF, 0xBB, 0x07, 0x20, 0x66, 0xBA, 0x07, 0x20,
+ 0xFF, 0xB3, 0x07, 0x20, 0x65, 0xB2, 0x07, 0x20,
+ 0xFF, 0xAB, 0x07, 0x20, 0x64, 0xAA, 0x07, 0x20,
+ 0xFF, 0xA3, 0x07, 0x20, 0x63, 0xA2, 0x07, 0x20,
+ 0xFF, 0x9B, 0x07, 0x20, 0x62, 0x9A, 0x07, 0x20,
+ 0xFF, 0x93, 0x07, 0x20, 0x61, 0x92, 0x07, 0x20,
+ 0xFF, 0x8B, 0x07, 0x20, 0x60, 0x8A, 0x07, 0x20,
+ 0xFF, 0x83, 0x07, 0x20, 0x5F, 0x82, 0x07, 0x20,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x0A, 0x00, 0x08, 0x00, 0x10, 0x03, 0x18, 0x1C,
+ 0x10, 0x03, 0x18, 0x1C, 0x03, 0x00, 0x09, 0x00,
+ 0x00, 0x20, 0x04, 0x30, 0x80, 0x00, 0x00, 0x00,
+ 0x04, 0x0C, 0x00, 0x01, 0x00, 0x01, 0x0D, 0x00,
+ 0x28, 0x00, 0x20, 0x21, 0x04, 0x30, 0x00, 0x00,
+ 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x0F, 0x00,
+ 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x01, 0x00,
+ 0x00, 0x00, 0x20, 0x21, 0x04, 0x30, 0x00, 0x00,
+ 0x00, 0x00, 0x01, 0x1C, 0x02, 0xB0, 0x01, 0x00,
+ 0x00, 0x00, 0x0E, 0x00, 0x10, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x0F, 0x00,
+ 0x01, 0x00, 0x01, 0x10, 0x00, 0x01, 0x00, 0x02,
+ 0x11, 0x00, 0x02, 0x00, 0x20, 0x00, 0x12, 0x00,
+ 0x01, 0x00, 0x01, 0x05, 0x00, 0x0E, 0x00, 0x0C,
+ 0x20, 0xFD, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x00,
+ 0x00, 0x02, 0x08, 0x00, 0x00, 0x05, 0x00, 0x0E,
+ 0x00, 0x10, 0x20, 0xFD, 0x00, 0xFF, 0xFF, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x03,
+ 0x00, 0x09, 0x00, 0x04, 0x21, 0x04, 0x30, 0x01,
+ 0x00, 0x00, 0x00, 0x04, 0x03, 0x00, 0x09, 0x00,
+ 0x08, 0x21, 0x04, 0x30, 0x01, 0x00, 0x00, 0x00,
+ 0x04, 0x03, 0x00, 0x09, 0x00, 0x0C, 0x21, 0x04,
+ 0x30, 0x01, 0x00, 0x00, 0x00, 0x04, 0x03, 0x00,
+ 0x09, 0x00, 0x10, 0x21, 0x04, 0x30, 0x01, 0x00,
+ 0x00, 0x00, 0x04, 0x03, 0x00, 0x09, 0x00, 0x14,
+ 0x21, 0x04, 0x30, 0x01, 0x00, 0x00, 0x00, 0x04,
+ 0x03, 0x00, 0x09, 0x00, 0x18, 0x21, 0x04, 0x30,
+ 0x01, 0x00, 0x00, 0x00, 0x04, 0x03, 0x00, 0x09,
+ 0x00, 0x44, 0x21, 0x04, 0x30, 0x01, 0x00, 0x00,
+ 0x00, 0x04, 0x03, 0x00, 0x09, 0x00, 0x48, 0x21,
+ 0x04, 0x30, 0x01, 0x00, 0x00, 0x00, 0x04, 0x03,
+ 0x00, 0x09, 0x00, 0x4C, 0x21, 0x04, 0x30, 0x01,
+ 0x00, 0x00, 0x00, 0x04, 0x03, 0x00, 0x09, 0x00,
+ 0x50, 0x21, 0x04, 0x30, 0x01, 0x00, 0x00, 0x00,
+ 0x04, 0x03, 0x00, 0x09, 0x00, 0x54, 0x21, 0x04,
+ 0x30, 0x01, 0x00, 0x00, 0x00, 0x04, 0x03, 0x00,
+ 0x09, 0x00, 0x58, 0x21, 0x04, 0x30, 0x01, 0x00,
+ 0x00, 0x00, 0x04, 0x03, 0x00, 0x09, 0x00, 0xC8,
+ 0x20, 0x04, 0x30, 0x04, 0x00, 0x00, 0x00, 0x04,
+ 0x05, 0x00, 0x0E, 0x00, 0x14, 0x20, 0xFF, 0xFF,
+ 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x83, 0x00, 0x03, 0x00, 0x09, 0x00, 0x84, 0x21,
+ 0x04, 0x30, 0x01, 0x00, 0x00, 0x00, 0x04, 0x03,
+ 0x00, 0x09, 0x00, 0x88, 0x21, 0x04, 0x30, 0x01,
+ 0x00, 0x00, 0x00, 0x04, 0x03, 0x00, 0x09, 0x00,
+ 0x8C, 0x21, 0x04, 0x30, 0x01, 0x00, 0x00, 0x00,
+ 0x04, 0x03, 0x00, 0x09, 0x00, 0x90, 0x21, 0x04,
+ 0x30, 0x01, 0x00, 0x00, 0x00, 0x04, 0x03, 0x00,
+ 0x09, 0x00, 0x94, 0x21, 0x04, 0x30, 0x01, 0x00,
+ 0x00, 0x00, 0x04, 0x03, 0x00, 0x09, 0x00, 0x98,
+ 0x21, 0x04, 0x30, 0x00, 0x00, 0x00, 0x00, 0x04,
+ 0x03, 0x00, 0x09, 0x00, 0xA0, 0x21, 0x04, 0x30,
+ 0x00, 0x00, 0x00, 0x00, 0x04, 0x15, 0x00, 0x08,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x28, 0x00,
+ 0x00,
+};
+
+static unsigned char vfs5011_init_12[] = { /* 2666 B */
+ 0x02, 0xF0, 0x00, 0x0E, 0x00, 0x03, 0x00, 0x09,
+ 0x00, 0x04, 0x20, 0x04, 0x30, 0x00, 0x00, 0x00,
+ 0x00, 0x04, 0x03, 0x00, 0x09, 0x00, 0x18, 0x20,
+ 0x04, 0x30, 0x00, 0x00, 0x00, 0x00, 0x04, 0x03,
+ 0x00, 0x09, 0x00, 0x20, 0x20, 0x04, 0x30, 0x08,
+ 0x00, 0x80, 0x00, 0x04, 0x03, 0x00, 0x09, 0x00,
+ 0x24, 0x20, 0x04, 0x30, 0x00, 0x00, 0xFF, 0x01,
+ 0x04, 0x03, 0x00, 0x09, 0x00, 0x2C, 0x20, 0x04,
+ 0x30, 0x01, 0x00, 0x00, 0x00, 0x04, 0x03, 0x00,
+ 0x09, 0x00, 0x40, 0x20, 0x04, 0x30, 0xFF, 0x03,
+ 0x00, 0x00, 0x04, 0x03, 0x00, 0x09, 0x00, 0x44,
+ 0x20, 0x04, 0x30, 0xE5, 0x03, 0x00, 0x00, 0x04,
+ 0x03, 0x00, 0x09, 0x00, 0x48, 0x20, 0x04, 0x30,
+ 0xEA, 0x03, 0x00, 0x00, 0x04, 0x03, 0x00, 0x09,
+ 0x00, 0x4C, 0x20, 0x04, 0x30, 0x0A, 0x00, 0x00,
+ 0x00, 0x04, 0x03, 0x00, 0x09, 0x00, 0x54, 0x20,
+ 0x04, 0x30, 0x01, 0xDE, 0x01, 0x00, 0x04, 0x03,
+ 0x00, 0x09, 0x00, 0x00, 0x21, 0x04, 0x30, 0x00,
+ 0x00, 0x00, 0x00, 0x04, 0x03, 0x00, 0x09, 0x00,
+ 0x04, 0x21, 0x04, 0x30, 0x01, 0x00, 0x00, 0x00,
+ 0x04, 0x03, 0x00, 0x09, 0x00, 0x08, 0x21, 0x04,
+ 0x30, 0x02, 0x00, 0x00, 0x00, 0x04, 0x03, 0x00,
+ 0x09, 0x00, 0x0C, 0x21, 0x04, 0x30, 0x01, 0x00,
+ 0x00, 0x00, 0x04, 0x03, 0x00, 0x09, 0x00, 0x10,
+ 0x21, 0x04, 0x30, 0x01, 0x00, 0x00, 0x00, 0x04,
+ 0x03, 0x00, 0x09, 0x00, 0x14, 0x21, 0x04, 0x30,
+ 0x01, 0x00, 0x00, 0x00, 0x04, 0x03, 0x00, 0x09,
+ 0x00, 0x18, 0x21, 0x04, 0x30, 0x01, 0x00, 0x00,
+ 0x00, 0x04, 0x03, 0x00, 0x09, 0x00, 0x1C, 0x21,
+ 0x04, 0x30, 0x1F, 0x00, 0x00, 0x00, 0x04, 0x03,
+ 0x00, 0x09, 0x00, 0x20, 0x21, 0x04, 0x30, 0x08,
+ 0x00, 0x00, 0x00, 0x04, 0x03, 0x00, 0x09, 0x00,
+ 0x40, 0x21, 0x04, 0x30, 0x01, 0x00, 0x00, 0x00,
+ 0x04, 0x03, 0x00, 0x09, 0x00, 0x44, 0x21, 0x04,
+ 0x30, 0x01, 0x00, 0x00, 0x00, 0x04, 0x03, 0x00,
+ 0x09, 0x00, 0x48, 0x21, 0x04, 0x30, 0x01, 0x00,
+ 0x00, 0x00, 0x04, 0x03, 0x00, 0x09, 0x00, 0x4C,
+ 0x21, 0x04, 0x30, 0x01, 0x00, 0x00, 0x00, 0x04,
+ 0x03, 0x00, 0x09, 0x00, 0x50, 0x21, 0x04, 0x30,
+ 0x01, 0x00, 0x00, 0x00, 0x04, 0x03, 0x00, 0x09,
+ 0x00, 0x54, 0x21, 0x04, 0x30, 0x01, 0x00, 0x00,
+ 0x00, 0x04, 0x03, 0x00, 0x09, 0x00, 0x58, 0x21,
+ 0x04, 0x30, 0x01, 0x00, 0x00, 0x00, 0x04, 0x03,
+ 0x00, 0x09, 0x00, 0x5C, 0x21, 0x04, 0x30, 0x1F,
+ 0x00, 0x00, 0x00, 0x04, 0x03, 0x00, 0x09, 0x00,
+ 0x60, 0x21, 0x04, 0x30, 0x08, 0x00, 0x00, 0x00,
+ 0x04, 0x03, 0x00, 0x09, 0x00, 0x80, 0x21, 0x04,
+ 0x30, 0x30, 0x00, 0x00, 0x00, 0x04, 0x03, 0x00,
+ 0x09, 0x00, 0x84, 0x21, 0x04, 0x30, 0x01, 0x00,
+ 0x00, 0x00, 0x04, 0x03, 0x00, 0x09, 0x00, 0x88,
+ 0x21, 0x04, 0x30, 0x01, 0x00, 0x00, 0x00, 0x04,
+ 0x03, 0x00, 0x09, 0x00, 0x8C, 0x21, 0x04, 0x30,
+ 0x01, 0x00, 0x00, 0x00, 0x04, 0x03, 0x00, 0x09,
+ 0x00, 0x90, 0x21, 0x04, 0x30, 0x00, 0x00, 0x00,
+ 0x00, 0x04, 0x03, 0x00, 0x09, 0x00, 0x94, 0x21,
+ 0x04, 0x30, 0x01, 0x00, 0x00, 0x00, 0x04, 0x03,
+ 0x00, 0x09, 0x00, 0x98, 0x21, 0x04, 0x30, 0x00,
+ 0x00, 0x00, 0x00, 0x04, 0x03, 0x00, 0x09, 0x00,
+ 0x9C, 0x21, 0x04, 0x30, 0x1F, 0x00, 0x00, 0x00,
+ 0x04, 0x03, 0x00, 0x09, 0x00, 0xA0, 0x21, 0x04,
+ 0x30, 0x04, 0x00, 0x00, 0x00, 0x04, 0x03, 0x00,
+ 0x09, 0x00, 0xC0, 0x21, 0x04, 0x30, 0x30, 0x00,
+ 0x00, 0x00, 0x04, 0x03, 0x00, 0x09, 0x00, 0xC4,
+ 0x21, 0x04, 0x30, 0x01, 0x00, 0x00, 0x00, 0x04,
+ 0x03, 0x00, 0x09, 0x00, 0xC8, 0x21, 0x04, 0x30,
+ 0x01, 0x00, 0x00, 0x00, 0x04, 0x03, 0x00, 0x09,
+ 0x00, 0xCC, 0x21, 0x04, 0x30, 0x01, 0x00, 0x00,
+ 0x00, 0x04, 0x03, 0x00, 0x09, 0x00, 0xD0, 0x21,
+ 0x04, 0x30, 0x00, 0x00, 0x00, 0x00, 0x04, 0x03,
+ 0x00, 0x09, 0x00, 0xD4, 0x21, 0x04, 0x30, 0x01,
+ 0x00, 0x00, 0x00, 0x04, 0x03, 0x00, 0x09, 0x00,
+ 0xD8, 0x21, 0x04, 0x30, 0x00, 0x00, 0x00, 0x00,
+ 0x04, 0x03, 0x00, 0x09, 0x00, 0xDC, 0x21, 0x04,
+ 0x30, 0x1F, 0x00, 0x00, 0x00, 0x04, 0x03, 0x00,
+ 0x09, 0x00, 0xE0, 0x21, 0x04, 0x30, 0x04, 0x00,
+ 0x00, 0x00, 0x04, 0x03, 0x00, 0x09, 0x00, 0xA0,
+ 0x20, 0x04, 0x30, 0xEF, 0xE1, 0x00, 0x00, 0x04,
+ 0x03, 0x00, 0x09, 0x00, 0xA4, 0x20, 0x04, 0x30,
+ 0x00, 0x00, 0x00, 0x00, 0x04, 0x03, 0x00, 0x09,
+ 0x00, 0xB0, 0x20, 0x04, 0x30, 0x00, 0x00, 0x00,
+ 0x00, 0x04, 0x03, 0x00, 0x09, 0x00, 0xC4, 0x20,
+ 0x04, 0x30, 0x14, 0x00, 0x00, 0x00, 0x04, 0x03,
+ 0x00, 0x09, 0x00, 0xC8, 0x20, 0x04, 0x30, 0x00,
+ 0x00, 0x00, 0x00, 0x04, 0x03, 0x00, 0x09, 0x00,
+ 0xCC, 0x20, 0x04, 0x30, 0x20, 0x00, 0x00, 0x00,
+ 0x04, 0x03, 0x00, 0x09, 0x00, 0x50, 0x20, 0x04,
+ 0x30, 0x00, 0x00, 0x74, 0x01, 0x04, 0x03, 0x00,
+ 0x09, 0x00, 0xA8, 0x20, 0x04, 0x30, 0xFE, 0x21,
+ 0x74, 0x01, 0x04, 0x03, 0x00, 0x09, 0x00, 0x04,
+ 0x00, 0x00, 0x38, 0x00, 0x07, 0x00, 0x00, 0x04,
+ 0x03, 0x00, 0x09, 0x00, 0x08, 0x00, 0x00, 0x38,
+ 0x00, 0x15, 0x00, 0x00, 0x04, 0x03, 0x00, 0x09,
+ 0x00, 0x0C, 0x00, 0x00, 0x38, 0x01, 0x03, 0x02,
+ 0x00, 0x04, 0x03, 0x00, 0x09, 0x00, 0x10, 0x00,
+ 0x00, 0x38, 0x01, 0x07, 0x02, 0x00, 0x04, 0x03,
+ 0x00, 0x09, 0x00, 0x14, 0x00, 0x00, 0x38, 0x0C,
+ 0x0C, 0x05, 0x00, 0x04, 0x02, 0x00, 0x80, 0x05,
+ 0xFF, 0xF9, 0x87, 0x20, 0xBB, 0xF8, 0x87, 0x00,
+ 0xBB, 0xF8, 0x87, 0x00, 0xBB, 0xF8, 0x87, 0x00,
+ 0xBB, 0xF8, 0x87, 0x00, 0xBB, 0xF8, 0x87, 0x00,
+ 0xBB, 0xF8, 0x87, 0x00, 0xBB, 0xF8, 0x07, 0x20,
+ 0xBA, 0xF8, 0x07, 0x20, 0xB9, 0xF8, 0x07, 0x20,
+ 0xB8, 0xF8, 0x07, 0x20, 0xB7, 0xF8, 0x07, 0x20,
+ 0xB6, 0xF8, 0x07, 0x20, 0xB5, 0xF8, 0x07, 0x20,
+ 0xB4, 0xF8, 0x07, 0x20, 0xB3, 0xF8, 0x07, 0x20,
+ 0xB2, 0xF8, 0x07, 0x20, 0xB1, 0xF8, 0x07, 0x22,
+ 0xB0, 0xF8, 0x07, 0x22, 0xAF, 0xF8, 0x07, 0x22,
+ 0xAE, 0xF8, 0x07, 0x22, 0xAD, 0xF8, 0x07, 0x22,
+ 0xAC, 0xF8, 0x07, 0x22, 0xAB, 0xF8, 0x07, 0x22,
+ 0xAA, 0xF8, 0x07, 0x22, 0xA9, 0xF8, 0x07, 0x22,
+ 0xA8, 0xF8, 0x07, 0x22, 0xA7, 0xF8, 0x07, 0x22,
+ 0xA6, 0xF8, 0x07, 0x22, 0xA5, 0xF8, 0x07, 0x22,
+ 0xA4, 0xF8, 0x07, 0x22, 0xA3, 0xF8, 0x07, 0x22,
+ 0xA2, 0xF8, 0x07, 0x22, 0xA1, 0xF8, 0x07, 0x22,
+ 0xA0, 0xF8, 0x07, 0x22, 0x9F, 0xF8, 0x07, 0x22,
+ 0x9E, 0xF8, 0x07, 0x22, 0x9D, 0xF8, 0x07, 0x22,
+ 0x9C, 0xF8, 0x07, 0x22, 0x9B, 0xF8, 0x07, 0x22,
+ 0x9A, 0xF8, 0x07, 0x22, 0x99, 0xF8, 0x07, 0x22,
+ 0x98, 0xF8, 0x07, 0x22, 0x97, 0xF8, 0x07, 0x22,
+ 0x96, 0xF8, 0x07, 0x22, 0x95, 0xF8, 0x07, 0x22,
+ 0x94, 0xF8, 0x07, 0x22, 0x93, 0xF8, 0x07, 0x22,
+ 0x92, 0xF8, 0x07, 0x22, 0x91, 0xF8, 0x07, 0x22,
+ 0x90, 0xF8, 0x07, 0x22, 0x8F, 0xF8, 0x07, 0x22,
+ 0x8E, 0xF8, 0x07, 0x22, 0x8D, 0xF8, 0x07, 0x22,
+ 0x8C, 0xF8, 0x07, 0x22, 0x8B, 0xF8, 0x07, 0x22,
+ 0x8A, 0xF8, 0x07, 0x22, 0x89, 0xF8, 0x07, 0x22,
+ 0x88, 0xF8, 0x07, 0x22, 0x87, 0xF8, 0x07, 0x22,
+ 0x86, 0xF8, 0x07, 0x22, 0x85, 0xF8, 0x07, 0x22,
+ 0x84, 0xF8, 0x07, 0x22, 0x83, 0xF8, 0x07, 0x22,
+ 0x82, 0xF8, 0x07, 0x22, 0x81, 0xF8, 0x07, 0x22,
+ 0x80, 0xF8, 0x07, 0x22, 0x7F, 0xF8, 0x07, 0x22,
+ 0x7E, 0xF8, 0x07, 0x22, 0x7D, 0xF8, 0x07, 0x22,
+ 0x7C, 0xF8, 0x07, 0x22, 0x7B, 0xF8, 0x07, 0x22,
+ 0x7A, 0xF8, 0x07, 0x22, 0x79, 0xF8, 0x07, 0x22,
+ 0x78, 0xF8, 0x07, 0x22, 0x77, 0xF8, 0x07, 0x22,
+ 0x76, 0xF8, 0x07, 0x22, 0x75, 0xF8, 0x07, 0x22,
+ 0x74, 0xF8, 0x07, 0x22, 0x73, 0xF8, 0x07, 0x22,
+ 0x72, 0xF8, 0x07, 0x22, 0x71, 0xF8, 0x07, 0x22,
+ 0x70, 0xF8, 0x07, 0x22, 0x6F, 0xF8, 0x07, 0x22,
+ 0x6E, 0xF8, 0x07, 0x22, 0x6D, 0xF8, 0x07, 0x22,
+ 0x6C, 0xF8, 0x07, 0x22, 0x6B, 0xF8, 0x07, 0x22,
+ 0x6A, 0xF8, 0x07, 0x22, 0x69, 0xF8, 0x07, 0x22,
+ 0x68, 0xF8, 0x07, 0x22, 0x67, 0xF8, 0x07, 0x22,
+ 0x66, 0xF8, 0x07, 0x22, 0x65, 0xF8, 0x07, 0x22,
+ 0x64, 0xF8, 0x07, 0x22, 0x63, 0xF8, 0x07, 0x22,
+ 0x62, 0xF8, 0x07, 0x22, 0x61, 0xF8, 0x07, 0x22,
+ 0x60, 0xF8, 0x07, 0x22, 0x5F, 0xF8, 0x07, 0x22,
+ 0x5E, 0xF8, 0x07, 0x22, 0x5D, 0xF8, 0x07, 0x22,
+ 0x5C, 0xF8, 0x07, 0x22, 0x5B, 0xF8, 0x07, 0x22,
+ 0x5A, 0xF8, 0x07, 0x22, 0x59, 0xF8, 0x07, 0x22,
+ 0x58, 0xF8, 0x07, 0x22, 0x57, 0xF8, 0x07, 0x22,
+ 0x56, 0xF8, 0x07, 0x22, 0x55, 0xF8, 0x07, 0x22,
+ 0x54, 0xF8, 0x07, 0x22, 0x53, 0xF8, 0x07, 0x22,
+ 0x52, 0xF8, 0x07, 0x22, 0x51, 0xF8, 0x07, 0x22,
+ 0x50, 0xF8, 0x07, 0x22, 0x4F, 0xF8, 0x07, 0x22,
+ 0x4E, 0xF8, 0x07, 0x22, 0x4D, 0xF8, 0x07, 0x22,
+ 0x4C, 0xF8, 0x07, 0x22, 0x4B, 0xF8, 0x07, 0x22,
+ 0x4A, 0xF8, 0x07, 0x22, 0x49, 0xF8, 0x07, 0x22,
+ 0x48, 0xF8, 0x07, 0x22, 0x47, 0xF8, 0x07, 0x22,
+ 0x46, 0xF8, 0x07, 0x22, 0x45, 0xF8, 0x07, 0x22,
+ 0x44, 0xF8, 0x07, 0x22, 0x43, 0xF8, 0x07, 0x22,
+ 0x42, 0xF8, 0x07, 0x22, 0x41, 0xF8, 0x07, 0x22,
+ 0x40, 0xF8, 0x07, 0x22, 0x3F, 0xF8, 0x07, 0x22,
+ 0x3E, 0xF8, 0x07, 0x22, 0x3D, 0xF8, 0x07, 0x22,
+ 0x3C, 0xF8, 0x07, 0x22, 0x3B, 0xF8, 0x07, 0x22,
+ 0x3A, 0xF8, 0x07, 0x22, 0x39, 0xF8, 0x07, 0x22,
+ 0x38, 0xF8, 0x07, 0x22, 0x37, 0xF8, 0x07, 0x22,
+ 0x36, 0xF8, 0x07, 0x22, 0x35, 0xF8, 0x07, 0x22,
+ 0x34, 0xF8, 0x07, 0x22, 0x33, 0xF8, 0x07, 0x22,
+ 0x32, 0xF8, 0x07, 0x22, 0x31, 0xF8, 0x07, 0x22,
+ 0x30, 0xF8, 0x07, 0x22, 0x2F, 0xF8, 0x07, 0x22,
+ 0x2E, 0xF8, 0x07, 0x22, 0x2D, 0xF8, 0x07, 0x22,
+ 0x2C, 0xF8, 0x07, 0x22, 0x2B, 0xF8, 0x07, 0x22,
+ 0x2A, 0xF8, 0x07, 0x22, 0x29, 0xF8, 0x07, 0x22,
+ 0x28, 0xF8, 0x07, 0x22, 0x27, 0xF8, 0x07, 0x22,
+ 0x26, 0xF8, 0x07, 0x22, 0x25, 0xF8, 0x07, 0x22,
+ 0x24, 0xF8, 0x07, 0x22, 0x23, 0xF8, 0x07, 0x20,
+ 0x22, 0xF8, 0x07, 0x20, 0x21, 0xF8, 0x07, 0x20,
+ 0x20, 0xF8, 0x07, 0x20, 0x1F, 0xF8, 0x07, 0x20,
+ 0x1E, 0xF8, 0x07, 0x20, 0x1D, 0xF8, 0x07, 0x20,
+ 0x1C, 0xF8, 0x07, 0x20, 0x1C, 0xF8, 0x07, 0x00,
+ 0xD7, 0xF8, 0xA7, 0x00, 0xD7, 0xF8, 0xA7, 0x00,
+ 0xD7, 0xF8, 0xA7, 0x00, 0xD7, 0xF8, 0xA7, 0x00,
+ 0xD7, 0xF8, 0xA7, 0x00, 0xD7, 0xF8, 0xA7, 0x00,
+ 0xD8, 0xF8, 0x27, 0x20, 0xD9, 0xF8, 0x27, 0x20,
+ 0xDA, 0xF8, 0x27, 0x20, 0xDB, 0xF8, 0x27, 0x20,
+ 0xDC, 0xF8, 0x27, 0x20, 0xDD, 0xF8, 0x27, 0x20,
+ 0xDE, 0xF8, 0x27, 0x20, 0xDF, 0xF8, 0x27, 0x20,
+ 0xE0, 0xF8, 0x27, 0x20, 0xE1, 0xF8, 0x27, 0x20,
+ 0xE2, 0xF8, 0x27, 0x20, 0xE3, 0xF8, 0x27, 0x20,
+ 0xE4, 0xF8, 0x27, 0x20, 0xE5, 0xF8, 0x27, 0x20,
+ 0xE6, 0xF8, 0x27, 0x20, 0xE7, 0xF8, 0x27, 0x20,
+ 0xE8, 0xF8, 0x27, 0x20, 0xE9, 0xF8, 0x27, 0x20,
+ 0xEA, 0xF8, 0x27, 0x20, 0xEB, 0xF8, 0x27, 0x20,
+ 0xEC, 0xF8, 0x27, 0x20, 0xED, 0xF8, 0x27, 0x20,
+ 0xEE, 0xF8, 0x27, 0x20, 0xEF, 0xF8, 0x27, 0x20,
+ 0xF0, 0xF8, 0x27, 0x20, 0xF1, 0xF8, 0x27, 0x20,
+ 0xF2, 0xF8, 0x27, 0x20, 0xF3, 0xF8, 0x27, 0x20,
+ 0xF4, 0xF8, 0x27, 0x20, 0xF5, 0xF8, 0x27, 0x20,
+ 0xF6, 0xF8, 0x27, 0x20, 0xF7, 0xF8, 0x27, 0x20,
+ 0xF8, 0xF8, 0x27, 0x20, 0xF9, 0xF8, 0x27, 0x20,
+ 0xFA, 0xF8, 0x27, 0x20, 0xFB, 0xF8, 0x27, 0x20,
+ 0xFC, 0xF8, 0x27, 0x20, 0xFD, 0xF8, 0x27, 0x20,
+ 0xFE, 0xF8, 0x27, 0x20, 0xFF, 0xF8, 0x27, 0x20,
+ 0x00, 0xF9, 0x27, 0x20, 0xD7, 0xF8, 0x27, 0x20,
+ 0x00, 0xF8, 0x27, 0x20, 0x01, 0xF8, 0x27, 0x20,
+ 0x02, 0xF8, 0x27, 0x20, 0x03, 0xF8, 0x27, 0x20,
+ 0x04, 0xF8, 0x27, 0x20, 0x05, 0xF8, 0x27, 0x20,
+ 0x06, 0xF8, 0x27, 0x20, 0x07, 0xF8, 0x27, 0x20,
+ 0x08, 0xF8, 0x27, 0x20, 0x09, 0xF8, 0x27, 0x20,
+ 0x0A, 0xF8, 0x27, 0x20, 0x0B, 0xF8, 0x27, 0x20,
+ 0x0C, 0xF8, 0x27, 0x20, 0x0D, 0xF8, 0x27, 0x20,
+ 0x0E, 0xF8, 0x27, 0x20, 0x0F, 0xF8, 0x27, 0x20,
+ 0x10, 0xF8, 0x27, 0x20, 0x11, 0xF8, 0x27, 0x20,
+ 0x12, 0xF8, 0x27, 0x20, 0x13, 0xF8, 0x27, 0x20,
+ 0x14, 0xF8, 0x27, 0x20, 0x15, 0xF8, 0x27, 0x20,
+ 0x15, 0xF8, 0x27, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x0A, 0x00, 0x08, 0x00, 0x10, 0x03, 0x18, 0x1C,
+ 0x10, 0x03, 0x18, 0x1C, 0x03, 0x00, 0x09, 0x00,
+ 0x00, 0x20, 0x04, 0x30, 0x80, 0x00, 0x00, 0x00,
+ 0x04, 0x0C, 0x00, 0x01, 0x00, 0x04, 0x11, 0x00,
+ 0x02, 0x00, 0x0E, 0x00, 0x13, 0x00, 0x04, 0x00,
+ 0x18, 0x00, 0x00, 0x00, 0x14, 0x00, 0x04, 0x00,
+ 0x1E, 0x00, 0x00, 0x00, 0x1D, 0x00, 0x0A, 0x00,
+ 0x08, 0x00, 0xA8, 0x00, 0xE6, 0x82, 0xA0, 0x0A,
+ 0x26, 0x06, 0x07, 0x00, 0x3C, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0x78, 0x00, 0x02, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x18, 0xA2, 0x55, 0x03, 0xD3, 0xA2,
+ 0x5D, 0x00, 0x18, 0xA2, 0x55, 0x03, 0xD3, 0xA2,
+ 0x5D, 0x00, 0x18, 0xA2, 0x55, 0x03, 0x20, 0x80,
+ 0x80, 0x00, 0xFF, 0x10, 0x0F, 0x01, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x03,
+ 0x00, 0x00, 0x05, 0x00, 0x0E, 0x00, 0x0C, 0x20,
+ 0xFD, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00,
+ 0x02, 0x08, 0x00, 0x00, 0x05, 0x00, 0x0E, 0x00,
+ 0x10, 0x20, 0xFD, 0x00, 0xFF, 0xFF, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x03, 0x00,
+ 0x09, 0x00, 0x04, 0x21, 0x04, 0x30, 0x01, 0x00,
+ 0x00, 0x00, 0x04, 0x03, 0x00, 0x09, 0x00, 0x08,
+ 0x21, 0x04, 0x30, 0x01, 0x00, 0x00, 0x00, 0x04,
+ 0x03, 0x00, 0x09, 0x00, 0x0C, 0x21, 0x04, 0x30,
+ 0x01, 0x00, 0x00, 0x00, 0x04, 0x03, 0x00, 0x09,
+ 0x00, 0x10, 0x21, 0x04, 0x30, 0x01, 0x00, 0x00,
+ 0x00, 0x04, 0x03, 0x00, 0x09, 0x00, 0x14, 0x21,
+ 0x04, 0x30, 0x01, 0x00, 0x00, 0x00, 0x04, 0x03,
+ 0x00, 0x09, 0x00, 0x18, 0x21, 0x04, 0x30, 0x01,
+ 0x00, 0x00, 0x00, 0x04, 0x03, 0x00, 0x09, 0x00,
+ 0x44, 0x21, 0x04, 0x30, 0x01, 0x00, 0x00, 0x00,
+ 0x04, 0x03, 0x00, 0x09, 0x00, 0x48, 0x21, 0x04,
+ 0x30, 0x01, 0x00, 0x00, 0x00, 0x04, 0x03, 0x00,
+ 0x09, 0x00, 0x4C, 0x21, 0x04, 0x30, 0x01, 0x00,
+ 0x00, 0x00, 0x04, 0x03, 0x00, 0x09, 0x00, 0x50,
+ 0x21, 0x04, 0x30, 0x01, 0x00, 0x00, 0x00, 0x04,
+ 0x03, 0x00, 0x09, 0x00, 0x54, 0x21, 0x04, 0x30,
+ 0x01, 0x00, 0x00, 0x00, 0x04, 0x03, 0x00, 0x09,
+ 0x00, 0x58, 0x21, 0x04, 0x30, 0x01, 0x00, 0x00,
+ 0x00, 0x04, 0x03, 0x00, 0x09, 0x00, 0xC8, 0x20,
+ 0x04, 0x30, 0x04, 0x00, 0x00, 0x00, 0x04, 0x05,
+ 0x00, 0x0E, 0x00, 0x14, 0x20, 0xFF, 0xFF, 0x00,
+ 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x83,
+ 0x00, 0x03, 0x00, 0x09, 0x00, 0x84, 0x21, 0x04,
+ 0x30, 0x01, 0x00, 0x00, 0x00, 0x04, 0x03, 0x00,
+ 0x09, 0x00, 0x88, 0x21, 0x04, 0x30, 0x01, 0x00,
+ 0x00, 0x00, 0x04, 0x03, 0x00, 0x09, 0x00, 0x8C,
+ 0x21, 0x04, 0x30, 0x01, 0x00, 0x00, 0x00, 0x04,
+ 0x03, 0x00, 0x09, 0x00, 0x90, 0x21, 0x04, 0x30,
+ 0x01, 0x00, 0x00, 0x00, 0x04, 0x03, 0x00, 0x09,
+ 0x00, 0x94, 0x21, 0x04, 0x30, 0x01, 0x00, 0x00,
+ 0x00, 0x04, 0x03, 0x00, 0x09, 0x00, 0x98, 0x21,
+ 0x04, 0x30, 0x00, 0x00, 0x00, 0x00, 0x04, 0x03,
+ 0x00, 0x09, 0x00, 0xA0, 0x21, 0x04, 0x30, 0x00,
+ 0x00, 0x00, 0x00, 0x04, 0x03, 0x00, 0x09, 0x00,
+ 0x20, 0x21, 0x04, 0x30, 0x08, 0x00, 0x00, 0x00,
+ 0x04, 0x03, 0x00, 0x09, 0x00, 0x60, 0x21, 0x04,
+ 0x30, 0x08, 0x00, 0x00, 0x00, 0x04, 0x15, 0x00,
+ 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x28,
+ 0x00, 0x00,
+};
+
+static unsigned char vfs5011_init_13[] = { /* 57 B */
+ 0x12, 0x90, 0x02, 0x00, 0x00, 0xFE, 0x03, 0x00,
+ 0x00, 0xFF, 0x1F, 0xFF, 0x1F, 0x00, 0x00, 0x00,
+ 0x00, 0x18, 0xA2, 0x55, 0x03, 0xD3, 0xA2, 0x5D,
+ 0x00, 0x18, 0xA2, 0x55, 0x03, 0xD3, 0xA2, 0x5D,
+ 0x00, 0x18, 0xA2, 0x55, 0x03, 0x20, 0xFF, 0x80,
+ 0x00, 0xFF, 0x04, 0x0F, 0x01, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x03, 0x00,
+ 0x00,
+};
+
+static unsigned char vfs5011_init_14[] = { /* 2561 B */
+ 0x02, 0xF0, 0x00, 0x14, 0x00, 0x03, 0x00, 0x09,
+ 0x00, 0x04, 0x20, 0x04, 0x30, 0x00, 0x00, 0x00,
+ 0x00, 0x04, 0x03, 0x00, 0x09, 0x00, 0x18, 0x20,
+ 0x04, 0x30, 0x00, 0x00, 0x00, 0x00, 0x04, 0x03,
+ 0x00, 0x09, 0x00, 0x20, 0x20, 0x04, 0x30, 0x08,
+ 0x00, 0x80, 0x00, 0x04, 0x03, 0x00, 0x09, 0x00,
+ 0x24, 0x20, 0x04, 0x30, 0x00, 0x00, 0xFF, 0x01,
+ 0x04, 0x03, 0x00, 0x09, 0x00, 0x2C, 0x20, 0x04,
+ 0x30, 0x01, 0x00, 0x00, 0x00, 0x04, 0x03, 0x00,
+ 0x09, 0x00, 0x40, 0x20, 0x04, 0x30, 0xFF, 0x03,
+ 0x00, 0x00, 0x04, 0x03, 0x00, 0x09, 0x00, 0x44,
+ 0x20, 0x04, 0x30, 0xE5, 0x03, 0x00, 0x00, 0x04,
+ 0x03, 0x00, 0x09, 0x00, 0x48, 0x20, 0x04, 0x30,
+ 0xEA, 0x03, 0x00, 0x00, 0x04, 0x03, 0x00, 0x09,
+ 0x00, 0x4C, 0x20, 0x04, 0x30, 0x0A, 0x00, 0x00,
+ 0x00, 0x04, 0x03, 0x00, 0x09, 0x00, 0x54, 0x20,
+ 0x04, 0x30, 0x01, 0xDE, 0x01, 0x00, 0x04, 0x03,
+ 0x00, 0x09, 0x00, 0x00, 0x21, 0x04, 0x30, 0x00,
+ 0x00, 0x00, 0x00, 0x04, 0x03, 0x00, 0x09, 0x00,
+ 0x04, 0x21, 0x04, 0x30, 0x01, 0x00, 0x00, 0x00,
+ 0x04, 0x03, 0x00, 0x09, 0x00, 0x08, 0x21, 0x04,
+ 0x30, 0x02, 0x00, 0x00, 0x00, 0x04, 0x03, 0x00,
+ 0x09, 0x00, 0x0C, 0x21, 0x04, 0x30, 0x01, 0x00,
+ 0x00, 0x00, 0x04, 0x03, 0x00, 0x09, 0x00, 0x10,
+ 0x21, 0x04, 0x30, 0x01, 0x00, 0x00, 0x00, 0x04,
+ 0x03, 0x00, 0x09, 0x00, 0x14, 0x21, 0x04, 0x30,
+ 0x01, 0x00, 0x00, 0x00, 0x04, 0x03, 0x00, 0x09,
+ 0x00, 0x18, 0x21, 0x04, 0x30, 0x01, 0x00, 0x00,
+ 0x00, 0x04, 0x03, 0x00, 0x09, 0x00, 0x1C, 0x21,
+ 0x04, 0x30, 0x1F, 0x00, 0x00, 0x00, 0x04, 0x03,
+ 0x00, 0x09, 0x00, 0x20, 0x21, 0x04, 0x30, 0x08,
+ 0x00, 0x00, 0x00, 0x04, 0x03, 0x00, 0x09, 0x00,
+ 0x40, 0x21, 0x04, 0x30, 0x01, 0x00, 0x00, 0x00,
+ 0x04, 0x03, 0x00, 0x09, 0x00, 0x44, 0x21, 0x04,
+ 0x30, 0x01, 0x00, 0x00, 0x00, 0x04, 0x03, 0x00,
+ 0x09, 0x00, 0x48, 0x21, 0x04, 0x30, 0x01, 0x00,
+ 0x00, 0x00, 0x04, 0x03, 0x00, 0x09, 0x00, 0x4C,
+ 0x21, 0x04, 0x30, 0x01, 0x00, 0x00, 0x00, 0x04,
+ 0x03, 0x00, 0x09, 0x00, 0x50, 0x21, 0x04, 0x30,
+ 0x01, 0x00, 0x00, 0x00, 0x04, 0x03, 0x00, 0x09,
+ 0x00, 0x54, 0x21, 0x04, 0x30, 0x01, 0x00, 0x00,
+ 0x00, 0x04, 0x03, 0x00, 0x09, 0x00, 0x58, 0x21,
+ 0x04, 0x30, 0x01, 0x00, 0x00, 0x00, 0x04, 0x03,
+ 0x00, 0x09, 0x00, 0x5C, 0x21, 0x04, 0x30, 0x1F,
+ 0x00, 0x00, 0x00, 0x04, 0x03, 0x00, 0x09, 0x00,
+ 0x60, 0x21, 0x04, 0x30, 0x08, 0x00, 0x00, 0x00,
+ 0x04, 0x03, 0x00, 0x09, 0x00, 0x80, 0x21, 0x04,
+ 0x30, 0x30, 0x00, 0x00, 0x00, 0x04, 0x03, 0x00,
+ 0x09, 0x00, 0x84, 0x21, 0x04, 0x30, 0x01, 0x00,
+ 0x00, 0x00, 0x04, 0x03, 0x00, 0x09, 0x00, 0x88,
+ 0x21, 0x04, 0x30, 0x01, 0x00, 0x00, 0x00, 0x04,
+ 0x03, 0x00, 0x09, 0x00, 0x8C, 0x21, 0x04, 0x30,
+ 0x01, 0x00, 0x00, 0x00, 0x04, 0x03, 0x00, 0x09,
+ 0x00, 0x90, 0x21, 0x04, 0x30, 0x00, 0x00, 0x00,
+ 0x00, 0x04, 0x03, 0x00, 0x09, 0x00, 0x94, 0x21,
+ 0x04, 0x30, 0x01, 0x00, 0x00, 0x00, 0x04, 0x03,
+ 0x00, 0x09, 0x00, 0x98, 0x21, 0x04, 0x30, 0x00,
+ 0x00, 0x00, 0x00, 0x04, 0x03, 0x00, 0x09, 0x00,
+ 0x9C, 0x21, 0x04, 0x30, 0x1F, 0x00, 0x00, 0x00,
+ 0x04, 0x03, 0x00, 0x09, 0x00, 0xA0, 0x21, 0x04,
+ 0x30, 0x04, 0x00, 0x00, 0x00, 0x04, 0x03, 0x00,
+ 0x09, 0x00, 0xC0, 0x21, 0x04, 0x30, 0x30, 0x00,
+ 0x00, 0x00, 0x04, 0x03, 0x00, 0x09, 0x00, 0xC4,
+ 0x21, 0x04, 0x30, 0x01, 0x00, 0x00, 0x00, 0x04,
+ 0x03, 0x00, 0x09, 0x00, 0xC8, 0x21, 0x04, 0x30,
+ 0x01, 0x00, 0x00, 0x00, 0x04, 0x03, 0x00, 0x09,
+ 0x00, 0xCC, 0x21, 0x04, 0x30, 0x01, 0x00, 0x00,
+ 0x00, 0x04, 0x03, 0x00, 0x09, 0x00, 0xD0, 0x21,
+ 0x04, 0x30, 0x00, 0x00, 0x00, 0x00, 0x04, 0x03,
+ 0x00, 0x09, 0x00, 0xD4, 0x21, 0x04, 0x30, 0x01,
+ 0x00, 0x00, 0x00, 0x04, 0x03, 0x00, 0x09, 0x00,
+ 0xD8, 0x21, 0x04, 0x30, 0x00, 0x00, 0x00, 0x00,
+ 0x04, 0x03, 0x00, 0x09, 0x00, 0xDC, 0x21, 0x04,
+ 0x30, 0x1F, 0x00, 0x00, 0x00, 0x04, 0x03, 0x00,
+ 0x09, 0x00, 0xE0, 0x21, 0x04, 0x30, 0x04, 0x00,
+ 0x00, 0x00, 0x04, 0x03, 0x00, 0x09, 0x00, 0xA0,
+ 0x20, 0x04, 0x30, 0xEF, 0xE1, 0x00, 0x00, 0x04,
+ 0x03, 0x00, 0x09, 0x00, 0xA4, 0x20, 0x04, 0x30,
+ 0x00, 0x00, 0x00, 0x00, 0x04, 0x03, 0x00, 0x09,
+ 0x00, 0xB0, 0x20, 0x04, 0x30, 0x00, 0x00, 0x00,
+ 0x00, 0x04, 0x03, 0x00, 0x09, 0x00, 0xC4, 0x20,
+ 0x04, 0x30, 0x14, 0x00, 0x00, 0x00, 0x04, 0x03,
+ 0x00, 0x09, 0x00, 0xC8, 0x20, 0x04, 0x30, 0x00,
+ 0x00, 0x00, 0x00, 0x04, 0x03, 0x00, 0x09, 0x00,
+ 0xCC, 0x20, 0x04, 0x30, 0x20, 0x00, 0x00, 0x00,
+ 0x04, 0x03, 0x00, 0x09, 0x00, 0x50, 0x20, 0x04,
+ 0x30, 0x00, 0x00, 0x74, 0x01, 0x04, 0x03, 0x00,
+ 0x09, 0x00, 0xA8, 0x20, 0x04, 0x30, 0xFE, 0x21,
+ 0x74, 0x01, 0x04, 0x03, 0x00, 0x09, 0x00, 0x04,
+ 0x00, 0x00, 0x38, 0x00, 0x07, 0x00, 0x00, 0x04,
+ 0x03, 0x00, 0x09, 0x00, 0x08, 0x00, 0x00, 0x38,
+ 0x00, 0x15, 0x00, 0x00, 0x04, 0x03, 0x00, 0x09,
+ 0x00, 0x0C, 0x00, 0x00, 0x38, 0x01, 0x03, 0x02,
+ 0x00, 0x04, 0x03, 0x00, 0x09, 0x00, 0x10, 0x00,
+ 0x00, 0x38, 0x01, 0x07, 0x02, 0x00, 0x04, 0x03,
+ 0x00, 0x09, 0x00, 0x14, 0x00, 0x00, 0x38, 0x0C,
+ 0x0C, 0x05, 0x00, 0x04, 0x02, 0x00, 0x80, 0x05,
+ 0xFF, 0xF9, 0x87, 0x20, 0xBB, 0xF8, 0x87, 0x00,
+ 0xBB, 0xF8, 0x87, 0x00, 0xBB, 0xF8, 0x87, 0x00,
+ 0xBB, 0xF8, 0x87, 0x00, 0xBB, 0xF8, 0x87, 0x00,
+ 0xBB, 0xF8, 0x87, 0x00, 0xBB, 0xF8, 0x07, 0x20,
+ 0xBA, 0xF8, 0x07, 0x20, 0xB9, 0xF8, 0x07, 0x20,
+ 0xB8, 0xF8, 0x07, 0x20, 0xB7, 0xF8, 0x07, 0x20,
+ 0xB6, 0xF8, 0x07, 0x20, 0xB5, 0xF8, 0x07, 0x20,
+ 0xB4, 0xF8, 0x07, 0x20, 0xB3, 0xF8, 0x07, 0x20,
+ 0xB2, 0xF8, 0x07, 0x20, 0xB1, 0xF8, 0x07, 0x22,
+ 0xB0, 0xF8, 0x07, 0x22, 0xAF, 0xF8, 0x07, 0x22,
+ 0xAE, 0xF8, 0x07, 0x22, 0xAD, 0xF8, 0x07, 0x22,
+ 0xAC, 0xF8, 0x07, 0x22, 0xAB, 0xF8, 0x07, 0x22,
+ 0xAA, 0xF8, 0x07, 0x22, 0xA9, 0xF8, 0x07, 0x22,
+ 0xA8, 0xF8, 0x07, 0x22, 0xA7, 0xF8, 0x07, 0x22,
+ 0xA6, 0xF8, 0x07, 0x22, 0xA5, 0xF8, 0x07, 0x22,
+ 0xA4, 0xF8, 0x07, 0x22, 0xA3, 0xF8, 0x07, 0x22,
+ 0xA2, 0xF8, 0x07, 0x22, 0xA1, 0xF8, 0x07, 0x22,
+ 0xA0, 0xF8, 0x07, 0x22, 0x9F, 0xF8, 0x07, 0x22,
+ 0x9E, 0xF8, 0x07, 0x22, 0x9D, 0xF8, 0x07, 0x22,
+ 0x9C, 0xF8, 0x07, 0x22, 0x9B, 0xF8, 0x07, 0x22,
+ 0x9A, 0xF8, 0x07, 0x22, 0x99, 0xF8, 0x07, 0x22,
+ 0x98, 0xF8, 0x07, 0x22, 0x97, 0xF8, 0x07, 0x22,
+ 0x96, 0xF8, 0x07, 0x22, 0x95, 0xF8, 0x07, 0x22,
+ 0x94, 0xF8, 0x07, 0x22, 0x93, 0xF8, 0x07, 0x22,
+ 0x92, 0xF8, 0x07, 0x22, 0x91, 0xF8, 0x07, 0x22,
+ 0x90, 0xF8, 0x07, 0x22, 0x8F, 0xF8, 0x07, 0x22,
+ 0x8E, 0xF8, 0x07, 0x22, 0x8D, 0xF8, 0x07, 0x22,
+ 0x8C, 0xF8, 0x07, 0x22, 0x8B, 0xF8, 0x07, 0x22,
+ 0x8A, 0xF8, 0x07, 0x22, 0x89, 0xF8, 0x07, 0x22,
+ 0x88, 0xF8, 0x07, 0x22, 0x87, 0xF8, 0x07, 0x22,
+ 0x86, 0xF8, 0x07, 0x22, 0x85, 0xF8, 0x07, 0x22,
+ 0x84, 0xF8, 0x07, 0x22, 0x83, 0xF8, 0x07, 0x22,
+ 0x82, 0xF8, 0x07, 0x22, 0x81, 0xF8, 0x07, 0x22,
+ 0x80, 0xF8, 0x07, 0x22, 0x7F, 0xF8, 0x07, 0x22,
+ 0x7E, 0xF8, 0x07, 0x22, 0x7D, 0xF8, 0x07, 0x22,
+ 0x7C, 0xF8, 0x07, 0x22, 0x7B, 0xF8, 0x07, 0x22,
+ 0x7A, 0xF8, 0x07, 0x22, 0x79, 0xF8, 0x07, 0x22,
+ 0x78, 0xF8, 0x07, 0x22, 0x77, 0xF8, 0x07, 0x22,
+ 0x76, 0xF8, 0x07, 0x22, 0x75, 0xF8, 0x07, 0x22,
+ 0x74, 0xF8, 0x07, 0x22, 0x73, 0xF8, 0x07, 0x22,
+ 0x72, 0xF8, 0x07, 0x22, 0x71, 0xF8, 0x07, 0x22,
+ 0x70, 0xF8, 0x07, 0x22, 0x6F, 0xF8, 0x07, 0x22,
+ 0x6E, 0xF8, 0x07, 0x22, 0x6D, 0xF8, 0x07, 0x22,
+ 0x6C, 0xF8, 0x07, 0x22, 0x6B, 0xF8, 0x07, 0x22,
+ 0x6A, 0xF8, 0x07, 0x22, 0x69, 0xF8, 0x07, 0x22,
+ 0x68, 0xF8, 0x07, 0x22, 0x67, 0xF8, 0x07, 0x22,
+ 0x66, 0xF8, 0x07, 0x22, 0x65, 0xF8, 0x07, 0x22,
+ 0x64, 0xF8, 0x07, 0x22, 0x63, 0xF8, 0x07, 0x22,
+ 0x62, 0xF8, 0x07, 0x22, 0x61, 0xF8, 0x07, 0x22,
+ 0x60, 0xF8, 0x07, 0x22, 0x5F, 0xF8, 0x07, 0x22,
+ 0x5E, 0xF8, 0x07, 0x22, 0x5D, 0xF8, 0x07, 0x22,
+ 0x5C, 0xF8, 0x07, 0x22, 0x5B, 0xF8, 0x07, 0x22,
+ 0x5A, 0xF8, 0x07, 0x22, 0x59, 0xF8, 0x07, 0x22,
+ 0x58, 0xF8, 0x07, 0x22, 0x57, 0xF8, 0x07, 0x22,
+ 0x56, 0xF8, 0x07, 0x22, 0x55, 0xF8, 0x07, 0x22,
+ 0x54, 0xF8, 0x07, 0x22, 0x53, 0xF8, 0x07, 0x22,
+ 0x52, 0xF8, 0x07, 0x22, 0x51, 0xF8, 0x07, 0x22,
+ 0x50, 0xF8, 0x07, 0x22, 0x4F, 0xF8, 0x07, 0x22,
+ 0x4E, 0xF8, 0x07, 0x22, 0x4D, 0xF8, 0x07, 0x22,
+ 0x4C, 0xF8, 0x07, 0x22, 0x4B, 0xF8, 0x07, 0x22,
+ 0x4A, 0xF8, 0x07, 0x22, 0x49, 0xF8, 0x07, 0x22,
+ 0x48, 0xF8, 0x07, 0x22, 0x47, 0xF8, 0x07, 0x22,
+ 0x46, 0xF8, 0x07, 0x22, 0x45, 0xF8, 0x07, 0x22,
+ 0x44, 0xF8, 0x07, 0x22, 0x43, 0xF8, 0x07, 0x22,
+ 0x42, 0xF8, 0x07, 0x22, 0x41, 0xF8, 0x07, 0x22,
+ 0x40, 0xF8, 0x07, 0x22, 0x3F, 0xF8, 0x07, 0x22,
+ 0x3E, 0xF8, 0x07, 0x22, 0x3D, 0xF8, 0x07, 0x22,
+ 0x3C, 0xF8, 0x07, 0x22, 0x3B, 0xF8, 0x07, 0x22,
+ 0x3A, 0xF8, 0x07, 0x22, 0x39, 0xF8, 0x07, 0x22,
+ 0x38, 0xF8, 0x07, 0x22, 0x37, 0xF8, 0x07, 0x22,
+ 0x36, 0xF8, 0x07, 0x22, 0x35, 0xF8, 0x07, 0x22,
+ 0x34, 0xF8, 0x07, 0x22, 0x33, 0xF8, 0x07, 0x22,
+ 0x32, 0xF8, 0x07, 0x22, 0x31, 0xF8, 0x07, 0x22,
+ 0x30, 0xF8, 0x07, 0x22, 0x2F, 0xF8, 0x07, 0x22,
+ 0x2E, 0xF8, 0x07, 0x22, 0x2D, 0xF8, 0x07, 0x22,
+ 0x2C, 0xF8, 0x07, 0x22, 0x2B, 0xF8, 0x07, 0x22,
+ 0x2A, 0xF8, 0x07, 0x22, 0x29, 0xF8, 0x07, 0x22,
+ 0x28, 0xF8, 0x07, 0x22, 0x27, 0xF8, 0x07, 0x22,
+ 0x26, 0xF8, 0x07, 0x22, 0x25, 0xF8, 0x07, 0x22,
+ 0x24, 0xF8, 0x07, 0x22, 0x23, 0xF8, 0x07, 0x20,
+ 0x22, 0xF8, 0x07, 0x20, 0x21, 0xF8, 0x07, 0x20,
+ 0x20, 0xF8, 0x07, 0x20, 0x1F, 0xF8, 0x07, 0x20,
+ 0x1E, 0xF8, 0x07, 0x20, 0x1D, 0xF8, 0x07, 0x20,
+ 0x1C, 0xF8, 0x07, 0x20, 0x1C, 0xF8, 0x07, 0x00,
+ 0xD7, 0xF8, 0xA7, 0x00, 0xD7, 0xF8, 0xA7, 0x00,
+ 0xD7, 0xF8, 0xA7, 0x00, 0xD7, 0xF8, 0xA7, 0x00,
+ 0xD7, 0xF8, 0xA7, 0x00, 0xD7, 0xF8, 0xA7, 0x00,
+ 0xD8, 0xF8, 0x27, 0x20, 0xD9, 0xF8, 0x27, 0x20,
+ 0xDA, 0xF8, 0x27, 0x20, 0xDB, 0xF8, 0x27, 0x20,
+ 0xDC, 0xF8, 0x27, 0x20, 0xDD, 0xF8, 0x27, 0x20,
+ 0xDE, 0xF8, 0x27, 0x20, 0xDF, 0xF8, 0x27, 0x20,
+ 0xE0, 0xF8, 0x27, 0x20, 0xE1, 0xF8, 0x27, 0x20,
+ 0xE2, 0xF8, 0x27, 0x20, 0xE3, 0xF8, 0x27, 0x20,
+ 0xE4, 0xF8, 0x27, 0x20, 0xE5, 0xF8, 0x27, 0x20,
+ 0xE6, 0xF8, 0x27, 0x20, 0xE7, 0xF8, 0x27, 0x20,
+ 0xE8, 0xF8, 0x27, 0x20, 0xE9, 0xF8, 0x27, 0x20,
+ 0xEA, 0xF8, 0x27, 0x20, 0xEB, 0xF8, 0x27, 0x20,
+ 0xEC, 0xF8, 0x27, 0x20, 0xED, 0xF8, 0x27, 0x20,
+ 0xEE, 0xF8, 0x27, 0x20, 0xEF, 0xF8, 0x27, 0x20,
+ 0xF0, 0xF8, 0x27, 0x20, 0xF1, 0xF8, 0x27, 0x20,
+ 0xF2, 0xF8, 0x27, 0x20, 0xF3, 0xF8, 0x27, 0x20,
+ 0xF4, 0xF8, 0x27, 0x20, 0xF5, 0xF8, 0x27, 0x20,
+ 0xF6, 0xF8, 0x27, 0x20, 0xF7, 0xF8, 0x27, 0x20,
+ 0xF8, 0xF8, 0x27, 0x20, 0xF9, 0xF8, 0x27, 0x20,
+ 0xFA, 0xF8, 0x27, 0x20, 0xFB, 0xF8, 0x27, 0x20,
+ 0xFC, 0xF8, 0x27, 0x20, 0xFD, 0xF8, 0x27, 0x20,
+ 0xFE, 0xF8, 0x27, 0x20, 0xFF, 0xF8, 0x27, 0x20,
+ 0x00, 0xF9, 0x27, 0x20, 0xD7, 0xF8, 0x27, 0x20,
+ 0x00, 0xF8, 0x27, 0x20, 0x01, 0xF8, 0x27, 0x20,
+ 0x02, 0xF8, 0x27, 0x20, 0x03, 0xF8, 0x27, 0x20,
+ 0x04, 0xF8, 0x27, 0x20, 0x05, 0xF8, 0x27, 0x20,
+ 0x06, 0xF8, 0x27, 0x20, 0x07, 0xF8, 0x27, 0x20,
+ 0x08, 0xF8, 0x27, 0x20, 0x09, 0xF8, 0x27, 0x20,
+ 0x0A, 0xF8, 0x27, 0x20, 0x0B, 0xF8, 0x27, 0x20,
+ 0x0C, 0xF8, 0x27, 0x20, 0x0D, 0xF8, 0x27, 0x20,
+ 0x0E, 0xF8, 0x27, 0x20, 0x0F, 0xF8, 0x27, 0x20,
+ 0x10, 0xF8, 0x27, 0x20, 0x11, 0xF8, 0x27, 0x20,
+ 0x12, 0xF8, 0x27, 0x20, 0x13, 0xF8, 0x27, 0x20,
+ 0x14, 0xF8, 0x27, 0x20, 0x15, 0xF8, 0x27, 0x20,
+ 0x15, 0xF8, 0x27, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x0A, 0x00, 0x08, 0x00, 0x10, 0x03, 0x18, 0x1C,
+ 0x10, 0x03, 0x18, 0x1C, 0x03, 0x00, 0x09, 0x00,
+ 0x00, 0x20, 0x04, 0x30, 0x80, 0x00, 0x00, 0x00,
+ 0x04, 0x05, 0x00, 0x0E, 0x00, 0x0C, 0x20, 0xFD,
+ 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x02,
+ 0x08, 0x00, 0x00, 0x05, 0x00, 0x0E, 0x00, 0x10,
+ 0x20, 0xFD, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x05, 0x00, 0x00, 0x03, 0x00, 0x09,
+ 0x00, 0x04, 0x21, 0x04, 0x30, 0x01, 0x00, 0x00,
+ 0x00, 0x04, 0x03, 0x00, 0x09, 0x00, 0x08, 0x21,
+ 0x04, 0x30, 0x01, 0x00, 0x00, 0x00, 0x04, 0x03,
+ 0x00, 0x09, 0x00, 0x0C, 0x21, 0x04, 0x30, 0x01,
+ 0x00, 0x00, 0x00, 0x04, 0x03, 0x00, 0x09, 0x00,
+ 0x10, 0x21, 0x04, 0x30, 0x01, 0x00, 0x00, 0x00,
+ 0x04, 0x03, 0x00, 0x09, 0x00, 0x14, 0x21, 0x04,
+ 0x30, 0x01, 0x00, 0x00, 0x00, 0x04, 0x03, 0x00,
+ 0x09, 0x00, 0x18, 0x21, 0x04, 0x30, 0x01, 0x00,
+ 0x00, 0x00, 0x04, 0x03, 0x00, 0x09, 0x00, 0x44,
+ 0x21, 0x04, 0x30, 0x01, 0x00, 0x00, 0x00, 0x04,
+ 0x03, 0x00, 0x09, 0x00, 0x48, 0x21, 0x04, 0x30,
+ 0x01, 0x00, 0x00, 0x00, 0x04, 0x03, 0x00, 0x09,
+ 0x00, 0x4C, 0x21, 0x04, 0x30, 0x01, 0x00, 0x00,
+ 0x00, 0x04, 0x03, 0x00, 0x09, 0x00, 0x50, 0x21,
+ 0x04, 0x30, 0x01, 0x00, 0x00, 0x00, 0x04, 0x03,
+ 0x00, 0x09, 0x00, 0x54, 0x21, 0x04, 0x30, 0x01,
+ 0x00, 0x00, 0x00, 0x04, 0x03, 0x00, 0x09, 0x00,
+ 0x58, 0x21, 0x04, 0x30, 0x01, 0x00, 0x00, 0x00,
+ 0x04, 0x03, 0x00, 0x09, 0x00, 0xC8, 0x20, 0x04,
+ 0x30, 0x04, 0x00, 0x00, 0x00, 0x04, 0x05, 0x00,
+ 0x0E, 0x00, 0x14, 0x20, 0xFF, 0xFF, 0x00, 0xFF,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x83, 0x00,
+ 0x03, 0x00, 0x09, 0x00, 0x84, 0x21, 0x04, 0x30,
+ 0x01, 0x00, 0x00, 0x00, 0x04, 0x03, 0x00, 0x09,
+ 0x00, 0x88, 0x21, 0x04, 0x30, 0x01, 0x00, 0x00,
+ 0x00, 0x04, 0x03, 0x00, 0x09, 0x00, 0x8C, 0x21,
+ 0x04, 0x30, 0x01, 0x00, 0x00, 0x00, 0x04, 0x03,
+ 0x00, 0x09, 0x00, 0x90, 0x21, 0x04, 0x30, 0x01,
+ 0x00, 0x00, 0x00, 0x04, 0x03, 0x00, 0x09, 0x00,
+ 0x94, 0x21, 0x04, 0x30, 0x01, 0x00, 0x00, 0x00,
+ 0x04, 0x03, 0x00, 0x09, 0x00, 0x98, 0x21, 0x04,
+ 0x30, 0x00, 0x00, 0x00, 0x00, 0x04, 0x03, 0x00,
+ 0x09, 0x00, 0xA0, 0x21, 0x04, 0x30, 0x00, 0x00,
+ 0x00, 0x00, 0x04, 0x03, 0x00, 0x09, 0x00, 0x20,
+ 0x21, 0x04, 0x30, 0x08, 0x00, 0x00, 0x00, 0x04,
+ 0x03, 0x00, 0x09, 0x00, 0x60, 0x21, 0x04, 0x30,
+ 0x08, 0x00, 0x00, 0x00, 0x04, 0x15, 0x00, 0x08,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x28, 0x00,
+ 0x00,
+};
+
+static unsigned char vfs5011_cmd_27[] = { /* 1 B */
+ 0x27,
+};
+
+static unsigned char vfs5011_init_15[] = { /* 3794 B */
+ 0x06, 0x6B, 0x06, 0x6A, 0x76, 0xC8, 0x18, 0xD4,
+ 0x54, 0xEF, 0x71, 0x14, 0xCC, 0x1C, 0x58, 0x91,
+ 0x11, 0xAA, 0x80, 0xF4, 0x2C, 0xFC, 0x9F, 0x5F,
+ 0xDF, 0x04, 0x02, 0x62, 0xBA, 0x6A, 0x5A, 0x97,
+ 0x17, 0xCC, 0x46, 0x22, 0xFA, 0x2A, 0xBE, 0x03,
+ 0x87, 0x3C, 0x9E, 0xFE, 0x26, 0xF6, 0x96, 0x7E,
+ 0xFA, 0x11, 0x27, 0x66, 0xBA, 0x3A, 0x5A, 0xBA,
+ 0x3E, 0xD5, 0x4F, 0x03, 0xDF, 0x5F, 0x7F, 0x9F,
+ 0x1B, 0xF0, 0xA2, 0xEF, 0x33, 0xB3, 0xD3, 0x13,
+ 0x93, 0x70, 0xFA, 0x96, 0x4E, 0xC6, 0xA6, 0xC6,
+ 0x46, 0xA5, 0x2F, 0xE3, 0x3B, 0xB3, 0xD3, 0x33,
+ 0xB3, 0x50, 0xE8, 0xA4, 0x7C, 0xF4, 0x94, 0x14,
+ 0x94, 0x77, 0xC9, 0xE5, 0x3D, 0xB5, 0xD5, 0x75,
+ 0xF5, 0x16, 0xA8, 0xA4, 0x7C, 0xF4, 0x94, 0xD4,
+ 0x54, 0xB7, 0x09, 0xE5, 0x3D, 0xB5, 0x2D, 0xF4,
+ 0x74, 0xCF, 0x29, 0x5C, 0x84, 0x54, 0x14, 0xAA,
+ 0x2E, 0x95, 0xF7, 0xE0, 0x3C, 0xEC, 0x8C, 0x52,
+ 0xD6, 0x3D, 0x7B, 0x0E, 0xD6, 0x06, 0x82, 0x49,
+ 0xC9, 0x72, 0x7C, 0x18, 0xC0, 0x10, 0x10, 0xF6,
+ 0x72, 0xC9, 0xC3, 0xA8, 0x70, 0xA0, 0xD8, 0x77,
+ 0xF3, 0x48, 0x06, 0x04, 0xD8, 0x08, 0x90, 0x5B,
+ 0xDB, 0x60, 0x36, 0x43, 0x9B, 0x4B, 0xD4, 0xE3,
+ 0x9C, 0xB8, 0xF1, 0x72, 0x55, 0x1A, 0x8E, 0x57,
+ 0xD7, 0x6C, 0xDA, 0xBE, 0x66, 0xD6, 0xEA, 0x3D,
+ 0xBF, 0x04, 0xB2, 0xCE, 0x16, 0xA6, 0x06, 0xDE,
+ 0x5E, 0xE5, 0xB7, 0xC3, 0x1B, 0xCB, 0x47, 0x9F,
+ 0x1F, 0xA4, 0x3E, 0x5B, 0x83, 0x53, 0x53, 0x8A,
+ 0x0A, 0xB1, 0x93, 0xF9, 0x21, 0xF1, 0x31, 0xE6,
+ 0x64, 0xDF, 0x95, 0xE0, 0x38, 0xE8, 0xB4, 0x6D,
+ 0xED, 0x56, 0x1D, 0x8E, 0x56, 0xE6, 0x79, 0xB9,
+ 0xC6, 0xE2, 0x62, 0x4F, 0x97, 0x02, 0x40, 0x80,
+ 0x65, 0xB8, 0x0E, 0x07, 0xC2, 0x72, 0x37, 0xBE,
+ 0x3E, 0x00, 0xF2, 0xB8, 0xF1, 0x6D, 0x0E, 0x6F,
+ 0xC2, 0x1A, 0xA0, 0xC4, 0x95, 0x2F, 0xCD, 0x44,
+ 0xC4, 0x02, 0x44, 0x28, 0xF0, 0x40, 0x16, 0x97,
+ 0x17, 0x7D, 0xE4, 0x8B, 0xFE, 0x4C, 0x0D, 0xE3,
+ 0x60, 0xFD, 0x4B, 0x27, 0x34, 0xA6, 0xCD, 0xB6,
+ 0x10, 0xC0, 0x7C, 0x98, 0x42, 0x72, 0x92, 0x26,
+ 0x21, 0x60, 0x26, 0x4C, 0x95, 0x25, 0xA0, 0x03,
+ 0xA6, 0x50, 0xEC, 0x9D, 0xB5, 0x05, 0x53, 0xD2,
+ 0x52, 0xA9, 0x7E, 0x12, 0x2F, 0x65, 0xFA, 0x1A,
+ 0x7C, 0xB4, 0x12, 0x5E, 0x86, 0x3A, 0x50, 0xF5,
+ 0x53, 0xAD, 0xBA, 0xE6, 0x3D, 0x3C, 0x6D, 0xAE,
+ 0xCB, 0x33, 0xAD, 0xDC, 0xF4, 0x44, 0x12, 0x93,
+ 0x13, 0xF9, 0x7D, 0x12, 0xEB, 0x68, 0x0B, 0xE2,
+ 0x21, 0xE7, 0xA1, 0xCD, 0x15, 0xA5, 0xF3, 0x72,
+ 0xF2, 0xAB, 0x1F, 0x7E, 0xAA, 0x01, 0xE1, 0xA1,
+ 0x25, 0xA8, 0x06, 0x6D, 0xB9, 0x0C, 0x60, 0xA6,
+ 0x64, 0xAD, 0x15, 0x65, 0xBA, 0x30, 0x14, 0x66,
+ 0x22, 0x78, 0xFC, 0x94, 0x4C, 0x4E, 0x25, 0x9B,
+ 0xD9, 0x06, 0xB1, 0xEA, 0x89, 0x35, 0x62, 0x1E,
+ 0x8F, 0x69, 0xD4, 0x7F, 0x1C, 0xA0, 0xFD, 0x31,
+ 0x77, 0xAD, 0x1B, 0x40, 0xA4, 0x10, 0xB7, 0xCC,
+ 0x4D, 0xAB, 0x16, 0xD7, 0x0C, 0x01, 0x62, 0x87,
+ 0xBF, 0x4C, 0x50, 0x5A, 0xD8, 0x3B, 0x50, 0xE7,
+ 0x2C, 0xB3, 0xB7, 0x1F, 0x46, 0xA0, 0x57, 0x6B,
+ 0x46, 0x98, 0x93, 0xFA, 0xC7, 0xC1, 0x89, 0x45,
+ 0xDE, 0xD7, 0xC3, 0xC3, 0xBB, 0xCF, 0xEE, 0xEE,
+ 0xA8, 0xB3, 0xDF, 0x61, 0x4B, 0xE6, 0x04, 0x04,
+ 0x40, 0xDA, 0xAC, 0x43, 0xDA, 0x9A, 0x15, 0x25,
+ 0x45, 0x7D, 0xEA, 0x0C, 0x3A, 0x7A, 0xD4, 0x87,
+ 0xC5, 0x43, 0x77, 0x1D, 0xC6, 0x76, 0xD4, 0xB6,
+ 0x5A, 0x4B, 0x3F, 0x91, 0x55, 0x98, 0xC2, 0xCE,
+ 0x8C, 0x5B, 0xED, 0x53, 0x99, 0x20, 0x6D, 0xA6,
+ 0xF1, 0x96, 0x21, 0x41, 0xBB, 0x16, 0x86, 0x46,
+ 0xC6, 0x1D, 0x9D, 0xB0, 0x68, 0x69, 0x3D, 0xFE,
+ 0xC6, 0x16, 0x2C, 0x2B, 0x51, 0x40, 0x40, 0x2A,
+ 0x01, 0xBF, 0xB3, 0xFF, 0x8A, 0x38, 0x3D, 0x51,
+ 0xF4, 0x32, 0x74, 0x18, 0xC0, 0x70, 0x26, 0xA7,
+ 0x27, 0x5D, 0xDE, 0xB1, 0xD8, 0x5E, 0x3D, 0x30,
+ 0xB2, 0x0C, 0xEC, 0xA5, 0xCC, 0x44, 0x27, 0xC7,
+ 0x6D, 0x16, 0x01, 0x5A, 0x81, 0xFC, 0x9E, 0x3B,
+ 0xEE, 0x10, 0x17, 0x41, 0x9A, 0x0A, 0x50, 0x30,
+ 0x72, 0x6A, 0xCC, 0x01, 0xE0, 0x53, 0x3F, 0xFD,
+ 0x54, 0x8C, 0x13, 0x6C, 0x9D, 0x0E, 0x47, 0xB4,
+ 0xD1, 0x59, 0xCA, 0x17, 0xF3, 0x40, 0x10, 0xEA,
+ 0xCA, 0xD3, 0xA6, 0xDA, 0xA3, 0x28, 0x4B, 0x6E,
+ 0xBC, 0x42, 0xF8, 0x9D, 0x75, 0xFF, 0x3F, 0xCD,
+ 0x8E, 0x45, 0xE8, 0x1D, 0xEC, 0x5F, 0x74, 0x87,
+ 0x61, 0x23, 0x63, 0xA2, 0x79, 0x7B, 0xBB, 0xDE,
+ 0x72, 0xE5, 0xB6, 0x7B, 0x8B, 0x9A, 0xC7, 0x04,
+ 0x35, 0xD0, 0x65, 0xCB, 0xD0, 0x44, 0x41, 0xD1,
+ 0x74, 0x1E, 0xE8, 0x87, 0x6F, 0xE5, 0x25, 0x44,
+ 0xFB, 0x23, 0xA7, 0x08, 0xF4, 0x89, 0xEA, 0xCF,
+ 0x1E, 0xE0, 0xE7, 0xC9, 0x12, 0x92, 0xC8, 0xA8,
+ 0x89, 0x13, 0xA6, 0x07, 0xDC, 0xC9, 0xFA, 0x1F,
+ 0x2E, 0xB1, 0x04, 0x58, 0xBA, 0xAA, 0x6B, 0xE8,
+ 0x6B, 0x7D, 0xC8, 0x01, 0x8B, 0x1E, 0xCF, 0x49,
+ 0xCA, 0x21, 0xAD, 0x61, 0x18, 0xED, 0x8E, 0x83,
+ 0x00, 0x3E, 0xD9, 0x90, 0x78, 0xE2, 0x22, 0xFF,
+ 0x8F, 0x54, 0xD4, 0xF9, 0x21, 0x10, 0x37, 0xF4,
+ 0xFC, 0x2F, 0x15, 0x31, 0x48, 0xB0, 0xD3, 0x36,
+ 0xC1, 0x32, 0x99, 0x05, 0xDD, 0x6D, 0x3B, 0xBA,
+ 0x3A, 0x60, 0x91, 0xFE, 0xAE, 0x16, 0xFA, 0x72,
+ 0x53, 0xC0, 0x75, 0xFC, 0x51, 0xC9, 0x0C, 0x38,
+ 0x99, 0x5F, 0x19, 0x75, 0xAD, 0x1D, 0x4B, 0xCA,
+ 0x4A, 0x3C, 0x88, 0x01, 0x40, 0xD2, 0x33, 0xB4,
+ 0x37, 0x64, 0xDA, 0x3A, 0xAA, 0xBB, 0x93, 0x50,
+ 0xF5, 0x5A, 0xC4, 0xB5, 0x9D, 0x2D, 0x7B, 0xFA,
+ 0x7A, 0x84, 0x17, 0x7B, 0x22, 0xD8, 0xBB, 0xEA,
+ 0x58, 0x80, 0x97, 0xB2, 0x69, 0x70, 0x49, 0x00,
+ 0x89, 0x4F, 0x09, 0x65, 0xBD, 0x0D, 0x5B, 0xDA,
+ 0x5A, 0xB0, 0x32, 0x5D, 0x89, 0x1E, 0x46, 0x85,
+ 0x54, 0xC4, 0x71, 0x8F, 0x54, 0xEC, 0xEE, 0x8F,
+ 0x7F, 0xAF, 0x90, 0xEA, 0x7A, 0xCC, 0x7D, 0xF1,
+ 0x72, 0xA5, 0x79, 0x19, 0xC6, 0xF4, 0x5D, 0x61,
+ 0xF7, 0x24, 0x98, 0xD2, 0x53, 0xEB, 0x26, 0xE4,
+ 0x01, 0x67, 0xF7, 0xB6, 0x64, 0xC9, 0x59, 0xF3,
+ 0x30, 0x59, 0xFC, 0x9B, 0xD1, 0x65, 0x05, 0xD3,
+ 0x68, 0xB8, 0x68, 0x7D, 0xB5, 0xC7, 0xB3, 0x8F,
+ 0x59, 0x2E, 0x92, 0x5C, 0xC7, 0x7F, 0x3D, 0xFE,
+ 0x73, 0x88, 0x1F, 0x77, 0xB2, 0xF2, 0x9E, 0x55,
+ 0x57, 0x8F, 0x34, 0x9A, 0x61, 0x0C, 0x7B, 0xD3,
+ 0x5C, 0x15, 0xAE, 0xC2, 0x16, 0xB4, 0xC2, 0x2B,
+ 0xA5, 0x75, 0x6A, 0xA4, 0x31, 0x81, 0xA7, 0x67,
+ 0xE7, 0x30, 0x84, 0x28, 0xD0, 0x60, 0xA2, 0x71,
+ 0xF9, 0xE0, 0x33, 0xFF, 0xAB, 0x01, 0x04, 0x22,
+ 0x84, 0x42, 0x04, 0x02, 0x99, 0xFB, 0x9F, 0x5F,
+ 0xB9, 0x7F, 0xF5, 0x21, 0xDB, 0xC6, 0xA5, 0x00,
+ 0x60, 0x9D, 0x8B, 0x07, 0xAB, 0x7D, 0x03, 0xE2,
+ 0xD3, 0x45, 0xF0, 0x6E, 0xBD, 0x0D, 0x4B, 0xA4,
+ 0x23, 0x8A, 0x77, 0x1B, 0xCF, 0x75, 0x30, 0x96,
+ 0x33, 0xE4, 0x6A, 0x94, 0x6F, 0x01, 0xA1, 0x41,
+ 0xC1, 0x88, 0x5B, 0x97, 0xCD, 0x3E, 0x56, 0xD0,
+ 0x53, 0x88, 0x9C, 0xE3, 0x3C, 0x00, 0x1A, 0xA8,
+ 0x6C, 0xB7, 0xA3, 0xDC, 0x03, 0x96, 0x14, 0xF2,
+ 0x7E, 0xB7, 0x1C, 0x80, 0xEA, 0x49, 0x21, 0x8B,
+ 0x48, 0x85, 0xF8, 0x93, 0x89, 0x3D, 0x5D, 0x5F,
+ 0x13, 0x33, 0x93, 0xC3, 0x1C, 0x4E, 0x2D, 0xE0,
+ 0xE2, 0x1D, 0x2A, 0x51, 0xE7, 0x07, 0xF5, 0x38,
+ 0xB8, 0x75, 0x4A, 0x2A, 0xFE, 0x5C, 0x37, 0x0E,
+ 0x7C, 0xEA, 0x5C, 0xB6, 0x7E, 0xCE, 0x2C, 0x25,
+ 0x5C, 0xD1, 0xFF, 0x66, 0x06, 0x94, 0x59, 0x9A,
+ 0x7F, 0x7D, 0xED, 0x21, 0x69, 0xAD, 0xC6, 0x9F,
+ 0x49, 0x7B, 0xC7, 0xA7, 0x74, 0xC8, 0xE4, 0xC6,
+ 0x65, 0x63, 0x07, 0xC9, 0x65, 0x0F, 0xBC, 0xBC,
+ 0x1C, 0xC7, 0xD3, 0xAC, 0x7C, 0x2E, 0x2B, 0x4B,
+ 0xB9, 0x3F, 0xF7, 0x59, 0xC2, 0x7A, 0x0C, 0x86,
+ 0xF4, 0x23, 0xFB, 0x75, 0xE9, 0x59, 0x9B, 0x48,
+ 0xC0, 0x7E, 0x13, 0x59, 0x07, 0x72, 0xED, 0x00,
+ 0x87, 0x50, 0xE9, 0x45, 0xBD, 0x0D, 0xCF, 0x1C,
+ 0x94, 0xCD, 0x1E, 0xD2, 0x1C, 0x36, 0xA5, 0x80,
+ 0xD9, 0x24, 0x8F, 0x13, 0xC7, 0x75, 0x53, 0x5B,
+ 0x24, 0x47, 0xD3, 0x12, 0xC9, 0x5C, 0xE8, 0x0E,
+ 0x2E, 0x65, 0xA7, 0xAD, 0x6C, 0xFB, 0x97, 0x5C,
+ 0x0E, 0xF6, 0x9D, 0x33, 0x49, 0x8D, 0x27, 0x24,
+ 0x64, 0x9F, 0x29, 0x97, 0x2A, 0x3A, 0xF8, 0x2B,
+ 0xA3, 0x0A, 0xE0, 0xF2, 0x96, 0x7C, 0x76, 0x55,
+ 0xD9, 0x6F, 0x0B, 0x29, 0xF1, 0xE3, 0x90, 0x58,
+ 0xBD, 0xB0, 0x20, 0xCA, 0x1B, 0xAB, 0xC7, 0x78,
+ 0xF4, 0x7B, 0x8F, 0xA0, 0x70, 0xAA, 0x89, 0xBB,
+ 0x7F, 0xA4, 0xA0, 0xDF, 0x0C, 0x20, 0x0B, 0x79,
+ 0xAD, 0x8A, 0x30, 0xA6, 0x72, 0x4A, 0xA8, 0x2C,
+ 0xAC, 0x12, 0x70, 0x3A, 0x70, 0xD4, 0x48, 0x1A,
+ 0x53, 0x79, 0x5D, 0x65, 0x41, 0xD3, 0xB0, 0x7D,
+ 0xDD, 0x27, 0x95, 0xE4, 0xCC, 0x51, 0x36, 0x70,
+ 0x2F, 0x0B, 0x1F, 0x67, 0x43, 0xE5, 0x5F, 0x77,
+ 0xFB, 0xA8, 0x9C, 0xB4, 0x6C, 0x6A, 0xB0, 0x60,
+ 0xEC, 0xCD, 0xDE, 0x63, 0x9D, 0x0F, 0x7B, 0x47,
+ 0xE5, 0xFC, 0xBB, 0xF5, 0x79, 0x35, 0x53, 0x0E,
+ 0x71, 0x4F, 0x29, 0x63, 0x96, 0x21, 0x07, 0x3B,
+ 0x44, 0x9F, 0x1F, 0x32, 0xEA, 0x0B, 0x5F, 0x9C,
+ 0x44, 0x9A, 0x6E, 0xA2, 0x8A, 0x70, 0x55, 0xA7,
+ 0x23, 0x78, 0xE8, 0xA7, 0x4E, 0xD8, 0xFB, 0x08,
+ 0xE9, 0x79, 0xCC, 0xD1, 0x45, 0xF6, 0x9A, 0xF2,
+ 0x54, 0xEC, 0x75, 0x7F, 0x24, 0x8A, 0xE6, 0x55,
+ 0x47, 0xB9, 0xD1, 0x7D, 0x85, 0x35, 0xC7, 0x61,
+ 0x41, 0xA8, 0x5A, 0xB6, 0xDC, 0x69, 0x04, 0x66,
+ 0xE1, 0x3A, 0x3C, 0xE1, 0x3D, 0x3D, 0xF5, 0xA6,
+ 0x84, 0x18, 0xAE, 0xDF, 0xF7, 0x5A, 0xCA, 0x06,
+ 0x95, 0x08, 0xBE, 0xD2, 0x06, 0x85, 0xD7, 0x53,
+ 0x53, 0x95, 0xD3, 0xB3, 0x38, 0x4A, 0x0F, 0x11,
+ 0x51, 0xAA, 0x1C, 0xB2, 0x0C, 0x1C, 0xBA, 0x89,
+ 0xF6, 0x2D, 0xAD, 0x80, 0x58, 0xD9, 0xF7, 0x34,
+ 0x95, 0x01, 0xB4, 0xF1, 0x3A, 0x97, 0x07, 0xC7,
+ 0x47, 0x9C, 0x1C, 0x31, 0xE9, 0xC8, 0x9C, 0x5F,
+ 0x47, 0x95, 0xAF, 0x6A, 0x10, 0x89, 0x34, 0x54,
+ 0x74, 0xBB, 0x2B, 0x7D, 0xA7, 0xF2, 0xD0, 0x31,
+ 0xAC, 0x87, 0x07, 0x2A, 0xF2, 0xE3, 0xD2, 0x11,
+ 0xB0, 0x21, 0x94, 0xC9, 0x23, 0x90, 0x61, 0xF1,
+ 0x72, 0x28, 0xCC, 0xA3, 0xF2, 0x6B, 0x22, 0xE1,
+ 0xC8, 0x4A, 0xE1, 0x7D, 0xA5, 0x15, 0x43, 0xC2,
+ 0x42, 0xB8, 0x5D, 0x32, 0x62, 0xF0, 0x57, 0xFF,
+ 0x62, 0x18, 0xFA, 0x95, 0x28, 0xD1, 0x99, 0xC8,
+ 0x1D, 0xC5, 0xB2, 0x88, 0x53, 0x52, 0x65, 0xA6,
+ 0x8E, 0x77, 0x79, 0x1E, 0x06, 0x1C, 0x6C, 0x3C,
+ 0x26, 0xED, 0xEB, 0x1D, 0x56, 0x7F, 0x3D, 0x58,
+ 0x11, 0xEF, 0x44, 0xD8, 0x00, 0xB0, 0xE6, 0x67,
+ 0xE7, 0x9D, 0x7F, 0x10, 0x2D, 0xDF, 0x97, 0xB6,
+ 0x6E, 0xB6, 0x41, 0x1F, 0xC4, 0x45, 0x76, 0xB5,
+ 0x39, 0xEE, 0x80, 0xCF, 0xE6, 0x01, 0x62, 0x15,
+ 0xF8, 0x01, 0x0A, 0x69, 0x79, 0xCD, 0x64, 0xAB,
+ 0x86, 0x5F, 0x68, 0x5D, 0x86, 0xD6, 0x2B, 0xCB,
+ 0xD2, 0x2A, 0x15, 0x7D, 0xC0, 0x38, 0x58, 0x29,
+ 0xF3, 0x2B, 0x35, 0x7A, 0xAE, 0x1C, 0xCC, 0xA6,
+ 0x06, 0x74, 0xE1, 0x90, 0xB8, 0x04, 0x6F, 0x69,
+ 0x1F, 0x3B, 0xBB, 0x96, 0x4E, 0xE2, 0x4A, 0x0D,
+ 0x1F, 0xC0, 0x57, 0x60, 0xBB, 0x16, 0x86, 0xEB,
+ 0x69, 0x97, 0xE3, 0xAA, 0x5F, 0xE5, 0x98, 0xA8,
+ 0x28, 0xF3, 0x73, 0x5E, 0x86, 0x47, 0x60, 0xA3,
+ 0xFF, 0x70, 0x4E, 0x25, 0x71, 0x89, 0x4C, 0x92,
+ 0x12, 0x8F, 0x38, 0x54, 0x2D, 0xD5, 0xB6, 0x53,
+ 0xEF, 0x1C, 0x02, 0x69, 0xBD, 0x04, 0xF6, 0x7C,
+ 0x64, 0x0D, 0x1B, 0x04, 0x96, 0x45, 0xE7, 0x87,
+ 0x73, 0xCF, 0x45, 0x3A, 0x5F, 0xED, 0x25, 0xE2,
+ 0xAF, 0x77, 0x8B, 0x4D, 0x37, 0x4D, 0x09, 0x6C,
+ 0xA9, 0x5A, 0x5E, 0x92, 0x39, 0x4F, 0x2A, 0xEA,
+ 0x2D, 0xCD, 0x6F, 0xBE, 0x64, 0x7C, 0x1B, 0x19,
+ 0x39, 0x96, 0x60, 0xC0, 0xD8, 0x22, 0xE8, 0x8A,
+ 0xC0, 0x3F, 0x6C, 0x43, 0xB3, 0xB1, 0x71, 0xC2,
+ 0xFE, 0x70, 0xA1, 0xF6, 0x26, 0x34, 0xF0, 0x35,
+ 0x50, 0x5A, 0xC8, 0xE2, 0x3D, 0x8D, 0x5F, 0x3F,
+ 0xCB, 0x77, 0x7A, 0x1E, 0x64, 0x70, 0x16, 0x33,
+ 0x63, 0x9C, 0xAC, 0xC3, 0x1B, 0xA7, 0xCD, 0xD5,
+ 0x52, 0x85, 0x2F, 0x81, 0x14, 0x3C, 0xB9, 0xB6,
+ 0x12, 0xEC, 0x5E, 0x32, 0x02, 0xB5, 0x37, 0xF9,
+ 0xE1, 0xF6, 0x0E, 0xC3, 0x53, 0xE0, 0x25, 0xDD,
+ 0x75, 0xB3, 0xF5, 0x99, 0x41, 0xF1, 0xA7, 0x26,
+ 0xA6, 0x4C, 0xBD, 0xD2, 0x32, 0x81, 0xC0, 0x5C,
+ 0xDF, 0x2D, 0xE8, 0x0F, 0x54, 0x76, 0xD5, 0x01,
+ 0x18, 0xA0, 0x8F, 0xB0, 0xE1, 0x62, 0x8B, 0x68,
+ 0xCA, 0xD3, 0x99, 0xDC, 0x47, 0xEA, 0x7A, 0xBA,
+ 0x3A, 0xE1, 0x61, 0x4C, 0x94, 0xC1, 0xB2, 0x72,
+ 0xEF, 0xC4, 0x44, 0x69, 0xB1, 0x0D, 0x27, 0x42,
+ 0xE2, 0x1B, 0x8C, 0xA7, 0x7C, 0x41, 0x2B, 0x73,
+ 0xF1, 0x26, 0x8A, 0x64, 0xD5, 0x42, 0x87, 0x58,
+ 0xFA, 0x5D, 0x37, 0x27, 0x11, 0xAD, 0xE5, 0x9D,
+ 0x1F, 0xC8, 0x69, 0xA7, 0x14, 0x8C, 0x5D, 0xD6,
+ 0x55, 0x4E, 0xD8, 0xB4, 0xFE, 0x65, 0xAD, 0xAD,
+ 0x0D, 0xD6, 0x10, 0xE5, 0x1D, 0x3F, 0x34, 0x5C,
+ 0x1C, 0xE7, 0x51, 0xCF, 0x3C, 0x24, 0x84, 0x64,
+ 0xE4, 0xBF, 0xF6, 0xBA, 0x90, 0x4B, 0x83, 0x83,
+ 0x23, 0xF8, 0x9C, 0xDB, 0xA9, 0xD9, 0x99, 0x59,
+ 0x39, 0x3F, 0x99, 0x27, 0x94, 0x8E, 0x2E, 0xCE,
+ 0x4E, 0x37, 0xAA, 0x6C, 0x74, 0xE4, 0x84, 0x84,
+ 0xAE, 0x65, 0x71, 0x76, 0x04, 0x15, 0x28, 0xEB,
+ 0xCE, 0x00, 0x94, 0xF4, 0x2F, 0x27, 0x45, 0x89,
+ 0x0F, 0xD8, 0x2B, 0xA7, 0x3C, 0x9D, 0xF1, 0x38,
+ 0x88, 0xB0, 0xF6, 0x7A, 0x4C, 0xED, 0x3D, 0x0E,
+ 0x2E, 0x97, 0x4E, 0x08, 0xDC, 0x73, 0xDB, 0x19,
+ 0x09, 0x7B, 0x3D, 0x4A, 0x0B, 0x2B, 0xDB, 0x6F,
+ 0x05, 0x12, 0x6E, 0xC8, 0xC2, 0x7E, 0x37, 0x75,
+ 0xF9, 0x08, 0x0C, 0x6C, 0x91, 0xA1, 0x49, 0x98,
+ 0xA8, 0xC0, 0x37, 0xE9, 0x7D, 0xE8, 0x58, 0x10,
+ 0xB0, 0xB3, 0x07, 0xD6, 0x06, 0x36, 0xE9, 0xAA,
+ 0xC0, 0xC6, 0xC0, 0x54, 0xCD, 0x8F, 0xA3, 0x49,
+ 0x13, 0x62, 0x56, 0x30, 0xC0, 0xC2, 0xEE, 0x07,
+ 0x07, 0x58, 0xAF, 0x41, 0xD3, 0x4B, 0x4D, 0xC4,
+ 0xFE, 0xAD, 0x19, 0xD8, 0x03, 0x39, 0xCA, 0x80,
+ 0xB4, 0xDD, 0x40, 0x06, 0x54, 0x6A, 0xBA, 0xC1,
+ 0xB1, 0xD0, 0xEE, 0x00, 0xD0, 0x47, 0xA5, 0x2C,
+ 0x44, 0x17, 0xA3, 0xC3, 0x10, 0x20, 0x93, 0xC3,
+ 0xC9, 0xE6, 0xA2, 0xE1, 0x13, 0x29, 0xA7, 0x97,
+ 0xE8, 0xC3, 0x8F, 0x0D, 0x17, 0xA9, 0xE3, 0xC1,
+ 0x4F, 0xBD, 0x8B, 0x2B, 0xE2, 0xB2, 0x1E, 0xFE,
+ 0xBC, 0x3A, 0xE0, 0xE9, 0x20, 0x90, 0xFC, 0x35,
+ 0xBE, 0x30, 0x3E, 0x50, 0x93, 0x10, 0x40, 0xB0,
+ 0x44, 0xAF, 0xFA, 0x66, 0x04, 0x70, 0x62, 0xCE,
+ 0x60, 0x5B, 0xAE, 0xD3, 0x5D, 0x58, 0xCD, 0xAF,
+ 0xE4, 0x2B, 0x1C, 0x2E, 0xF5, 0xD7, 0x9C, 0x79,
+ 0x6B, 0xDB, 0x44, 0xE8, 0x10, 0xA0, 0x48, 0x80,
+ 0x89, 0xD9, 0xCA, 0xF1, 0x09, 0xA4, 0x34, 0xF4,
+ 0x74, 0xAF, 0x2F, 0x02, 0xDA, 0x4B, 0x6C, 0xAF,
+ 0x87, 0x5E, 0x4A, 0xEC, 0x20, 0xB5, 0x8D, 0x6D,
+ 0x45, 0x9C, 0xA1, 0x67, 0x9A, 0xB9, 0xFE, 0x32,
+ 0xF8, 0xC1, 0xD8, 0x34, 0x3D, 0xC6, 0xA5, 0xA5,
+ 0x05, 0xDE, 0xAA, 0xEB, 0x87, 0xF7, 0xB7, 0x77,
+ 0x4F, 0x96, 0xC0, 0x60, 0xA8, 0xDA, 0xD7, 0xA3,
+ 0x91, 0x61, 0xF0, 0xF9, 0x29, 0xBB, 0x63, 0xA1,
+ 0x2D, 0xEC, 0xE8, 0xAF, 0x5F, 0x0A, 0x6D, 0x8F,
+ 0x12, 0x39, 0xB9, 0x94, 0x4C, 0xAD, 0x86, 0x45,
+ 0x05, 0xFE, 0x48, 0x66, 0x9B, 0x9F, 0x3F, 0xDF,
+ 0x5F, 0xB4, 0x46, 0x3A, 0xA2, 0x50, 0x10, 0x92,
+ 0x77, 0x18, 0xB3, 0x2F, 0xF7, 0x47, 0x11, 0x90,
+ 0x10, 0xC7, 0x72, 0x6C, 0x14, 0xD4, 0xE5, 0x62,
+ 0xE1, 0x36, 0x96, 0x42, 0x9F, 0x1F, 0xBC, 0x8C,
+ 0xBC, 0xC4, 0xD2, 0x6C, 0x9E, 0x04, 0xD4, 0xD8,
+ 0xF8, 0xF3, 0x98, 0x04, 0x06, 0x7A, 0x98, 0x54,
+ 0xF0, 0xCB, 0x3E, 0x43, 0xFD, 0x55, 0x09, 0x2B,
+ 0x81, 0x74, 0x10, 0x56, 0xBC, 0x47, 0x94, 0xB3,
+ 0x3E, 0xF2, 0xE6, 0x86, 0x76, 0xC6, 0xBD, 0x3D,
+ 0xBD, 0xD0, 0xC7, 0xDB, 0xB8, 0x18, 0xD8, 0xB8,
+ 0x0C, 0x67, 0x7B, 0x37, 0x4F, 0x5F, 0x4B, 0xCD,
+ 0x4D, 0x96, 0x2C, 0x4A, 0x20, 0x3F, 0xDF, 0x3A,
+ 0x43, 0x67, 0x69, 0x00, 0x62, 0x06, 0x94, 0x79,
+ 0xD7, 0x00, 0xAA, 0x36, 0x01, 0xA0, 0x30, 0x3E,
+ 0x2D, 0x34, 0xEF, 0xAD, 0x6E, 0xED, 0xBD, 0x4D,
+ 0xB9, 0x04, 0xF1, 0x3D, 0x6E, 0x75, 0xB0, 0xF5,
+ 0x52, 0x24, 0x90, 0x7D, 0xFB, 0x48, 0xE8, 0x08,
+ 0x88, 0xDB, 0x65, 0x80, 0x6A, 0x7F, 0x56, 0xB6,
+ 0x2B, 0x00, 0x80, 0xAD, 0x75, 0x44, 0x63, 0xA0,
+ 0x00, 0xB9, 0xFF, 0x1B, 0xCB, 0x70, 0x53, 0x13,
+ 0xA1, 0xEA, 0xDC, 0xE2, 0x9A, 0x58, 0x1D, 0xF7,
+ 0xF7, 0x4A, 0x5C, 0x40, 0xEF, 0xAF, 0xB5, 0x53,
+ 0x85, 0xBA, 0x08, 0x46, 0x9C, 0x0A, 0x28, 0x7B,
+ 0x8B, 0xD0, 0x44, 0x29, 0xD1, 0x49, 0x18, 0x92,
+ 0x30, 0xEB, 0x7F, 0x02, 0xFA, 0x6A, 0x3B, 0xD9,
+ 0x0A, 0xA1, 0x55, 0x1C, 0xEE, 0x1E, 0x3A, 0x0A,
+ 0xC0, 0x5D, 0xA9, 0xC1, 0x3F, 0x2E, 0x11, 0xD2,
+ 0xD2, 0x4D, 0xFA, 0xD6, 0x46, 0xC7, 0x01, 0xD5,
+ 0x59, 0x24, 0x50, 0x2F, 0xEB, 0xA9, 0xD5, 0xED,
+ 0xEF, 0x67, 0xA1, 0x8B, 0x51, 0xE1, 0x67, 0xB5,
+ 0x33, 0xE4, 0x50, 0x30, 0xE1, 0xC3, 0xF0, 0x40,
+ 0x60, 0x19, 0x0F, 0xCB, 0x19, 0x0B, 0x0E, 0xFC,
+ 0x61, 0x4A, 0xDE, 0xB0, 0x4D, 0x7B, 0xF4, 0xCB,
+ 0x4B, 0x90, 0x10, 0x3D, 0xE5, 0x59, 0x3B, 0xF7,
+ 0x72, 0xE8, 0x19, 0x76, 0xA2, 0x51, 0xF9, 0x3D,
+ 0x7D, 0x74, 0x52, 0xAC, 0x69, 0xB5, 0xC3, 0x5A,
+ 0xDD, 0x0D, 0x32, 0xDE, 0x86, 0xC2, 0x20, 0xBD,
+ 0x51, 0xDC, 0xE2, 0x88, 0x90, 0xD2, 0x12, 0x30,
+ 0x9F, 0x6E, 0x64, 0x16, 0xE8, 0x46, 0x09, 0xEF,
+ 0x41, 0xB6, 0x66, 0x34, 0xBB, 0x59, 0x56, 0xBC,
+ 0x1C, 0x55, 0x13, 0xBF, 0xFE, 0xEE, 0x2C, 0xE5,
+ 0x4F, 0x26, 0x99, 0xDC, 0x84, 0x9E, 0xEF, 0x9F,
+ 0xB5, 0x4E, 0xF4, 0x93, 0xE9, 0x04, 0x08, 0xE2,
+ 0xCE, 0x87, 0x38, 0x73, 0x39, 0xC3, 0x4B, 0x26,
+ 0xA4, 0x5A, 0x1F, 0x8C, 0x12, 0xA9, 0xC9, 0x12,
+ 0x2C, 0xD7, 0xC3, 0x5F, 0x47, 0x5D, 0x9D, 0xEF,
+ 0x00, 0xF1, 0xF7, 0x20, 0x08, 0x02, 0xC8, 0xBA,
+ 0x30, 0xC1, 0x95, 0xF3, 0x02, 0x32, 0xE9, 0x38,
+ 0x58, 0x38, 0xAE, 0x70, 0xF5, 0x29, 0x63, 0x1F,
+ 0x3D, 0xEC, 0x7D, 0xB3, 0x20, 0x78, 0xB5, 0x77,
+ 0xFB, 0x2B, 0x78, 0xFB, 0xDC, 0xA4, 0xC0, 0x2A,
+ 0x76, 0x3F, 0x84, 0x00, 0x74, 0x0D, 0x66, 0x5F,
+ 0x2D, 0xBB, 0xE5, 0x41, 0x9D, 0x07, 0xBB, 0x99,
+ 0x14, 0x27, 0x4D, 0xEF, 0x9A, 0x28, 0x44, 0x9F,
+ 0x3F, 0x66, 0x20, 0x8C, 0xC6, 0xD6, 0x24, 0xCD,
+ 0x67, 0x7C, 0x42, 0x8E, 0xC6, 0xEF, 0x7F, 0x25,
+ 0x2D, 0x74, 0xCA, 0x81, 0xDB, 0x26, 0xAE, 0xCB,
+ 0xA7, 0x83, 0xFD, 0x95, 0x46, 0xC5, 0xBE, 0x5C,
+ 0xFC, 0x07, 0xC5, 0xFF, 0x34, 0x70, 0x82, 0x6E,
+ 0xC7, 0x90, 0xAF, 0xC8, 0x99, 0xAB, 0xA7, 0x4E,
+ 0x02, 0xC1, 0x92, 0x22, 0x05, 0xA8, 0x38, 0xF8,
+ 0x78, 0xA3, 0x23, 0x0E, 0xD6, 0x27, 0x27, 0xE4,
+ 0x55, 0xEF, 0x5A, 0xBE, 0x22, 0x1B, 0xF9, 0x00,
+ 0xC4, 0x02, 0x44, 0x28, 0xF0, 0x40, 0x16, 0x97,
+ 0x17, 0x6E, 0x1A, 0x66, 0x1B, 0x98, 0xD8, 0x89,
+ 0x69, 0xB1, 0x8F, 0x61, 0x30, 0xC9, 0xB4, 0x84,
+ 0x04, 0xDF, 0x5F, 0x72, 0xAA, 0xA7, 0xC5, 0x24,
+ 0xC6, 0x1E, 0x80, 0xEE, 0x3A, 0x06, 0xED, 0x8F,
+ 0xAA, 0x73, 0xED, 0x00, 0xBB, 0x08, 0xFA, 0xF8,
+ 0x68, 0x2A, 0xCE, 0x3B, 0xA1, 0x98, 0x9A, 0xD6,
+ 0x55, 0xB7, 0x93, 0xE2, 0xCA, 0x7A, 0x2C, 0xAD,
+ 0x2D, 0xC7, 0x13, 0x7C, 0x9C, 0x2F, 0xFD, 0x2E,
+ 0xB6, 0x61, 0xCB, 0xA0, 0x93, 0x39, 0xC8, 0x56,
+ 0xD5, 0xCE, 0xD3, 0x9F, 0xE5, 0x06, 0x7E, 0x7E,
+ 0xDE, 0x05, 0x2B, 0x4E, 0x14, 0xB7, 0xD1, 0xB3,
+ 0xF0, 0x3B, 0x17, 0xF3, 0xA2, 0x61, 0x64, 0x88,
+ 0x28, 0x41, 0xE4, 0x90, 0x5F, 0x04, 0x6A, 0x12,
+ 0x01, 0x56, 0x7B, 0x9F, 0x4C, 0x51, 0x33, 0x13,
+ 0x9B, 0x40, 0xDB, 0xBD, 0x78, 0x38, 0x54, 0x96,
+ 0x0B, 0x20, 0xA0, 0x8D, 0x55, 0xD4, 0xD6, 0x15,
+ 0xAD, 0x75, 0x71, 0x0F, 0xC3, 0xBB, 0x78, 0x10,
+ 0xB3, 0xA2, 0xAF, 0x7A, 0x01, 0x16, 0x4D, 0xDC,
+ 0xFC, 0xBC, 0xCA, 0x24, 0xEF, 0x47, 0xBE, 0xDD,
+ 0x4A, 0xF9, 0x64, 0xCA, 0xBA, 0xF5, 0x74, 0xD0,
+ 0x53, 0x70, 0x75, 0xD9, 0x21, 0x91, 0x23, 0xF0,
+ 0x68, 0x02, 0xFF, 0x90, 0xA8, 0xC5, 0xB5, 0x87,
+ 0x6C, 0x17, 0x73, 0x4C, 0x8C, 0xFC, 0xBC, 0x7C,
+ 0x5E, 0xAE, 0x98, 0x34, 0xCC, 0x7C, 0xDC, 0xB6,
+ 0x26, 0x5F, 0x82, 0x6E, 0xF0, 0x41, 0x21, 0x43,
+ 0x00, 0xCB, 0x58, 0x13, 0xEB, 0x9B, 0xDB, 0x1B,
+ 0x0A, 0x8F, 0x3A, 0xD4, 0x1F, 0xA9, 0x51, 0x98,
+ 0xBA, 0xA2, 0x04, 0xF2, 0xA2, 0x9B, 0x88, 0x2D,
+ 0x89, 0x72, 0x4C, 0xA3, 0xD6, 0x64, 0xE4, 0x2C,
+ 0xAC, 0x6A, 0x2C, 0x40, 0x98, 0x28, 0x7E, 0xFF,
+ 0x7F, 0xE6, 0xF8, 0x6B, 0x22, 0xF7, 0x94, 0xE5,
+ 0x07, 0xDF, 0x58, 0x7F, 0xA4, 0xAC, 0xC7, 0xC5,
+ 0x5E, 0x9D, 0x27, 0x66, 0x6E, 0x12, 0x52, 0x50,
+ 0x8B, 0x48, 0x3E, 0x72, 0xAA, 0xB8, 0xFB, 0x9B,
+ 0xB2, 0xD2, 0xA4, 0xE8, 0x30, 0x02, 0x41, 0x21,
+ 0x61, 0x9A, 0x2C, 0xD0, 0x80, 0x20, 0xD2, 0xB3,
+ 0x33, 0x78, 0x46, 0x0A, 0x50, 0x83, 0x43, 0x43,
+ 0xE3, 0x38, 0xAC, 0xE3, 0xBB, 0xCB, 0x8B, 0x4B,
+ 0x8B, 0x72, 0xD4, 0xFA, 0x86, 0x36, 0x16, 0xF4,
+ 0x54, 0xAD, 0x78, 0x94, 0x51, 0x11, 0x47, 0xC6,
+ 0x46, 0xFB, 0x79, 0x1D, 0x47, 0xF4, 0xB3, 0xB1,
+ 0x32, 0xCF, 0x1F, 0x4B, 0x99, 0x84, 0xE6, 0x9B,
+ 0x18, 0x0E, 0xBC, 0xF5, 0xB5, 0x27, 0x5A, 0x6A,
+ 0x42, 0xCA, 0xCE, 0x02, 0x21, 0x21, 0x8D, 0x5D,
+ 0x1F, 0x87, 0x17, 0xBB, 0x43, 0xF3, 0x01, 0xCB,
+ 0x47, 0x5C, 0xCA, 0xA6, 0xCE, 0xE7, 0x97, 0xC5,
+ 0x0F, 0xD8, 0x73, 0xEF, 0x37, 0x87, 0xFD, 0x3C,
+ 0xBC, 0x67, 0xD1, 0xBD, 0x65, 0xD5, 0x51, 0x9C,
+ 0x1E, 0xA5, 0x17, 0x7A, 0xA2, 0x12, 0x72, 0xB2,
+ 0x32, 0xE9, 0xEF, 0x8D, 0x57, 0x87, 0xCD, 0x0F,
+ 0x8F, 0x54, 0xE2, 0x8E, 0x56, 0xE6, 0x66, 0xB4,
+ 0x36, 0x8D, 0x27, 0x4B, 0x9B, 0x2B, 0x36, 0xF2,
+ 0x0C, 0xD3, 0xE1, 0x9F, 0x45, 0x95, 0x81, 0x52,
+ 0xD0, 0x6B, 0x45, 0x3A, 0xE0, 0x30, 0xF0, 0x23,
+ 0xA1, 0x1A, 0x74, 0x0C, 0xD6, 0x06, 0x7E, 0xAB,
+ 0x29, 0x92, 0x14, 0x6E, 0xB4, 0x64, 0x30, 0xE5,
+ 0x67, 0xDC, 0xD2, 0xAB, 0x71, 0xA1, 0xC1, 0x01,
+ 0x81, 0x5A, 0x1C, 0x8F, 0xA8, 0xE7, 0x87, 0x47,
+ 0xC7, 0x1C, 0x5A, 0xC9, 0xEE, 0xA1, 0xC1, 0x01,
+ 0x81, 0x5A, 0x1C, 0x8F, 0xA8, 0xE7, 0x87, 0x47,
+ 0xC7, 0x1C, 0x5A, 0xC9, 0xEE, 0xA1, 0xC1, 0x01,
+ 0x81, 0x5A, 0x1C, 0x8F, 0xA8, 0xE7, 0x87, 0x47,
+ 0xC7, 0x1C, 0x5A, 0xC9, 0xEE, 0xA1, 0xC1, 0x01,
+ 0x81, 0x5A, 0x1C, 0x8F, 0xA8, 0xE7, 0x87, 0x47,
+ 0xC7, 0x1C, 0x5A, 0xC9, 0xEE, 0xA1, 0xC1, 0x01,
+ 0x81, 0x5A, 0x1C, 0x8F, 0xA8, 0xE7, 0x97, 0x40,
+ 0xC2, 0x79, 0xEB, 0x90, 0x4A, 0x9A, 0xEE, 0x36,
+ 0xB4, 0x0F, 0x19, 0x62, 0xB8, 0x68, 0x08, 0xC8,
+ 0x48, 0x93, 0x25, 0x49, 0x91, 0x21, 0x41, 0x81,
+ 0x01, 0xDA, 0xA0, 0xD4, 0x0C, 0xDC, 0x6C, 0xB4,
+ 0x34, 0x8F, 0xC1, 0xB4, 0x6C, 0xBC, 0x30, 0xF0,
+ 0x70, 0xAB, 0x1D, 0x71, 0xA9, 0x19, 0x78, 0xB8,
+ 0x38, 0xE3, 0x54, 0x38, 0xE1, 0x51, 0x30, 0xF8,
+ 0x38, 0xE3, 0x54, 0x39, 0xE0, 0x51, 0x70, 0xA0,
+ 0x24, 0xFD, 0x6A, 0x02, 0xFB, 0x4F, 0x0E, 0x4A,
+ 0xDA, 0x43, 0xE4, 0x99, 0x50, 0xF1, 0xD8, 0x3A,
+ 0x9E, 0x67, 0x98, 0xE6, 0x77, 0xD5, 0xFC, 0x6E,
+ 0xD7, 0x1E, 0xFD, 0x80, 0x0D, 0xAC, 0x99, 0x4C,
+ 0x99, 0x53, 0x4F, 0x09, 0x7B, 0xE1, 0x2B, 0x41,
+ 0x6B, 0x9A, 0x79, 0x40, 0xCD, 0x28, 0x1D, 0x88,
+ 0x5D, 0x53, 0xB0, 0x09, 0x84, 0xE1, 0x2B, 0x01,
+ 0x2B, 0x1E, 0x02, 0x80, 0xF2, 0xAC, 0x7A, 0x17,
+ 0x21, 0x17, 0x17, 0x96, 0xF8, 0xA5, 0x73, 0x6E,
+ 0x35, 0x33, 0x6B, 0xE9, 0xDF, 0x81, 0x3F, 0x84,
+ 0xEB, 0x8D, 0xE5, 0x72, 0x74, 0x3F, 0xE1, 0xCE,
+ 0xB5, 0x93, 0xDB, 0x49, 0x6F, 0x21, 0xBF, 0x88,
+ 0xB7, 0x93, 0xDB, 0x48, 0x6E, 0x21, 0xBE, 0x81,
+ 0xFE, 0xDA, 0x58, 0x2D, 0xF5, 0x25, 0x7D, 0xA4,
+ 0x24, 0x9F, 0xD5, 0xA0, 0x78, 0xA8, 0xFC, 0x3C,
+ 0xBC, 0x67, 0xD1, 0xBD, 0x65, 0xD5, 0xB5, 0x75,
+ 0xF5, 0x2E, 0x98, 0xF4, 0x2C, 0x9C, 0xFC, 0x3C,
+ 0xBC, 0x67, 0xF9, 0x9C, 0x44, 0x94, 0xD0, 0x19,
+ 0x99, 0x22, 0x84, 0x58, 0x82, 0x32, 0x52, 0x88,
+ 0x08, 0xB3, 0x75, 0x18, 0xC0, 0x70, 0x6C, 0xAB,
+ 0x2B, 0x90, 0x9A, 0xFB, 0x21, 0xF1, 0xAD, 0x65,
+ 0xE5, 0x5E, 0xFC, 0x9E, 0x44, 0x94, 0x38, 0xF6,
+ 0x74, 0xCF, 0xED, 0x87, 0x5F, 0x8F, 0x4B, 0x84,
+ 0x06, 0xBD, 0x4F, 0x25, 0xFD, 0x2D, 0xC1, 0x0E,
+ 0x8C, 0x37, 0x71, 0x04, 0xDC, 0x0C, 0xB8, 0x77,
+ 0xF5, 0x4E, 0x48, 0x35, 0xEF, 0x3F, 0xE7, 0x2F,
+ 0xAF, 0x14, 0x82, 0xFC, 0x26, 0xF6, 0x2A, 0xED,
+ 0x6D, 0xD6, 0x34, 0x4A, 0x90, 0x40, 0xE8, 0x3A,
+ 0xB8, 0x03, 0x5D, 0x37, 0xEF, 0x3F, 0x3B, 0xE3,
+ 0x61, 0xDA, 0x2C, 0x4A, 0x92, 0x42, 0x14, 0x95,
+ 0x15, 0x4F, 0x7B, 0x11, 0x78, 0x48, 0x2E, 0xF2,
+ 0x78, 0x32, 0x05, 0x6F, 0x15, 0xEE, 0x8E, 0xC7,
+ 0x4E, 0xB0, 0x04, 0x68, 0x55, 0xE1, 0x81, 0xE4,
+ 0x66, 0xBD, 0xEE, 0x87, 0x5F, 0x0A, 0x62, 0xA2,
+ 0x07, 0xDF, 0x69, 0xA0, 0x71, 0xC1, 0x00, 0x43,
+ 0xC5, 0xAF, 0x9D, 0xF7, 0x8A, 0x60, 0x27, 0xFA,
+ 0x8A, 0x51, 0xD1, 0xFC, 0x24, 0xA5, 0x40, 0x86,
+ 0x27, 0x7A, 0xCA, 0x8F, 0x84, 0x29, 0xB9, 0x79,
+ 0xF9, 0x22, 0xA2, 0x8F, 0x57, 0xD6, 0x31, 0xF7,
+ 0x56, 0x05, 0xB5, 0xF0, 0x6B, 0xC6, 0x56, 0x96,
+ 0x16, 0xCD, 0x4D, 0x60, 0xB8, 0x39, 0xDC, 0x1A,
+ 0xBB, 0xE9, 0x59, 0x1C, 0x57, 0xFA, 0x6A, 0xAA,
+ 0x2A, 0xF1, 0x71, 0x5C, 0x84, 0x15, 0xF8, 0x3E,
+ 0x8F, 0xD8, 0x68, 0x95, 0xC7, 0x71, 0x90, 0xDB,
+ 0x5D, 0x0F, 0xF0, 0xB5, 0x6E, 0xC3, 0x53, 0x93,
+ 0x13, 0xC8, 0x48, 0x65, 0xBD, 0x9C, 0x72, 0xB4,
+ 0x38, 0xEB, 0xDF, 0xFA, 0x22, 0xF7, 0x96, 0x56,
+ 0x77, 0x3C, 0x8C, 0x51, 0x0E, 0xB8, 0x19, 0x56,
+ 0xD0, 0xC2, 0x7F, 0xBA, 0x39, 0x94, 0x04, 0xC4,
+ 0x44, 0x9F, 0x1F, 0x32, 0xEA, 0x6B, 0x9A, 0x5C,
+ 0xFD, 0xB4, 0x04, 0x41, 0x8A, 0x27, 0xB7, 0x77,
+ 0xF7, 0x2C, 0xAC, 0x81, 0x59, 0x68, 0x9C, 0x5A,
+ 0xEB, 0xA3, 0x13, 0x5E, 0x13, 0xA5, 0xEC, 0x0F,
+ 0x06, 0x8E, 0x25, 0xB9, 0x61, 0xD1, 0x87, 0x06,
+ 0x86, 0xCC, 0xEC, 0x86, 0xDF, 0xF8, 0x9E, 0xD7,
+ 0x7E, 0xC0, 0x76, 0x1A, 0xDF, 0x9F, 0xC9, 0x48,
+ 0xC8, 0xB2, 0x9C, 0xF6, 0x9C, 0x8C, 0x60, 0x08,
+ 0x82, 0x79, 0xAE, 0xC2, 0x92, 0x08, 0xD2, 0xA8,
+ 0xB4, 0x77, 0xCD, 0xBD, 0x69, 0x54, 0xD6, 0x3C,
+ 0x94, 0x8F, 0x19, 0x75, 0x7F, 0x81, 0xED, 0xEF,
+ 0x24, 0xD8, 0x4B, 0x80, 0x7B, 0xEB, 0x6D, 0xBE,
+ 0x2E, 0xD5, 0x63, 0x12, 0x3A, 0x8A, 0xEA, 0x2A,
+ 0xAA, 0x71, 0xC7, 0xAB, 0x73, 0xC3, 0xA3, 0x63,
+ 0xE3, 0x38, 0x8F, 0xE3, 0x3F, 0x8F, 0x8B, 0x51,
+ 0xD3, 0x68,
+};
+
+static unsigned char vfs5011_init_16[] = { /* 2565 B */
+ 0x02, 0xF0, 0x00, 0x14, 0x00, 0x03, 0x00, 0x09,
+ 0x00, 0x04, 0x20, 0x04, 0x30, 0x00, 0x00, 0x00,
+ 0x00, 0x04, 0x03, 0x00, 0x09, 0x00, 0x18, 0x20,
+ 0x04, 0x30, 0x00, 0x00, 0x00, 0x00, 0x04, 0x03,
+ 0x00, 0x09, 0x00, 0x20, 0x20, 0x04, 0x30, 0x08,
+ 0x00, 0x80, 0x00, 0x04, 0x03, 0x00, 0x09, 0x00,
+ 0x24, 0x20, 0x04, 0x30, 0x00, 0x00, 0xFF, 0x01,
+ 0x04, 0x03, 0x00, 0x09, 0x00, 0x2C, 0x20, 0x04,
+ 0x30, 0x01, 0x00, 0x00, 0x00, 0x04, 0x03, 0x00,
+ 0x09, 0x00, 0x40, 0x20, 0x04, 0x30, 0xFF, 0x03,
+ 0x00, 0x00, 0x04, 0x03, 0x00, 0x09, 0x00, 0x44,
+ 0x20, 0x04, 0x30, 0xE5, 0x03, 0x00, 0x00, 0x04,
+ 0x03, 0x00, 0x09, 0x00, 0x48, 0x20, 0x04, 0x30,
+ 0xEA, 0x03, 0x00, 0x00, 0x04, 0x03, 0x00, 0x09,
+ 0x00, 0x4C, 0x20, 0x04, 0x30, 0x0A, 0x00, 0x00,
+ 0x00, 0x04, 0x03, 0x00, 0x09, 0x00, 0x54, 0x20,
+ 0x04, 0x30, 0x01, 0xDE, 0x01, 0x00, 0x04, 0x03,
+ 0x00, 0x09, 0x00, 0x00, 0x21, 0x04, 0x30, 0x00,
+ 0x00, 0x00, 0x00, 0x04, 0x03, 0x00, 0x09, 0x00,
+ 0x04, 0x21, 0x04, 0x30, 0x01, 0x00, 0x00, 0x00,
+ 0x04, 0x03, 0x00, 0x09, 0x00, 0x08, 0x21, 0x04,
+ 0x30, 0x02, 0x00, 0x00, 0x00, 0x04, 0x03, 0x00,
+ 0x09, 0x00, 0x0C, 0x21, 0x04, 0x30, 0x01, 0x00,
+ 0x00, 0x00, 0x04, 0x03, 0x00, 0x09, 0x00, 0x10,
+ 0x21, 0x04, 0x30, 0x01, 0x00, 0x00, 0x00, 0x04,
+ 0x03, 0x00, 0x09, 0x00, 0x14, 0x21, 0x04, 0x30,
+ 0x01, 0x00, 0x00, 0x00, 0x04, 0x03, 0x00, 0x09,
+ 0x00, 0x18, 0x21, 0x04, 0x30, 0x01, 0x00, 0x00,
+ 0x00, 0x04, 0x03, 0x00, 0x09, 0x00, 0x1C, 0x21,
+ 0x04, 0x30, 0x1F, 0x00, 0x00, 0x00, 0x04, 0x03,
+ 0x00, 0x09, 0x00, 0x20, 0x21, 0x04, 0x30, 0x08,
+ 0x00, 0x00, 0x00, 0x04, 0x03, 0x00, 0x09, 0x00,
+ 0x40, 0x21, 0x04, 0x30, 0x01, 0x00, 0x00, 0x00,
+ 0x04, 0x03, 0x00, 0x09, 0x00, 0x44, 0x21, 0x04,
+ 0x30, 0x01, 0x00, 0x00, 0x00, 0x04, 0x03, 0x00,
+ 0x09, 0x00, 0x48, 0x21, 0x04, 0x30, 0x01, 0x00,
+ 0x00, 0x00, 0x04, 0x03, 0x00, 0x09, 0x00, 0x4C,
+ 0x21, 0x04, 0x30, 0x01, 0x00, 0x00, 0x00, 0x04,
+ 0x03, 0x00, 0x09, 0x00, 0x50, 0x21, 0x04, 0x30,
+ 0x01, 0x00, 0x00, 0x00, 0x04, 0x03, 0x00, 0x09,
+ 0x00, 0x54, 0x21, 0x04, 0x30, 0x01, 0x00, 0x00,
+ 0x00, 0x04, 0x03, 0x00, 0x09, 0x00, 0x58, 0x21,
+ 0x04, 0x30, 0x01, 0x00, 0x00, 0x00, 0x04, 0x03,
+ 0x00, 0x09, 0x00, 0x5C, 0x21, 0x04, 0x30, 0x1F,
+ 0x00, 0x00, 0x00, 0x04, 0x03, 0x00, 0x09, 0x00,
+ 0x60, 0x21, 0x04, 0x30, 0x08, 0x00, 0x00, 0x00,
+ 0x04, 0x03, 0x00, 0x09, 0x00, 0x80, 0x21, 0x04,
+ 0x30, 0x30, 0x00, 0x00, 0x00, 0x04, 0x03, 0x00,
+ 0x09, 0x00, 0x84, 0x21, 0x04, 0x30, 0x01, 0x00,
+ 0x00, 0x00, 0x04, 0x03, 0x00, 0x09, 0x00, 0x88,
+ 0x21, 0x04, 0x30, 0x01, 0x00, 0x00, 0x00, 0x04,
+ 0x03, 0x00, 0x09, 0x00, 0x8C, 0x21, 0x04, 0x30,
+ 0x01, 0x00, 0x00, 0x00, 0x04, 0x03, 0x00, 0x09,
+ 0x00, 0x90, 0x21, 0x04, 0x30, 0x00, 0x00, 0x00,
+ 0x00, 0x04, 0x03, 0x00, 0x09, 0x00, 0x94, 0x21,
+ 0x04, 0x30, 0x01, 0x00, 0x00, 0x00, 0x04, 0x03,
+ 0x00, 0x09, 0x00, 0x98, 0x21, 0x04, 0x30, 0x00,
+ 0x00, 0x00, 0x00, 0x04, 0x03, 0x00, 0x09, 0x00,
+ 0x9C, 0x21, 0x04, 0x30, 0x1F, 0x00, 0x00, 0x00,
+ 0x04, 0x03, 0x00, 0x09, 0x00, 0xA0, 0x21, 0x04,
+ 0x30, 0x04, 0x00, 0x00, 0x00, 0x04, 0x03, 0x00,
+ 0x09, 0x00, 0xC0, 0x21, 0x04, 0x30, 0x30, 0x00,
+ 0x00, 0x00, 0x04, 0x03, 0x00, 0x09, 0x00, 0xC4,
+ 0x21, 0x04, 0x30, 0x01, 0x00, 0x00, 0x00, 0x04,
+ 0x03, 0x00, 0x09, 0x00, 0xC8, 0x21, 0x04, 0x30,
+ 0x01, 0x00, 0x00, 0x00, 0x04, 0x03, 0x00, 0x09,
+ 0x00, 0xCC, 0x21, 0x04, 0x30, 0x01, 0x00, 0x00,
+ 0x00, 0x04, 0x03, 0x00, 0x09, 0x00, 0xD0, 0x21,
+ 0x04, 0x30, 0x00, 0x00, 0x00, 0x00, 0x04, 0x03,
+ 0x00, 0x09, 0x00, 0xD4, 0x21, 0x04, 0x30, 0x01,
+ 0x00, 0x00, 0x00, 0x04, 0x03, 0x00, 0x09, 0x00,
+ 0xD8, 0x21, 0x04, 0x30, 0x00, 0x00, 0x00, 0x00,
+ 0x04, 0x03, 0x00, 0x09, 0x00, 0xDC, 0x21, 0x04,
+ 0x30, 0x1F, 0x00, 0x00, 0x00, 0x04, 0x03, 0x00,
+ 0x09, 0x00, 0xE0, 0x21, 0x04, 0x30, 0x04, 0x00,
+ 0x00, 0x00, 0x04, 0x03, 0x00, 0x09, 0x00, 0xA0,
+ 0x20, 0x04, 0x30, 0xEF, 0xE1, 0x00, 0x00, 0x04,
+ 0x03, 0x00, 0x09, 0x00, 0xA4, 0x20, 0x04, 0x30,
+ 0x00, 0x00, 0x00, 0x00, 0x04, 0x03, 0x00, 0x09,
+ 0x00, 0xB0, 0x20, 0x04, 0x30, 0x00, 0x00, 0x00,
+ 0x00, 0x04, 0x03, 0x00, 0x09, 0x00, 0xC4, 0x20,
+ 0x04, 0x30, 0x14, 0x00, 0x00, 0x00, 0x04, 0x03,
+ 0x00, 0x09, 0x00, 0xC8, 0x20, 0x04, 0x30, 0x00,
+ 0x00, 0x00, 0x00, 0x04, 0x03, 0x00, 0x09, 0x00,
+ 0xCC, 0x20, 0x04, 0x30, 0x20, 0x00, 0x00, 0x00,
+ 0x04, 0x03, 0x00, 0x09, 0x00, 0x50, 0x20, 0x04,
+ 0x30, 0x00, 0x00, 0x74, 0x01, 0x04, 0x03, 0x00,
+ 0x09, 0x00, 0xA8, 0x20, 0x04, 0x30, 0xFE, 0x21,
+ 0x74, 0x01, 0x04, 0x03, 0x00, 0x09, 0x00, 0x04,
+ 0x00, 0x00, 0x38, 0x00, 0x07, 0x00, 0x00, 0x04,
+ 0x03, 0x00, 0x09, 0x00, 0x08, 0x00, 0x00, 0x38,
+ 0x00, 0x15, 0x00, 0x00, 0x04, 0x03, 0x00, 0x09,
+ 0x00, 0x0C, 0x00, 0x00, 0x38, 0x01, 0x03, 0x02,
+ 0x00, 0x04, 0x03, 0x00, 0x09, 0x00, 0x10, 0x00,
+ 0x00, 0x38, 0x01, 0x07, 0x02, 0x00, 0x04, 0x03,
+ 0x00, 0x09, 0x00, 0x14, 0x00, 0x00, 0x38, 0x0C,
+ 0x0C, 0x05, 0x00, 0x04, 0x02, 0x00, 0x80, 0x05,
+ 0xFF, 0xF9, 0x87, 0x20, 0xBB, 0xF8, 0x87, 0x00,
+ 0xBB, 0xF8, 0x87, 0x00, 0xBB, 0xF8, 0x87, 0x00,
+ 0xBB, 0xF8, 0x87, 0x00, 0xBB, 0xF8, 0x87, 0x00,
+ 0xBB, 0xF8, 0x87, 0x00, 0xBB, 0xF8, 0x07, 0x20,
+ 0xBA, 0xF8, 0x07, 0x20, 0xB9, 0xF8, 0x07, 0x20,
+ 0xB8, 0xF8, 0x07, 0x20, 0xB7, 0xF8, 0x07, 0x20,
+ 0xB6, 0xF8, 0x07, 0x20, 0xB5, 0xF8, 0x07, 0x20,
+ 0xB4, 0xF8, 0x07, 0x20, 0xB3, 0xF8, 0x07, 0x20,
+ 0xB2, 0xF8, 0x07, 0x20, 0xB1, 0xF8, 0x07, 0x22,
+ 0xB0, 0xF8, 0x07, 0x22, 0xAF, 0xF8, 0x07, 0x22,
+ 0xAE, 0xF8, 0x07, 0x22, 0xAD, 0xF8, 0x07, 0x22,
+ 0xAC, 0xF8, 0x07, 0x22, 0xAB, 0xF8, 0x07, 0x22,
+ 0xAA, 0xF8, 0x07, 0x22, 0xA9, 0xF8, 0x07, 0x22,
+ 0xA8, 0xF8, 0x07, 0x22, 0xA7, 0xF8, 0x07, 0x22,
+ 0xA6, 0xF8, 0x07, 0x22, 0xA5, 0xF8, 0x07, 0x22,
+ 0xA4, 0xF8, 0x07, 0x22, 0xA3, 0xF8, 0x07, 0x22,
+ 0xA2, 0xF8, 0x07, 0x22, 0xA1, 0xF8, 0x07, 0x22,
+ 0xA0, 0xF8, 0x07, 0x22, 0x9F, 0xF8, 0x07, 0x22,
+ 0x9E, 0xF8, 0x07, 0x22, 0x9D, 0xF8, 0x07, 0x22,
+ 0x9C, 0xF8, 0x07, 0x22, 0x9B, 0xF8, 0x07, 0x22,
+ 0x9A, 0xF8, 0x07, 0x22, 0x99, 0xF8, 0x07, 0x22,
+ 0x98, 0xF8, 0x07, 0x22, 0x97, 0xF8, 0x07, 0x22,
+ 0x96, 0xF8, 0x07, 0x22, 0x95, 0xF8, 0x07, 0x22,
+ 0x94, 0xF8, 0x07, 0x22, 0x93, 0xF8, 0x07, 0x22,
+ 0x92, 0xF8, 0x07, 0x22, 0x91, 0xF8, 0x07, 0x22,
+ 0x90, 0xF8, 0x07, 0x22, 0x8F, 0xF8, 0x07, 0x22,
+ 0x8E, 0xF8, 0x07, 0x22, 0x8D, 0xF8, 0x07, 0x22,
+ 0x8C, 0xF8, 0x07, 0x22, 0x8B, 0xF8, 0x07, 0x22,
+ 0x8A, 0xF8, 0x07, 0x22, 0x89, 0xF8, 0x07, 0x22,
+ 0x88, 0xF8, 0x07, 0x22, 0x87, 0xF8, 0x07, 0x22,
+ 0x86, 0xF8, 0x07, 0x22, 0x85, 0xF8, 0x07, 0x22,
+ 0x84, 0xF8, 0x07, 0x22, 0x83, 0xF8, 0x07, 0x22,
+ 0x82, 0xF8, 0x07, 0x22, 0x81, 0xF8, 0x07, 0x22,
+ 0x80, 0xF8, 0x07, 0x22, 0x7F, 0xF8, 0x07, 0x22,
+ 0x7E, 0xF8, 0x07, 0x22, 0x7D, 0xF8, 0x07, 0x22,
+ 0x7C, 0xF8, 0x07, 0x22, 0x7B, 0xF8, 0x07, 0x22,
+ 0x7A, 0xF8, 0x07, 0x22, 0x79, 0xF8, 0x07, 0x22,
+ 0x78, 0xF8, 0x07, 0x22, 0x77, 0xF8, 0x07, 0x22,
+ 0x76, 0xF8, 0x07, 0x22, 0x75, 0xF8, 0x07, 0x22,
+ 0x74, 0xF8, 0x07, 0x22, 0x73, 0xF8, 0x07, 0x22,
+ 0x72, 0xF8, 0x07, 0x22, 0x71, 0xF8, 0x07, 0x22,
+ 0x70, 0xF8, 0x07, 0x22, 0x6F, 0xF8, 0x07, 0x22,
+ 0x6E, 0xF8, 0x07, 0x22, 0x6D, 0xF8, 0x07, 0x22,
+ 0x6C, 0xF8, 0x07, 0x22, 0x6B, 0xF8, 0x07, 0x22,
+ 0x6A, 0xF8, 0x07, 0x22, 0x69, 0xF8, 0x07, 0x22,
+ 0x68, 0xF8, 0x07, 0x22, 0x67, 0xF8, 0x07, 0x22,
+ 0x66, 0xF8, 0x07, 0x22, 0x65, 0xF8, 0x07, 0x22,
+ 0x64, 0xF8, 0x07, 0x22, 0x63, 0xF8, 0x07, 0x22,
+ 0x62, 0xF8, 0x07, 0x22, 0x61, 0xF8, 0x07, 0x22,
+ 0x60, 0xF8, 0x07, 0x22, 0x5F, 0xF8, 0x07, 0x22,
+ 0x5E, 0xF8, 0x07, 0x22, 0x5D, 0xF8, 0x07, 0x22,
+ 0x5C, 0xF8, 0x07, 0x22, 0x5B, 0xF8, 0x07, 0x22,
+ 0x5A, 0xF8, 0x07, 0x22, 0x59, 0xF8, 0x07, 0x22,
+ 0x58, 0xF8, 0x07, 0x22, 0x57, 0xF8, 0x07, 0x22,
+ 0x56, 0xF8, 0x07, 0x22, 0x55, 0xF8, 0x07, 0x22,
+ 0x54, 0xF8, 0x07, 0x22, 0x53, 0xF8, 0x07, 0x22,
+ 0x52, 0xF8, 0x07, 0x22, 0x51, 0xF8, 0x07, 0x22,
+ 0x50, 0xF8, 0x07, 0x22, 0x4F, 0xF8, 0x07, 0x22,
+ 0x4E, 0xF8, 0x07, 0x22, 0x4D, 0xF8, 0x07, 0x22,
+ 0x4C, 0xF8, 0x07, 0x22, 0x4B, 0xF8, 0x07, 0x22,
+ 0x4A, 0xF8, 0x07, 0x22, 0x49, 0xF8, 0x07, 0x22,
+ 0x48, 0xF8, 0x07, 0x22, 0x47, 0xF8, 0x07, 0x22,
+ 0x46, 0xF8, 0x07, 0x22, 0x45, 0xF8, 0x07, 0x22,
+ 0x44, 0xF8, 0x07, 0x22, 0x43, 0xF8, 0x07, 0x22,
+ 0x42, 0xF8, 0x07, 0x22, 0x41, 0xF8, 0x07, 0x22,
+ 0x40, 0xF8, 0x07, 0x22, 0x3F, 0xF8, 0x07, 0x22,
+ 0x3E, 0xF8, 0x07, 0x22, 0x3D, 0xF8, 0x07, 0x22,
+ 0x3C, 0xF8, 0x07, 0x22, 0x3B, 0xF8, 0x07, 0x22,
+ 0x3A, 0xF8, 0x07, 0x22, 0x39, 0xF8, 0x07, 0x22,
+ 0x38, 0xF8, 0x07, 0x22, 0x37, 0xF8, 0x07, 0x22,
+ 0x36, 0xF8, 0x07, 0x22, 0x35, 0xF8, 0x07, 0x22,
+ 0x34, 0xF8, 0x07, 0x22, 0x33, 0xF8, 0x07, 0x22,
+ 0x32, 0xF8, 0x07, 0x22, 0x31, 0xF8, 0x07, 0x22,
+ 0x30, 0xF8, 0x07, 0x22, 0x2F, 0xF8, 0x07, 0x22,
+ 0x2E, 0xF8, 0x07, 0x22, 0x2D, 0xF8, 0x07, 0x22,
+ 0x2C, 0xF8, 0x07, 0x22, 0x2B, 0xF8, 0x07, 0x22,
+ 0x2A, 0xF8, 0x07, 0x22, 0x29, 0xF8, 0x07, 0x22,
+ 0x28, 0xF8, 0x07, 0x22, 0x27, 0xF8, 0x07, 0x22,
+ 0x26, 0xF8, 0x07, 0x22, 0x25, 0xF8, 0x07, 0x22,
+ 0x24, 0xF8, 0x07, 0x22, 0x23, 0xF8, 0x07, 0x20,
+ 0x22, 0xF8, 0x07, 0x20, 0x21, 0xF8, 0x07, 0x20,
+ 0x20, 0xF8, 0x07, 0x20, 0x1F, 0xF8, 0x07, 0x20,
+ 0x1E, 0xF8, 0x07, 0x20, 0x1D, 0xF8, 0x07, 0x20,
+ 0x1C, 0xF8, 0x07, 0x20, 0x1C, 0xF8, 0x07, 0x00,
+ 0xD7, 0xF8, 0xA7, 0x00, 0xD7, 0xF8, 0xA7, 0x00,
+ 0xD7, 0xF8, 0xA7, 0x00, 0xD7, 0xF8, 0xA7, 0x00,
+ 0xD7, 0xF8, 0xA7, 0x00, 0xD7, 0xF8, 0xA7, 0x00,
+ 0xD8, 0xF8, 0x27, 0x20, 0xD9, 0xF8, 0x27, 0x20,
+ 0xDA, 0xF8, 0x27, 0x20, 0xDB, 0xF8, 0x27, 0x20,
+ 0xDC, 0xF8, 0x27, 0x20, 0xDD, 0xF8, 0x27, 0x20,
+ 0xDE, 0xF8, 0x27, 0x20, 0xDF, 0xF8, 0x27, 0x20,
+ 0xE0, 0xF8, 0x27, 0x20, 0xE1, 0xF8, 0x27, 0x20,
+ 0xE2, 0xF8, 0x27, 0x20, 0xE3, 0xF8, 0x27, 0x20,
+ 0xE4, 0xF8, 0x27, 0x20, 0xE5, 0xF8, 0x27, 0x20,
+ 0xE6, 0xF8, 0x27, 0x20, 0xE7, 0xF8, 0x27, 0x20,
+ 0xE8, 0xF8, 0x27, 0x20, 0xE9, 0xF8, 0x27, 0x20,
+ 0xEA, 0xF8, 0x27, 0x20, 0xEB, 0xF8, 0x27, 0x20,
+ 0xEC, 0xF8, 0x27, 0x20, 0xED, 0xF8, 0x27, 0x20,
+ 0xEE, 0xF8, 0x27, 0x20, 0xEF, 0xF8, 0x27, 0x20,
+ 0xF0, 0xF8, 0x27, 0x20, 0xF1, 0xF8, 0x27, 0x20,
+ 0xF2, 0xF8, 0x27, 0x20, 0xF3, 0xF8, 0x27, 0x20,
+ 0xF4, 0xF8, 0x27, 0x20, 0xF5, 0xF8, 0x27, 0x20,
+ 0xF6, 0xF8, 0x27, 0x20, 0xF7, 0xF8, 0x27, 0x20,
+ 0xF8, 0xF8, 0x27, 0x20, 0xF9, 0xF8, 0x27, 0x20,
+ 0xFA, 0xF8, 0x27, 0x20, 0xFB, 0xF8, 0x27, 0x20,
+ 0xFC, 0xF8, 0x27, 0x20, 0xFD, 0xF8, 0x27, 0x20,
+ 0xFE, 0xF8, 0x27, 0x20, 0xFF, 0xF8, 0x27, 0x20,
+ 0x00, 0xF9, 0x27, 0x20, 0xD7, 0xF8, 0x27, 0x20,
+ 0x00, 0xF8, 0x27, 0x20, 0x01, 0xF8, 0x27, 0x20,
+ 0x02, 0xF8, 0x27, 0x20, 0x03, 0xF8, 0x27, 0x20,
+ 0x04, 0xF8, 0x27, 0x20, 0x05, 0xF8, 0x27, 0x20,
+ 0x06, 0xF8, 0x27, 0x20, 0x07, 0xF8, 0x27, 0x20,
+ 0x08, 0xF8, 0x27, 0x20, 0x09, 0xF8, 0x27, 0x20,
+ 0x0A, 0xF8, 0x27, 0x20, 0x0B, 0xF8, 0x27, 0x20,
+ 0x0C, 0xF8, 0x27, 0x20, 0x0D, 0xF8, 0x27, 0x20,
+ 0x0E, 0xF8, 0x27, 0x20, 0x0F, 0xF8, 0x27, 0x20,
+ 0x10, 0xF8, 0x27, 0x20, 0x11, 0xF8, 0x27, 0x20,
+ 0x12, 0xF8, 0x27, 0x20, 0x13, 0xF8, 0x27, 0x20,
+ 0x14, 0xF8, 0x27, 0x20, 0x15, 0xF8, 0x27, 0x20,
+ 0x15, 0xF8, 0x27, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x0A, 0x00, 0x08, 0x00, 0x10, 0x03, 0x18, 0x1C,
+ 0x10, 0x03, 0x18, 0x1C, 0x03, 0x00, 0x09, 0x00,
+ 0x00, 0x20, 0x04, 0x30, 0x80, 0x00, 0x00, 0x00,
+ 0x04, 0x17, 0x00, 0x00, 0x00, 0x05, 0x00, 0x0E,
+ 0x00, 0x0C, 0x20, 0xFD, 0x00, 0xFF, 0xFF, 0x00,
+ 0x00, 0x00, 0x00, 0x02, 0x08, 0x00, 0x00, 0x05,
+ 0x00, 0x0E, 0x00, 0x10, 0x20, 0xFD, 0x00, 0xFF,
+ 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00,
+ 0x00, 0x03, 0x00, 0x09, 0x00, 0x04, 0x21, 0x04,
+ 0x30, 0x01, 0x00, 0x00, 0x00, 0x04, 0x03, 0x00,
+ 0x09, 0x00, 0x08, 0x21, 0x04, 0x30, 0x01, 0x00,
+ 0x00, 0x00, 0x04, 0x03, 0x00, 0x09, 0x00, 0x0C,
+ 0x21, 0x04, 0x30, 0x01, 0x00, 0x00, 0x00, 0x04,
+ 0x03, 0x00, 0x09, 0x00, 0x10, 0x21, 0x04, 0x30,
+ 0x01, 0x00, 0x00, 0x00, 0x04, 0x03, 0x00, 0x09,
+ 0x00, 0x14, 0x21, 0x04, 0x30, 0x01, 0x00, 0x00,
+ 0x00, 0x04, 0x03, 0x00, 0x09, 0x00, 0x18, 0x21,
+ 0x04, 0x30, 0x01, 0x00, 0x00, 0x00, 0x04, 0x03,
+ 0x00, 0x09, 0x00, 0x44, 0x21, 0x04, 0x30, 0x01,
+ 0x00, 0x00, 0x00, 0x04, 0x03, 0x00, 0x09, 0x00,
+ 0x48, 0x21, 0x04, 0x30, 0x01, 0x00, 0x00, 0x00,
+ 0x04, 0x03, 0x00, 0x09, 0x00, 0x4C, 0x21, 0x04,
+ 0x30, 0x01, 0x00, 0x00, 0x00, 0x04, 0x03, 0x00,
+ 0x09, 0x00, 0x50, 0x21, 0x04, 0x30, 0x01, 0x00,
+ 0x00, 0x00, 0x04, 0x03, 0x00, 0x09, 0x00, 0x54,
+ 0x21, 0x04, 0x30, 0x01, 0x00, 0x00, 0x00, 0x04,
+ 0x03, 0x00, 0x09, 0x00, 0x58, 0x21, 0x04, 0x30,
+ 0x01, 0x00, 0x00, 0x00, 0x04, 0x03, 0x00, 0x09,
+ 0x00, 0xC8, 0x20, 0x04, 0x30, 0x04, 0x00, 0x00,
+ 0x00, 0x04, 0x05, 0x00, 0x0E, 0x00, 0x14, 0x20,
+ 0xFF, 0xFF, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x83, 0x00, 0x03, 0x00, 0x09, 0x00,
+ 0x84, 0x21, 0x04, 0x30, 0x01, 0x00, 0x00, 0x00,
+ 0x04, 0x03, 0x00, 0x09, 0x00, 0x88, 0x21, 0x04,
+ 0x30, 0x01, 0x00, 0x00, 0x00, 0x04, 0x03, 0x00,
+ 0x09, 0x00, 0x8C, 0x21, 0x04, 0x30, 0x01, 0x00,
+ 0x00, 0x00, 0x04, 0x03, 0x00, 0x09, 0x00, 0x90,
+ 0x21, 0x04, 0x30, 0x01, 0x00, 0x00, 0x00, 0x04,
+ 0x03, 0x00, 0x09, 0x00, 0x94, 0x21, 0x04, 0x30,
+ 0x01, 0x00, 0x00, 0x00, 0x04, 0x03, 0x00, 0x09,
+ 0x00, 0x98, 0x21, 0x04, 0x30, 0x00, 0x00, 0x00,
+ 0x00, 0x04, 0x03, 0x00, 0x09, 0x00, 0xA0, 0x21,
+ 0x04, 0x30, 0x00, 0x00, 0x00, 0x00, 0x04, 0x03,
+ 0x00, 0x09, 0x00, 0x20, 0x21, 0x04, 0x30, 0x08,
+ 0x00, 0x00, 0x00, 0x04, 0x03, 0x00, 0x09, 0x00,
+ 0x60, 0x21, 0x04, 0x30, 0x08, 0x00, 0x00, 0x00,
+ 0x04, 0x15, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x20, 0x28, 0x00, 0x00,
+};
+
+static unsigned char vfs5011_init_17[] = { /* 117 B */
+ 0x2A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x01, 0xFF, 0x00, 0x00, 0xFF, 0xF4, 0x01, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00,
+ 0x00, 0x00, 0x00, 0xF4, 0x01, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x20, 0xBF, 0x02, 0x00,
+};
+
+static unsigned char vfs5011_init_18[] = { /* 2903 B */
+ 0x02, 0xF0, 0x00, 0x00, 0x00, 0x03, 0x00, 0x09,
+ 0x00, 0x04, 0x20, 0x04, 0x30, 0x00, 0x00, 0x00,
+ 0x00, 0x04, 0x03, 0x00, 0x09, 0x00, 0x18, 0x20,
+ 0x04, 0x30, 0x00, 0x00, 0x00, 0x00, 0x04, 0x03,
+ 0x00, 0x09, 0x00, 0x20, 0x20, 0x04, 0x30, 0x08,
+ 0x00, 0x80, 0x00, 0x04, 0x03, 0x00, 0x09, 0x00,
+ 0x24, 0x20, 0x04, 0x30, 0x00, 0x00, 0xFF, 0x01,
+ 0x04, 0x03, 0x00, 0x09, 0x00, 0x2C, 0x20, 0x04,
+ 0x30, 0x01, 0x00, 0x00, 0x00, 0x04, 0x03, 0x00,
+ 0x09, 0x00, 0x40, 0x20, 0x04, 0x30, 0xFF, 0x03,
+ 0x00, 0x00, 0x04, 0x03, 0x00, 0x09, 0x00, 0x44,
+ 0x20, 0x04, 0x30, 0xE5, 0x03, 0x00, 0x00, 0x04,
+ 0x03, 0x00, 0x09, 0x00, 0x48, 0x20, 0x04, 0x30,
+ 0xEA, 0x03, 0x00, 0x00, 0x04, 0x03, 0x00, 0x09,
+ 0x00, 0x4C, 0x20, 0x04, 0x30, 0x0A, 0x00, 0x00,
+ 0x00, 0x04, 0x03, 0x00, 0x09, 0x00, 0x54, 0x20,
+ 0x04, 0x30, 0x01, 0xDE, 0x01, 0x00, 0x04, 0x03,
+ 0x00, 0x09, 0x00, 0x00, 0x21, 0x04, 0x30, 0x00,
+ 0x00, 0x00, 0x00, 0x04, 0x03, 0x00, 0x09, 0x00,
+ 0x04, 0x21, 0x04, 0x30, 0x01, 0x00, 0x00, 0x00,
+ 0x04, 0x03, 0x00, 0x09, 0x00, 0x08, 0x21, 0x04,
+ 0x30, 0x02, 0x00, 0x00, 0x00, 0x04, 0x03, 0x00,
+ 0x09, 0x00, 0x0C, 0x21, 0x04, 0x30, 0x01, 0x00,
+ 0x00, 0x00, 0x04, 0x03, 0x00, 0x09, 0x00, 0x10,
+ 0x21, 0x04, 0x30, 0x01, 0x00, 0x00, 0x00, 0x04,
+ 0x03, 0x00, 0x09, 0x00, 0x14, 0x21, 0x04, 0x30,
+ 0x01, 0x00, 0x00, 0x00, 0x04, 0x03, 0x00, 0x09,
+ 0x00, 0x18, 0x21, 0x04, 0x30, 0x01, 0x00, 0x00,
+ 0x00, 0x04, 0x03, 0x00, 0x09, 0x00, 0x1C, 0x21,
+ 0x04, 0x30, 0x1F, 0x00, 0x00, 0x00, 0x04, 0x03,
+ 0x00, 0x09, 0x00, 0x20, 0x21, 0x04, 0x30, 0x08,
+ 0x00, 0x00, 0x00, 0x04, 0x03, 0x00, 0x09, 0x00,
+ 0x40, 0x21, 0x04, 0x30, 0x01, 0x00, 0x00, 0x00,
+ 0x04, 0x03, 0x00, 0x09, 0x00, 0x44, 0x21, 0x04,
+ 0x30, 0x01, 0x00, 0x00, 0x00, 0x04, 0x03, 0x00,
+ 0x09, 0x00, 0x48, 0x21, 0x04, 0x30, 0x01, 0x00,
+ 0x00, 0x00, 0x04, 0x03, 0x00, 0x09, 0x00, 0x4C,
+ 0x21, 0x04, 0x30, 0x01, 0x00, 0x00, 0x00, 0x04,
+ 0x03, 0x00, 0x09, 0x00, 0x50, 0x21, 0x04, 0x30,
+ 0x01, 0x00, 0x00, 0x00, 0x04, 0x03, 0x00, 0x09,
+ 0x00, 0x54, 0x21, 0x04, 0x30, 0x01, 0x00, 0x00,
+ 0x00, 0x04, 0x03, 0x00, 0x09, 0x00, 0x58, 0x21,
+ 0x04, 0x30, 0x01, 0x00, 0x00, 0x00, 0x04, 0x03,
+ 0x00, 0x09, 0x00, 0x5C, 0x21, 0x04, 0x30, 0x1F,
+ 0x00, 0x00, 0x00, 0x04, 0x03, 0x00, 0x09, 0x00,
+ 0x60, 0x21, 0x04, 0x30, 0x08, 0x00, 0x00, 0x00,
+ 0x04, 0x03, 0x00, 0x09, 0x00, 0x80, 0x21, 0x04,
+ 0x30, 0x30, 0x00, 0x00, 0x00, 0x04, 0x03, 0x00,
+ 0x09, 0x00, 0x84, 0x21, 0x04, 0x30, 0x01, 0x00,
+ 0x00, 0x00, 0x04, 0x03, 0x00, 0x09, 0x00, 0x88,
+ 0x21, 0x04, 0x30, 0x01, 0x00, 0x00, 0x00, 0x04,
+ 0x03, 0x00, 0x09, 0x00, 0x8C, 0x21, 0x04, 0x30,
+ 0x01, 0x00, 0x00, 0x00, 0x04, 0x03, 0x00, 0x09,
+ 0x00, 0x90, 0x21, 0x04, 0x30, 0x00, 0x00, 0x00,
+ 0x00, 0x04, 0x03, 0x00, 0x09, 0x00, 0x94, 0x21,
+ 0x04, 0x30, 0x01, 0x00, 0x00, 0x00, 0x04, 0x03,
+ 0x00, 0x09, 0x00, 0x98, 0x21, 0x04, 0x30, 0x00,
+ 0x00, 0x00, 0x00, 0x04, 0x03, 0x00, 0x09, 0x00,
+ 0x9C, 0x21, 0x04, 0x30, 0x1F, 0x00, 0x00, 0x00,
+ 0x04, 0x03, 0x00, 0x09, 0x00, 0xA0, 0x21, 0x04,
+ 0x30, 0x04, 0x00, 0x00, 0x00, 0x04, 0x03, 0x00,
+ 0x09, 0x00, 0xC0, 0x21, 0x04, 0x30, 0x30, 0x00,
+ 0x00, 0x00, 0x04, 0x03, 0x00, 0x09, 0x00, 0xC4,
+ 0x21, 0x04, 0x30, 0x01, 0x00, 0x00, 0x00, 0x04,
+ 0x03, 0x00, 0x09, 0x00, 0xC8, 0x21, 0x04, 0x30,
+ 0x01, 0x00, 0x00, 0x00, 0x04, 0x03, 0x00, 0x09,
+ 0x00, 0xCC, 0x21, 0x04, 0x30, 0x01, 0x00, 0x00,
+ 0x00, 0x04, 0x03, 0x00, 0x09, 0x00, 0xD0, 0x21,
+ 0x04, 0x30, 0x00, 0x00, 0x00, 0x00, 0x04, 0x03,
+ 0x00, 0x09, 0x00, 0xD4, 0x21, 0x04, 0x30, 0x01,
+ 0x00, 0x00, 0x00, 0x04, 0x03, 0x00, 0x09, 0x00,
+ 0xD8, 0x21, 0x04, 0x30, 0x00, 0x00, 0x00, 0x00,
+ 0x04, 0x03, 0x00, 0x09, 0x00, 0xDC, 0x21, 0x04,
+ 0x30, 0x1F, 0x00, 0x00, 0x00, 0x04, 0x03, 0x00,
+ 0x09, 0x00, 0xE0, 0x21, 0x04, 0x30, 0x04, 0x00,
+ 0x00, 0x00, 0x04, 0x03, 0x00, 0x09, 0x00, 0xA0,
+ 0x20, 0x04, 0x30, 0xEF, 0xE1, 0x00, 0x00, 0x04,
+ 0x03, 0x00, 0x09, 0x00, 0xA4, 0x20, 0x04, 0x30,
+ 0x00, 0x00, 0x00, 0x00, 0x04, 0x03, 0x00, 0x09,
+ 0x00, 0xB0, 0x20, 0x04, 0x30, 0x00, 0x00, 0x00,
+ 0x00, 0x04, 0x03, 0x00, 0x09, 0x00, 0xC4, 0x20,
+ 0x04, 0x30, 0x14, 0x00, 0x00, 0x00, 0x04, 0x03,
+ 0x00, 0x09, 0x00, 0xC8, 0x20, 0x04, 0x30, 0x00,
+ 0x00, 0x00, 0x00, 0x04, 0x03, 0x00, 0x09, 0x00,
+ 0xCC, 0x20, 0x04, 0x30, 0x20, 0x00, 0x00, 0x00,
+ 0x04, 0x03, 0x00, 0x09, 0x00, 0x50, 0x20, 0x04,
+ 0x30, 0x00, 0x00, 0x74, 0x01, 0x04, 0x03, 0x00,
+ 0x09, 0x00, 0xA8, 0x20, 0x04, 0x30, 0xFE, 0x21,
+ 0x74, 0x01, 0x04, 0x03, 0x00, 0x09, 0x00, 0x04,
+ 0x00, 0x00, 0x38, 0x00, 0x07, 0x00, 0x00, 0x04,
+ 0x03, 0x00, 0x09, 0x00, 0x08, 0x00, 0x00, 0x38,
+ 0x00, 0x15, 0x00, 0x00, 0x04, 0x03, 0x00, 0x09,
+ 0x00, 0x0C, 0x00, 0x00, 0x38, 0x01, 0x03, 0x02,
+ 0x00, 0x04, 0x03, 0x00, 0x09, 0x00, 0x10, 0x00,
+ 0x00, 0x38, 0x01, 0x07, 0x02, 0x00, 0x04, 0x03,
+ 0x00, 0x09, 0x00, 0x14, 0x00, 0x00, 0x38, 0x0C,
+ 0x0C, 0x05, 0x00, 0x04, 0x02, 0x00, 0x80, 0x05,
+ 0xFF, 0xF9, 0x87, 0x20, 0xBB, 0xF8, 0x87, 0x00,
+ 0xBB, 0xF8, 0x87, 0x00, 0xBB, 0xF8, 0x87, 0x00,
+ 0xBB, 0xF8, 0x87, 0x00, 0xBB, 0xF8, 0x87, 0x00,
+ 0xBB, 0xF8, 0x87, 0x00, 0xBB, 0xF8, 0x07, 0x20,
+ 0xBA, 0xF8, 0x07, 0x20, 0xB9, 0xF8, 0x07, 0x20,
+ 0xB8, 0xF8, 0x07, 0x20, 0xB7, 0xF8, 0x07, 0x20,
+ 0xB6, 0xF8, 0x07, 0x20, 0xB5, 0xF8, 0x07, 0x20,
+ 0xB4, 0xF8, 0x07, 0x20, 0xB3, 0xF8, 0x07, 0x20,
+ 0xB2, 0xF8, 0x07, 0x20, 0xB1, 0xF8, 0x07, 0x22,
+ 0xB0, 0xF8, 0x07, 0x22, 0xAF, 0xF8, 0x07, 0x22,
+ 0xAE, 0xF8, 0x07, 0x22, 0xAD, 0xF8, 0x07, 0x22,
+ 0xAC, 0xF8, 0x07, 0x22, 0xAB, 0xF8, 0x07, 0x22,
+ 0xAA, 0xF8, 0x07, 0x22, 0xA9, 0xF8, 0x07, 0x22,
+ 0xA8, 0xF8, 0x07, 0x22, 0xA7, 0xF8, 0x07, 0x22,
+ 0xA6, 0xF8, 0x07, 0x22, 0xA5, 0xF8, 0x07, 0x22,
+ 0xA4, 0xF8, 0x07, 0x22, 0xA3, 0xF8, 0x07, 0x22,
+ 0xA2, 0xF8, 0x07, 0x22, 0xA1, 0xF8, 0x07, 0x22,
+ 0xA0, 0xF8, 0x07, 0x22, 0x9F, 0xF8, 0x07, 0x22,
+ 0x9E, 0xF8, 0x07, 0x22, 0x9D, 0xF8, 0x07, 0x22,
+ 0x9C, 0xF8, 0x07, 0x22, 0x9B, 0xF8, 0x07, 0x22,
+ 0x9A, 0xF8, 0x07, 0x22, 0x99, 0xF8, 0x07, 0x22,
+ 0x98, 0xF8, 0x07, 0x22, 0x97, 0xF8, 0x07, 0x22,
+ 0x96, 0xF8, 0x07, 0x22, 0x95, 0xF8, 0x07, 0x22,
+ 0x94, 0xF8, 0x07, 0x22, 0x93, 0xF8, 0x07, 0x22,
+ 0x92, 0xF8, 0x07, 0x22, 0x91, 0xF8, 0x07, 0x22,
+ 0x90, 0xF8, 0x07, 0x22, 0x8F, 0xF8, 0x07, 0x22,
+ 0x8E, 0xF8, 0x07, 0x22, 0x8D, 0xF8, 0x07, 0x22,
+ 0x8C, 0xF8, 0x07, 0x22, 0x8B, 0xF8, 0x07, 0x22,
+ 0x8A, 0xF8, 0x07, 0x22, 0x89, 0xF8, 0x07, 0x22,
+ 0x88, 0xF8, 0x07, 0x22, 0x87, 0xF8, 0x07, 0x22,
+ 0x86, 0xF8, 0x07, 0x22, 0x85, 0xF8, 0x07, 0x22,
+ 0x84, 0xF8, 0x07, 0x22, 0x83, 0xF8, 0x07, 0x22,
+ 0x82, 0xF8, 0x07, 0x22, 0x81, 0xF8, 0x07, 0x22,
+ 0x80, 0xF8, 0x07, 0x22, 0x7F, 0xF8, 0x07, 0x22,
+ 0x7E, 0xF8, 0x07, 0x22, 0x7D, 0xF8, 0x07, 0x22,
+ 0x7C, 0xF8, 0x07, 0x22, 0x7B, 0xF8, 0x07, 0x22,
+ 0x7A, 0xF8, 0x07, 0x22, 0x79, 0xF8, 0x07, 0x22,
+ 0x78, 0xF8, 0x07, 0x22, 0x77, 0xF8, 0x07, 0x22,
+ 0x76, 0xF8, 0x07, 0x22, 0x75, 0xF8, 0x07, 0x22,
+ 0x74, 0xF8, 0x07, 0x22, 0x73, 0xF8, 0x07, 0x22,
+ 0x72, 0xF8, 0x07, 0x22, 0x71, 0xF8, 0x07, 0x22,
+ 0x70, 0xF8, 0x07, 0x22, 0x6F, 0xF8, 0x07, 0x22,
+ 0x6E, 0xF8, 0x07, 0x22, 0x6D, 0xF8, 0x07, 0x22,
+ 0x6C, 0xF8, 0x07, 0x22, 0x6B, 0xF8, 0x07, 0x22,
+ 0x6A, 0xF8, 0x07, 0x22, 0x69, 0xF8, 0x07, 0x22,
+ 0x68, 0xF8, 0x07, 0x22, 0x67, 0xF8, 0x07, 0x22,
+ 0x66, 0xF8, 0x07, 0x22, 0x65, 0xF8, 0x07, 0x22,
+ 0x64, 0xF8, 0x07, 0x22, 0x63, 0xF8, 0x07, 0x22,
+ 0x62, 0xF8, 0x07, 0x22, 0x61, 0xF8, 0x07, 0x22,
+ 0x60, 0xF8, 0x07, 0x22, 0x5F, 0xF8, 0x07, 0x22,
+ 0x5E, 0xF8, 0x07, 0x22, 0x5D, 0xF8, 0x07, 0x22,
+ 0x5C, 0xF8, 0x07, 0x22, 0x5B, 0xF8, 0x07, 0x22,
+ 0x5A, 0xF8, 0x07, 0x22, 0x59, 0xF8, 0x07, 0x22,
+ 0x58, 0xF8, 0x07, 0x22, 0x57, 0xF8, 0x07, 0x22,
+ 0x56, 0xF8, 0x07, 0x22, 0x55, 0xF8, 0x07, 0x22,
+ 0x54, 0xF8, 0x07, 0x22, 0x53, 0xF8, 0x07, 0x22,
+ 0x52, 0xF8, 0x07, 0x22, 0x51, 0xF8, 0x07, 0x22,
+ 0x50, 0xF8, 0x07, 0x22, 0x4F, 0xF8, 0x07, 0x22,
+ 0x4E, 0xF8, 0x07, 0x22, 0x4D, 0xF8, 0x07, 0x22,
+ 0x4C, 0xF8, 0x07, 0x22, 0x4B, 0xF8, 0x07, 0x22,
+ 0x4A, 0xF8, 0x07, 0x22, 0x49, 0xF8, 0x07, 0x22,
+ 0x48, 0xF8, 0x07, 0x22, 0x47, 0xF8, 0x07, 0x22,
+ 0x46, 0xF8, 0x07, 0x22, 0x45, 0xF8, 0x07, 0x22,
+ 0x44, 0xF8, 0x07, 0x22, 0x43, 0xF8, 0x07, 0x22,
+ 0x42, 0xF8, 0x07, 0x22, 0x41, 0xF8, 0x07, 0x22,
+ 0x40, 0xF8, 0x07, 0x22, 0x3F, 0xF8, 0x07, 0x22,
+ 0x3E, 0xF8, 0x07, 0x22, 0x3D, 0xF8, 0x07, 0x22,
+ 0x3C, 0xF8, 0x07, 0x22, 0x3B, 0xF8, 0x07, 0x22,
+ 0x3A, 0xF8, 0x07, 0x22, 0x39, 0xF8, 0x07, 0x22,
+ 0x38, 0xF8, 0x07, 0x22, 0x37, 0xF8, 0x07, 0x22,
+ 0x36, 0xF8, 0x07, 0x22, 0x35, 0xF8, 0x07, 0x22,
+ 0x34, 0xF8, 0x07, 0x22, 0x33, 0xF8, 0x07, 0x22,
+ 0x32, 0xF8, 0x07, 0x22, 0x31, 0xF8, 0x07, 0x22,
+ 0x30, 0xF8, 0x07, 0x22, 0x2F, 0xF8, 0x07, 0x22,
+ 0x2E, 0xF8, 0x07, 0x22, 0x2D, 0xF8, 0x07, 0x22,
+ 0x2C, 0xF8, 0x07, 0x22, 0x2B, 0xF8, 0x07, 0x22,
+ 0x2A, 0xF8, 0x07, 0x22, 0x29, 0xF8, 0x07, 0x22,
+ 0x28, 0xF8, 0x07, 0x22, 0x27, 0xF8, 0x07, 0x22,
+ 0x26, 0xF8, 0x07, 0x22, 0x25, 0xF8, 0x07, 0x22,
+ 0x24, 0xF8, 0x07, 0x22, 0x23, 0xF8, 0x07, 0x20,
+ 0x22, 0xF8, 0x07, 0x20, 0x21, 0xF8, 0x07, 0x20,
+ 0x20, 0xF8, 0x07, 0x20, 0x1F, 0xF8, 0x07, 0x20,
+ 0x1E, 0xF8, 0x07, 0x20, 0x1D, 0xF8, 0x07, 0x20,
+ 0x1C, 0xF8, 0x07, 0x20, 0x1C, 0xF8, 0x07, 0x00,
+ 0xD7, 0xF8, 0xA7, 0x00, 0xD7, 0xF8, 0xA7, 0x00,
+ 0xD7, 0xF8, 0xA7, 0x00, 0xD7, 0xF8, 0xA7, 0x00,
+ 0xD7, 0xF8, 0xA7, 0x00, 0xD7, 0xF8, 0xA7, 0x00,
+ 0xD8, 0xF8, 0x27, 0x20, 0xD9, 0xF8, 0x27, 0x20,
+ 0xDA, 0xF8, 0x27, 0x20, 0xDB, 0xF8, 0x27, 0x20,
+ 0xDC, 0xF8, 0x27, 0x20, 0xDD, 0xF8, 0x27, 0x20,
+ 0xDE, 0xF8, 0x27, 0x20, 0xDF, 0xF8, 0x27, 0x20,
+ 0xE0, 0xF8, 0x27, 0x20, 0xE1, 0xF8, 0x27, 0x20,
+ 0xE2, 0xF8, 0x27, 0x20, 0xE3, 0xF8, 0x27, 0x20,
+ 0xE4, 0xF8, 0x27, 0x20, 0xE5, 0xF8, 0x27, 0x20,
+ 0xE6, 0xF8, 0x27, 0x20, 0xE7, 0xF8, 0x27, 0x20,
+ 0xE8, 0xF8, 0x27, 0x20, 0xE9, 0xF8, 0x27, 0x20,
+ 0xEA, 0xF8, 0x27, 0x20, 0xEB, 0xF8, 0x27, 0x20,
+ 0xEC, 0xF8, 0x27, 0x20, 0xED, 0xF8, 0x27, 0x20,
+ 0xEE, 0xF8, 0x27, 0x20, 0xEF, 0xF8, 0x27, 0x20,
+ 0xF0, 0xF8, 0x27, 0x20, 0xF1, 0xF8, 0x27, 0x20,
+ 0xF2, 0xF8, 0x27, 0x20, 0xF3, 0xF8, 0x27, 0x20,
+ 0xF4, 0xF8, 0x27, 0x20, 0xF5, 0xF8, 0x27, 0x20,
+ 0xF6, 0xF8, 0x27, 0x20, 0xF7, 0xF8, 0x27, 0x20,
+ 0xF8, 0xF8, 0x27, 0x20, 0xF9, 0xF8, 0x27, 0x20,
+ 0xFA, 0xF8, 0x27, 0x20, 0xFB, 0xF8, 0x27, 0x20,
+ 0xFC, 0xF8, 0x27, 0x20, 0xFD, 0xF8, 0x27, 0x20,
+ 0xFE, 0xF8, 0x27, 0x20, 0xFF, 0xF8, 0x27, 0x20,
+ 0x00, 0xF9, 0x27, 0x20, 0xD7, 0xF8, 0x27, 0x20,
+ 0x00, 0xF8, 0x27, 0x20, 0x01, 0xF8, 0x27, 0x20,
+ 0x02, 0xF8, 0x27, 0x20, 0x03, 0xF8, 0x27, 0x20,
+ 0x04, 0xF8, 0x27, 0x20, 0x05, 0xF8, 0x27, 0x20,
+ 0x06, 0xF8, 0x27, 0x20, 0x07, 0xF8, 0x27, 0x20,
+ 0x08, 0xF8, 0x27, 0x20, 0x09, 0xF8, 0x27, 0x20,
+ 0x0A, 0xF8, 0x27, 0x20, 0x0B, 0xF8, 0x27, 0x20,
+ 0x0C, 0xF8, 0x27, 0x20, 0x0D, 0xF8, 0x27, 0x20,
+ 0x0E, 0xF8, 0x27, 0x20, 0x0F, 0xF8, 0x27, 0x20,
+ 0x10, 0xF8, 0x27, 0x20, 0x11, 0xF8, 0x27, 0x20,
+ 0x12, 0xF8, 0x27, 0x20, 0x13, 0xF8, 0x27, 0x20,
+ 0x14, 0xF8, 0x27, 0x20, 0x15, 0xF8, 0x27, 0x20,
+ 0x15, 0xF8, 0x27, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x0A, 0x00, 0x08, 0x00, 0x10, 0x03, 0x18, 0x1C,
+ 0x10, 0x03, 0x18, 0x1C, 0x03, 0x00, 0x09, 0x00,
+ 0x00, 0x20, 0x04, 0x30, 0x80, 0x00, 0x00, 0x00,
+ 0x04, 0x05, 0x00, 0x0E, 0x00, 0x0C, 0x20, 0xFD,
+ 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x02,
+ 0x08, 0x00, 0x00, 0x05, 0x00, 0x0E, 0x00, 0x10,
+ 0x20, 0xFD, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x05, 0x00, 0x00, 0x03, 0x00, 0x09,
+ 0x00, 0x04, 0x21, 0x04, 0x30, 0x01, 0x00, 0x00,
+ 0x00, 0x04, 0x03, 0x00, 0x09, 0x00, 0x08, 0x21,
+ 0x04, 0x30, 0x01, 0x00, 0x00, 0x00, 0x04, 0x03,
+ 0x00, 0x09, 0x00, 0x0C, 0x21, 0x04, 0x30, 0x01,
+ 0x00, 0x00, 0x00, 0x04, 0x03, 0x00, 0x09, 0x00,
+ 0x10, 0x21, 0x04, 0x30, 0x01, 0x00, 0x00, 0x00,
+ 0x04, 0x03, 0x00, 0x09, 0x00, 0x14, 0x21, 0x04,
+ 0x30, 0x01, 0x00, 0x00, 0x00, 0x04, 0x03, 0x00,
+ 0x09, 0x00, 0x18, 0x21, 0x04, 0x30, 0x01, 0x00,
+ 0x00, 0x00, 0x04, 0x03, 0x00, 0x09, 0x00, 0x44,
+ 0x21, 0x04, 0x30, 0x01, 0x00, 0x00, 0x00, 0x04,
+ 0x03, 0x00, 0x09, 0x00, 0x48, 0x21, 0x04, 0x30,
+ 0x01, 0x00, 0x00, 0x00, 0x04, 0x03, 0x00, 0x09,
+ 0x00, 0x4C, 0x21, 0x04, 0x30, 0x01, 0x00, 0x00,
+ 0x00, 0x04, 0x03, 0x00, 0x09, 0x00, 0x50, 0x21,
+ 0x04, 0x30, 0x01, 0x00, 0x00, 0x00, 0x04, 0x03,
+ 0x00, 0x09, 0x00, 0x54, 0x21, 0x04, 0x30, 0x01,
+ 0x00, 0x00, 0x00, 0x04, 0x03, 0x00, 0x09, 0x00,
+ 0x58, 0x21, 0x04, 0x30, 0x01, 0x00, 0x00, 0x00,
+ 0x04, 0x03, 0x00, 0x09, 0x00, 0xC8, 0x20, 0x04,
+ 0x30, 0x04, 0x00, 0x00, 0x00, 0x04, 0x05, 0x00,
+ 0x0E, 0x00, 0x14, 0x20, 0xFF, 0xFF, 0x00, 0xFF,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x83, 0x00,
+ 0x03, 0x00, 0x09, 0x00, 0x84, 0x21, 0x04, 0x30,
+ 0x01, 0x00, 0x00, 0x00, 0x04, 0x03, 0x00, 0x09,
+ 0x00, 0x88, 0x21, 0x04, 0x30, 0x01, 0x00, 0x00,
+ 0x00, 0x04, 0x03, 0x00, 0x09, 0x00, 0x8C, 0x21,
+ 0x04, 0x30, 0x01, 0x00, 0x00, 0x00, 0x04, 0x03,
+ 0x00, 0x09, 0x00, 0x90, 0x21, 0x04, 0x30, 0x01,
+ 0x00, 0x00, 0x00, 0x04, 0x03, 0x00, 0x09, 0x00,
+ 0x94, 0x21, 0x04, 0x30, 0x01, 0x00, 0x00, 0x00,
+ 0x04, 0x03, 0x00, 0x09, 0x00, 0x98, 0x21, 0x04,
+ 0x30, 0x00, 0x00, 0x00, 0x00, 0x04, 0x03, 0x00,
+ 0x09, 0x00, 0xA0, 0x21, 0x04, 0x30, 0x00, 0x00,
+ 0x00, 0x00, 0x04, 0x03, 0x00, 0x09, 0x00, 0x20,
+ 0x21, 0x04, 0x30, 0x08, 0x00, 0x00, 0x00, 0x04,
+ 0x03, 0x00, 0x09, 0x00, 0x60, 0x21, 0x04, 0x30,
+ 0x08, 0x00, 0x00, 0x00, 0x04, 0x15, 0x00, 0x08,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x28, 0x00,
+ 0x00, 0x18, 0x00, 0x52, 0x01, 0x08, 0x00, 0x05,
+ 0x00, 0x0A, 0x00, 0xFA, 0x00, 0x1E, 0x00, 0xC8,
+ 0x00, 0x00, 0x00, 0x9F, 0x00, 0x38, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04,
+ 0x03, 0xFF, 0xF9, 0xFD, 0xFE, 0xFE, 0x00, 0xFD,
+ 0x02, 0x03, 0x02, 0x01, 0x01, 0xFF, 0x03, 0x06,
+ 0x0C, 0x08, 0x08, 0x0C, 0x06, 0x0A, 0x0B, 0x06,
+ 0x0B, 0x0A, 0x0C, 0x0A, 0x0A, 0x07, 0x02, 0x05,
+ 0x07, 0x06, 0x0A, 0x09, 0x09, 0x0C, 0x0C, 0x11,
+ 0x0B, 0x0D, 0x08, 0x07, 0x09, 0x09, 0x09, 0x08,
+ 0x06, 0x09, 0xFE, 0xFF, 0xFF, 0x01, 0x06, 0x01,
+ 0xFD, 0xFB, 0x00, 0x01, 0x04, 0x01, 0x02, 0x05,
+ 0x04, 0x00, 0x02, 0x02, 0x05, 0x07, 0x05, 0x03,
+ 0x05, 0x02, 0x0A, 0x06, 0x03, 0x04, 0x00, 0x01,
+ 0x02, 0x04, 0x01, 0x01, 0xFA, 0xF7, 0xFA, 0xF9,
+ 0xF6, 0xF7, 0xFD, 0xFE, 0x02, 0xFE, 0xFC, 0xF7,
+ 0xF9, 0xFB, 0xF7, 0xFB, 0xF5, 0xF8, 0xF8, 0xF9,
+ 0xEF, 0xEE, 0xF2, 0xEF, 0xF0, 0xED, 0xF2, 0xF7,
+ 0xF9, 0xFA, 0xF6, 0xF6, 0xF5, 0xF4, 0xF3, 0xEF,
+ 0xF1, 0xF5, 0xF4, 0xF1, 0xF5, 0xFA, 0xF8, 0xFA,
+ 0xF9, 0xFA, 0xFE, 0x01, 0x02, 0xFE, 0xFE, 0x03,
+ 0x01, 0xFC, 0xF9, 0xF7, 0xF6, 0xF4, 0xF9, 0xF7,
+ 0xF7, 0xF5, 0xF7, 0xFA, 0xFB, 0x00, 0xFC, 0xFD,
+ 0xFD, 0xF6, 0xF2, 0xF4, 0xED, 0xDC, 0xCE, 0xFF,
+ 0x05, 0x07, 0x08, 0x0E, 0x0E, 0x0F, 0x0A, 0x0C,
+ 0x06, 0x05, 0x05, 0xF6, 0xF2, 0xF1, 0xEF, 0xF4,
+ 0xF6, 0xF4, 0xF5, 0xF6, 0xF7, 0xF5, 0xF8, 0xF8,
+ 0xF8, 0xF2, 0xF7, 0xF3, 0xF0, 0xF3, 0xF5, 0xFD,
+ 0xFB, 0xFC, 0xF9, 0xF9, 0xFC, 0xFA, 0xF8, 0xFD,
+ 0x0B, 0x1C, 0x17, 0x13, 0x14, 0x0F, 0x0D, 0x0C,
+ 0x0B, 0x0B, 0x0F, 0x0C, 0x0E, 0x10, 0x0E, 0x11,
+ 0x12, 0x14, 0x1C, 0x1C, 0x20, 0x20, 0x24, 0xF4,
+ 0xF6, 0xF4, 0xF5, 0xF6, 0xF7, 0xF5, 0xF8, 0x80,
+ 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
+ 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
+ 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
+ 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
+ 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
+ 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
+ 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
+ 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
+ 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
+ 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
+};
+
+static unsigned char vfs5011_cmd_04[] = { /* 1 B */
+ 0x04,
+};
+
+static unsigned char vfs5011_prepare_00[] = { /* 578 B */
+ 0x06, 0x9C, 0xF1, 0x9D, 0x71, 0xC3, 0x13, 0xDF,
+ 0x5F, 0xE4, 0x7A, 0x1F, 0xC7, 0x17, 0x53, 0x9A,
+ 0x1A, 0xA1, 0xD7, 0xB6, 0x6E, 0xBE, 0xDF, 0x1F,
+ 0x9F, 0x44, 0x42, 0x22, 0xFA, 0x2A, 0x6A, 0xAB,
+ 0x2B, 0xF0, 0x56, 0x39, 0xE3, 0x7B, 0x53, 0x9A,
+ 0x1A, 0xA1, 0xDB, 0xBA, 0x62, 0xB2, 0xE4, 0x65,
+ 0xE5, 0xDB, 0x68, 0x04, 0x79, 0x98, 0xDE, 0x8F,
+ 0x23, 0xFB, 0xEC, 0xAD, 0x76, 0xCA, 0xA2, 0xEB,
+ 0x61, 0x38, 0xC7, 0xAB, 0x6E, 0x2E, 0x78, 0xF9,
+ 0x79, 0x13, 0x8A, 0xE5, 0x90, 0x22, 0x63, 0x8D,
+ 0x0E, 0x93, 0x25, 0x49, 0x5A, 0xC8, 0xA3, 0xD8,
+ 0x7E, 0xAE, 0x12, 0xF6, 0x2C, 0x1C, 0xFC, 0x48,
+ 0x4F, 0x0E, 0x48, 0x22, 0xFB, 0x4B, 0xCE, 0x7E,
+ 0xDB, 0x2D, 0x91, 0xE0, 0xC8, 0x78, 0x2E, 0xAF,
+ 0x2F, 0xD4, 0x03, 0x6F, 0x12, 0x59, 0xC6, 0x26,
+ 0x40, 0x88, 0x2E, 0x62, 0xBA, 0x06, 0x6C, 0xC9,
+ 0x7A, 0x84, 0x93, 0xCF, 0x14, 0x15, 0x44, 0x87,
+ 0xE2, 0x09, 0x97, 0xE6, 0xCE, 0x7E, 0x28, 0xA9,
+ 0x29, 0x53, 0xD7, 0xB8, 0xD1, 0x53, 0x30, 0x15,
+ 0x6E, 0x95, 0x3E, 0xA2, 0x7A, 0xCA, 0x9C, 0x1D,
+ 0x9D, 0xEB, 0x5F, 0x15, 0xEF, 0x48, 0x34, 0xCC,
+ 0xCB, 0x02, 0xA6, 0xD6, 0xA7, 0x80, 0xF2, 0x3F,
+ 0x7E, 0x96, 0x23, 0xAE, 0x42, 0xF1, 0x29, 0xF5,
+ 0xAD, 0x5A, 0x35, 0x57, 0x36, 0xAA, 0xAF, 0x97,
+ 0xE8, 0x1E, 0xA2, 0xD3, 0xFB, 0x4B, 0x1D, 0x9C,
+ 0x1C, 0x06, 0x84, 0xEB, 0x9E, 0x2C, 0xD4, 0x18,
+ 0x94, 0x44, 0x7E, 0x4B, 0x12, 0x91, 0xF2, 0x8B,
+ 0x07, 0x45, 0xDB, 0x52, 0xBB, 0x2E, 0x53, 0x63,
+ 0xE3, 0x38, 0xB8, 0x95, 0x4D, 0x9B, 0xCF, 0x07,
+ 0x05, 0xDD, 0x4C, 0xE2, 0x39, 0xAF, 0xA9, 0x51,
+ 0xDB, 0xAD, 0x19, 0xC8, 0x13, 0x6E, 0x0A, 0x2F,
+ 0xEA, 0x12, 0xB9, 0x25, 0x55, 0xB6, 0x64, 0x04,
+ 0x7F, 0x14, 0x6E, 0x12, 0x08, 0xFB, 0xBD, 0xBD,
+ 0x1D, 0xC6, 0xE2, 0x84, 0x50, 0x20, 0x60, 0xA0,
+ 0x90, 0xD2, 0x74, 0x8A, 0x18, 0xA4, 0xD9, 0xE9,
+ 0x69, 0xB2, 0x1E, 0x73, 0xAB, 0x1B, 0x7B, 0xBB,
+ 0x3B, 0xE0, 0x42, 0x23, 0xF9, 0x29, 0x49, 0x89,
+ 0x09, 0xD2, 0x4C, 0x29, 0xF1, 0x21, 0x65, 0xAC,
+ 0x2C, 0x97, 0x30, 0x6C, 0xB4, 0x04, 0xF4, 0x3D,
+ 0xBD, 0x06, 0xA0, 0xC6, 0x1E, 0xCE, 0x7E, 0xB3,
+ 0x33, 0x88, 0x2E, 0x43, 0x9B, 0x2B, 0x37, 0xF0,
+ 0x70, 0xCB, 0x91, 0xF1, 0x2B, 0xFB, 0x8B, 0x48,
+ 0xCA, 0x39, 0x97, 0xFB, 0x21, 0xB9, 0xCD, 0x0E,
+ 0x8C, 0x7F, 0x8D, 0xEC, 0x36, 0xE6, 0xEA, 0x27,
+ 0xA5, 0x1E, 0x40, 0x2A, 0xF2, 0x22, 0xCA, 0x07,
+ 0x85, 0x3E, 0xC8, 0xAE, 0x76, 0xA6, 0xF0, 0x71,
+ 0xF1, 0xAB, 0x6B, 0x04, 0x6D, 0xA9, 0xCA, 0x06,
+ 0x2C, 0x66, 0xA5, 0xCA, 0xB0, 0x4B, 0x2B, 0x62,
+ 0xEB, 0xD5, 0x61, 0x0D, 0xF0, 0x46, 0x26, 0xC3,
+ 0x44, 0x9F, 0x0C, 0x63, 0xBB, 0xAA, 0xBD, 0x7E,
+ 0xF2, 0x74, 0x00, 0x66, 0x2B, 0x7A, 0x62, 0xA1,
+ 0x07, 0x80, 0x33, 0x8D, 0x1F, 0xF7, 0x45, 0xCB,
+ 0x5E, 0x24, 0xEB, 0x84, 0xED, 0x27, 0x44, 0x61,
+ 0xFF, 0x0C, 0xA7, 0x3B, 0xE3, 0x53, 0x05, 0x84,
+ 0x04, 0xEE, 0x23, 0x4C, 0xB5, 0x79, 0x1A, 0xF3,
+ 0xA0, 0x66, 0x20, 0x4C, 0x94, 0x24, 0x72, 0xF3,
+ 0x73, 0x39, 0xF8, 0x97, 0xDD, 0x64, 0x54, 0xF2,
+ 0x6B, 0xBA, 0xAD, 0xBC, 0x67, 0x66, 0x78, 0xBB,
+ 0x5E, 0x6D, 0xFB, 0x8A, 0xA2, 0x74, 0x3D, 0xF5,
+ 0xD4, 0x72, 0xC7, 0x1A, 0xBD, 0x0E, 0x0B, 0x2C,
+ 0x8C, 0x4A, 0x0C, 0x60, 0xB8, 0x08, 0x5E, 0xDF,
+ 0x5F, 0x05, 0x33, 0x5C, 0xB5, 0x7E, 0x1D, 0xFC,
+ 0xFD, 0x25, 0xBA, 0x95, 0xC4, 0xA7, 0xDA, 0xEA,
+ 0x6A, 0xB1, 0x31, 0x1C, 0xC4, 0xE5, 0x07, 0xC4,
+ 0xC5, 0x9D, 0x28, 0xCD, 0x3C, 0xE9, 0x89, 0x49,
+ 0xD4, 0xFF, 0x7F, 0x52, 0x8A, 0x9B, 0x7F, 0xBC,
+ 0x8E, 0xF5, 0xCF, 0x0B, 0xD9, 0x49, 0x48, 0x88,
+ 0x80, 0x71, 0x7D, 0xAB, 0xEF, 0x47, 0x2B, 0xF7,
+ 0x7B, 0x2D, 0x79, 0x3F, 0xCF, 0xBF, 0xFF, 0x3F,
+ 0x6D, 0xF8, 0x42, 0xEC, 0x7F, 0xE8, 0xED, 0x42,
+ 0xE6, 0x1D, 0x4D, 0x32, 0xFA, 0x6A, 0x0A, 0xD7,
+ 0xA7, 0x7C, 0xCB, 0xA7, 0x7B, 0xCB, 0xBF, 0x71,
+ 0xF3, 0x48,
+};
+
+static unsigned char vfs5011_prepare_01[] = { /* 3794 B */
+ 0x06, 0x6B, 0x06, 0x6A, 0x76, 0xC8, 0x18, 0xD4,
+ 0x54, 0xEF, 0x71, 0x14, 0xCC, 0x1C, 0x58, 0x91,
+ 0x11, 0xAA, 0x80, 0xF4, 0x2C, 0xFC, 0x9F, 0x5F,
+ 0xDF, 0x04, 0x02, 0x62, 0xBA, 0x6A, 0x5A, 0x97,
+ 0x17, 0xCC, 0x46, 0x22, 0xFA, 0x2A, 0xBE, 0x03,
+ 0x87, 0x3C, 0x9E, 0xFE, 0x26, 0xF6, 0x96, 0x7E,
+ 0xFA, 0x11, 0x27, 0x66, 0xBA, 0x3A, 0x5A, 0xBA,
+ 0x3E, 0xD5, 0x4F, 0x03, 0xDF, 0x5F, 0x7F, 0x9F,
+ 0x1B, 0xF0, 0xA2, 0xEF, 0x33, 0xB3, 0xD3, 0x13,
+ 0x93, 0x70, 0xFA, 0x96, 0x4E, 0xC6, 0xA6, 0xC6,
+ 0x46, 0xA5, 0x2F, 0xE3, 0x3B, 0xB3, 0xD3, 0x33,
+ 0xB3, 0x50, 0xE8, 0xA4, 0x7C, 0xF4, 0x94, 0x14,
+ 0x94, 0x77, 0xC9, 0xE5, 0x3D, 0xB5, 0xD5, 0x75,
+ 0xF5, 0x16, 0xA8, 0xA4, 0x7C, 0xF4, 0x94, 0xD4,
+ 0x54, 0xB7, 0x09, 0xE5, 0x3D, 0xB5, 0x2D, 0xF4,
+ 0x74, 0xCF, 0x29, 0x5C, 0x84, 0x54, 0x14, 0xAA,
+ 0x2E, 0x95, 0xF7, 0xE0, 0x3C, 0xEC, 0x8C, 0x52,
+ 0xD6, 0x3D, 0x7B, 0x0E, 0xD6, 0x06, 0x82, 0x49,
+ 0xC9, 0x72, 0x7C, 0x18, 0xC0, 0x10, 0x10, 0xF6,
+ 0x72, 0xC9, 0xC3, 0xA8, 0x70, 0xA0, 0xD8, 0x77,
+ 0xF3, 0x48, 0x06, 0x04, 0xD8, 0x08, 0x90, 0x5B,
+ 0xDB, 0x60, 0x36, 0x43, 0x9B, 0x4B, 0xD4, 0xE3,
+ 0x9C, 0xB8, 0xF1, 0x72, 0x55, 0x1A, 0x8E, 0x57,
+ 0xD7, 0x6C, 0xDA, 0xBE, 0x66, 0xD6, 0xEA, 0x3D,
+ 0xBF, 0x04, 0xB2, 0xCE, 0x16, 0xA6, 0x06, 0xDE,
+ 0x5E, 0xE5, 0xB7, 0xC3, 0x1B, 0xCB, 0x47, 0x9F,
+ 0x1F, 0xA4, 0x3E, 0x5B, 0x83, 0x53, 0x53, 0x8A,
+ 0x0A, 0xB1, 0x93, 0xF9, 0x21, 0xF1, 0x31, 0xE6,
+ 0x64, 0xDF, 0x95, 0xE0, 0x38, 0xE8, 0xB4, 0x6D,
+ 0xED, 0x56, 0x1D, 0x8E, 0x56, 0xE6, 0x79, 0xB9,
+ 0xC6, 0xE2, 0x62, 0x4F, 0x97, 0x02, 0x40, 0x80,
+ 0x65, 0xB8, 0x0E, 0x07, 0xC2, 0x72, 0x37, 0xBE,
+ 0x3E, 0x00, 0xF2, 0xB8, 0xF1, 0x6D, 0x0E, 0x6F,
+ 0xC2, 0x1A, 0xA0, 0xC4, 0x95, 0x2F, 0xCD, 0x44,
+ 0xC4, 0x02, 0x44, 0x28, 0xF0, 0x40, 0x16, 0x97,
+ 0x17, 0x7D, 0xE4, 0x8B, 0xFE, 0x4C, 0x0D, 0xE3,
+ 0x60, 0xFD, 0x4B, 0x27, 0x34, 0xA6, 0xCD, 0xB6,
+ 0x10, 0xC0, 0x7C, 0x98, 0x42, 0x72, 0x92, 0x26,
+ 0x21, 0x60, 0x26, 0x4C, 0x95, 0x25, 0xA0, 0x03,
+ 0xA6, 0x50, 0xEC, 0x9D, 0xB5, 0x05, 0x53, 0xD2,
+ 0x52, 0xA9, 0x7E, 0x12, 0x2F, 0x65, 0xFA, 0x1A,
+ 0x7C, 0xB4, 0x12, 0x5E, 0x86, 0x3A, 0x50, 0xF5,
+ 0x53, 0xAD, 0xBA, 0xE6, 0x3D, 0x3C, 0x6D, 0xAE,
+ 0xCB, 0x33, 0xAD, 0xDC, 0xF4, 0x44, 0x12, 0x93,
+ 0x13, 0xF9, 0x7D, 0x12, 0xEB, 0x68, 0x0B, 0xE2,
+ 0x21, 0xE7, 0xA1, 0xCD, 0x15, 0xA5, 0xF3, 0x72,
+ 0xF2, 0xAB, 0x1F, 0x7E, 0xAA, 0x01, 0xE1, 0xA1,
+ 0x25, 0xA8, 0x06, 0x6D, 0xB9, 0x0C, 0x60, 0xA6,
+ 0x64, 0xAD, 0x15, 0x65, 0xBA, 0x30, 0x14, 0x66,
+ 0x22, 0x78, 0xFC, 0x94, 0x4C, 0x4E, 0x25, 0x9B,
+ 0xD9, 0x06, 0xB1, 0xEA, 0x89, 0x35, 0x62, 0x1E,
+ 0x8F, 0x69, 0xD4, 0x7F, 0x1C, 0xA0, 0xFD, 0x31,
+ 0x77, 0xAD, 0x1B, 0x40, 0xA4, 0x10, 0xB7, 0xCC,
+ 0x4D, 0xAB, 0x16, 0xD7, 0x0C, 0x01, 0x62, 0x87,
+ 0xBF, 0x4C, 0x50, 0x5A, 0xD8, 0x3B, 0x50, 0xE7,
+ 0x2C, 0xB3, 0xB7, 0x1F, 0x46, 0xA0, 0x57, 0x6B,
+ 0x46, 0x98, 0x93, 0xFA, 0xC7, 0xC1, 0x89, 0x45,
+ 0xDE, 0xD7, 0xC3, 0xC3, 0xBB, 0xCF, 0xEE, 0xEE,
+ 0xA8, 0xB3, 0xDF, 0x61, 0x4B, 0xE6, 0x04, 0x04,
+ 0x40, 0xDA, 0xAC, 0x43, 0xDA, 0x9A, 0x15, 0x25,
+ 0x45, 0x7D, 0xEA, 0x0C, 0x3A, 0x7A, 0xD4, 0x87,
+ 0xC5, 0x43, 0x77, 0x1D, 0xC6, 0x76, 0xD4, 0xB6,
+ 0x5A, 0x4B, 0x3F, 0x91, 0x55, 0x98, 0xC2, 0xCE,
+ 0x8C, 0x5B, 0xED, 0x53, 0x99, 0x20, 0x6D, 0xA6,
+ 0xF1, 0x96, 0x21, 0x41, 0xBB, 0x16, 0x86, 0x46,
+ 0xC6, 0x1D, 0x9D, 0xB0, 0x68, 0x69, 0x3D, 0xFE,
+ 0xC6, 0x16, 0x2C, 0x2B, 0x51, 0x40, 0x40, 0x2A,
+ 0x01, 0xBF, 0xB3, 0xFF, 0x8A, 0x38, 0x3D, 0x51,
+ 0xF4, 0x32, 0x74, 0x18, 0xC0, 0x70, 0x26, 0xA7,
+ 0x27, 0x5D, 0xDE, 0xB1, 0xD8, 0x5E, 0x3D, 0x30,
+ 0xB2, 0x0C, 0xEC, 0xA5, 0xCC, 0x44, 0x27, 0xC7,
+ 0x6D, 0x16, 0x01, 0x5A, 0x81, 0xFC, 0x9E, 0x3B,
+ 0xEE, 0x10, 0x17, 0x41, 0x9A, 0x0A, 0x50, 0x30,
+ 0x72, 0x6A, 0xCC, 0x01, 0xE0, 0x53, 0x3F, 0xFD,
+ 0x54, 0x8C, 0x13, 0x6C, 0x9D, 0x0E, 0x47, 0xB4,
+ 0xD1, 0x59, 0xCA, 0x17, 0xF3, 0x40, 0x10, 0xEA,
+ 0xCA, 0xD3, 0xA6, 0xDA, 0xA3, 0x28, 0x4B, 0x6E,
+ 0xBC, 0x42, 0xF8, 0x9D, 0x75, 0xFF, 0x3F, 0xCD,
+ 0x8E, 0x45, 0xE8, 0x1D, 0xEC, 0x5F, 0x74, 0x87,
+ 0x61, 0x23, 0x63, 0xA2, 0x79, 0x7B, 0xBB, 0xDE,
+ 0x72, 0xE5, 0xB6, 0x7B, 0x8B, 0x9A, 0xC7, 0x04,
+ 0x35, 0xD0, 0x65, 0xCB, 0xD0, 0x44, 0x41, 0xD1,
+ 0x74, 0x1E, 0xE8, 0x87, 0x6F, 0xE5, 0x25, 0x44,
+ 0xFB, 0x23, 0xA7, 0x08, 0xF4, 0x89, 0xEA, 0xCF,
+ 0x1E, 0xE0, 0xE7, 0xC9, 0x12, 0x92, 0xC8, 0xA8,
+ 0x89, 0x13, 0xA6, 0x07, 0xDC, 0xC9, 0xFA, 0x1F,
+ 0x2E, 0xB1, 0x04, 0x58, 0xBA, 0xAA, 0x6B, 0xE8,
+ 0x6B, 0x7D, 0xC8, 0x01, 0x8B, 0x1E, 0xCF, 0x49,
+ 0xCA, 0x21, 0xAD, 0x61, 0x18, 0xED, 0x8E, 0x83,
+ 0x00, 0x3E, 0xD9, 0x90, 0x78, 0xE2, 0x22, 0xFF,
+ 0x8F, 0x54, 0xD4, 0xF9, 0x21, 0x10, 0x37, 0xF4,
+ 0xFC, 0x2F, 0x15, 0x31, 0x48, 0xB0, 0xD3, 0x36,
+ 0xC1, 0x32, 0x99, 0x05, 0xDD, 0x6D, 0x3B, 0xBA,
+ 0x3A, 0x60, 0x91, 0xFE, 0xAE, 0x16, 0xFA, 0x72,
+ 0x53, 0xC0, 0x75, 0xFC, 0x51, 0xC9, 0x0C, 0x38,
+ 0x99, 0x5F, 0x19, 0x75, 0xAD, 0x1D, 0x4B, 0xCA,
+ 0x4A, 0x3C, 0x88, 0x01, 0x40, 0xD2, 0x33, 0xB4,
+ 0x37, 0x64, 0xDA, 0x3A, 0xAA, 0xBB, 0x93, 0x50,
+ 0xF5, 0x5A, 0xC4, 0xB5, 0x9D, 0x2D, 0x7B, 0xFA,
+ 0x7A, 0x84, 0x17, 0x7B, 0x22, 0xD8, 0xBB, 0xEA,
+ 0x58, 0x80, 0x97, 0xB2, 0x69, 0x70, 0x49, 0x00,
+ 0x89, 0x4F, 0x09, 0x65, 0xBD, 0x0D, 0x5B, 0xDA,
+ 0x5A, 0xB0, 0x32, 0x5D, 0x89, 0x1E, 0x46, 0x85,
+ 0x54, 0xC4, 0x71, 0x8F, 0x54, 0xEC, 0xEE, 0x8F,
+ 0x7F, 0xAF, 0x90, 0xEA, 0x7A, 0xCC, 0x7D, 0xF1,
+ 0x72, 0xA5, 0x79, 0x19, 0xC6, 0xF4, 0x5D, 0x61,
+ 0xF7, 0x24, 0x98, 0xD2, 0x53, 0xEB, 0x26, 0xE4,
+ 0x01, 0x67, 0xF7, 0xB6, 0x64, 0xC9, 0x59, 0xF3,
+ 0x30, 0x59, 0xFC, 0x9B, 0xD1, 0x65, 0x05, 0xD3,
+ 0x68, 0xB8, 0x68, 0x7D, 0xB5, 0xC7, 0xB3, 0x8F,
+ 0x59, 0x2E, 0x92, 0x5C, 0xC7, 0x7F, 0x3D, 0xFE,
+ 0x73, 0x88, 0x1F, 0x77, 0xB2, 0xF2, 0x9E, 0x55,
+ 0x57, 0x8F, 0x34, 0x9A, 0x61, 0x0C, 0x7B, 0xD3,
+ 0x5C, 0x15, 0xAE, 0xC2, 0x16, 0xB4, 0xC2, 0x2B,
+ 0xA5, 0x75, 0x6A, 0xA4, 0x31, 0x81, 0xA7, 0x67,
+ 0xE7, 0x30, 0x84, 0x28, 0xD0, 0x60, 0xA2, 0x71,
+ 0xF9, 0xE0, 0x33, 0xFF, 0xAB, 0x01, 0x04, 0x22,
+ 0x84, 0x42, 0x04, 0x02, 0x99, 0xFB, 0x9F, 0x5F,
+ 0xB9, 0x7F, 0xF5, 0x21, 0xDB, 0xC6, 0xA5, 0x00,
+ 0x60, 0x9D, 0x8B, 0x07, 0xAB, 0x7D, 0x03, 0xE2,
+ 0xD3, 0x45, 0xF0, 0x6E, 0xBD, 0x0D, 0x4B, 0xA4,
+ 0x23, 0x8A, 0x77, 0x1B, 0xCF, 0x75, 0x30, 0x96,
+ 0x33, 0xE4, 0x6A, 0x94, 0x6F, 0x01, 0xA1, 0x41,
+ 0xC1, 0x88, 0x5B, 0x97, 0xCD, 0x3E, 0x56, 0xD0,
+ 0x53, 0x88, 0x9C, 0xE3, 0x3C, 0x00, 0x1A, 0xA8,
+ 0x6C, 0xB7, 0xA3, 0xDC, 0x03, 0x96, 0x14, 0xF2,
+ 0x7E, 0xB7, 0x1C, 0x80, 0xEA, 0x49, 0x21, 0x8B,
+ 0x48, 0x85, 0xF8, 0x93, 0x89, 0x3D, 0x5D, 0x5F,
+ 0x13, 0x33, 0x93, 0xC3, 0x1C, 0x4E, 0x2D, 0xE0,
+ 0xE2, 0x1D, 0x2A, 0x51, 0xE7, 0x07, 0xF5, 0x38,
+ 0xB8, 0x75, 0x4A, 0x2A, 0xFE, 0x5C, 0x37, 0x0E,
+ 0x7C, 0xEA, 0x5C, 0xB6, 0x7E, 0xCE, 0x2C, 0x25,
+ 0x5C, 0xD1, 0xFF, 0x66, 0x06, 0x94, 0x59, 0x9A,
+ 0x7F, 0x7D, 0xED, 0x21, 0x69, 0xAD, 0xC6, 0x9F,
+ 0x49, 0x7B, 0xC7, 0xA7, 0x74, 0xC8, 0xE4, 0xC6,
+ 0x65, 0x63, 0x07, 0xC9, 0x65, 0x0F, 0xBC, 0xBC,
+ 0x1C, 0xC7, 0xD3, 0xAC, 0x7C, 0x2E, 0x2B, 0x4B,
+ 0xB9, 0x3F, 0xF7, 0x59, 0xC2, 0x7A, 0x0C, 0x86,
+ 0xF4, 0x23, 0xFB, 0x75, 0xE9, 0x59, 0x9B, 0x48,
+ 0xC0, 0x7E, 0x13, 0x59, 0x07, 0x72, 0xED, 0x00,
+ 0x87, 0x50, 0xE9, 0x45, 0xBD, 0x0D, 0xCF, 0x1C,
+ 0x94, 0xCD, 0x1E, 0xD2, 0x1C, 0x36, 0xA5, 0x80,
+ 0xD9, 0x24, 0x8F, 0x13, 0xC7, 0x75, 0x53, 0x5B,
+ 0x24, 0x47, 0xD3, 0x12, 0xC9, 0x5C, 0xE8, 0x0E,
+ 0x2E, 0x65, 0xA7, 0xAD, 0x6C, 0xFB, 0x97, 0x5C,
+ 0x0E, 0xF6, 0x9D, 0x33, 0x49, 0x8D, 0x27, 0x24,
+ 0x64, 0x9F, 0x29, 0x97, 0x2A, 0x3A, 0xF8, 0x2B,
+ 0xA3, 0x0A, 0xE0, 0xF2, 0x96, 0x7C, 0x76, 0x55,
+ 0xD9, 0x6F, 0x0B, 0x29, 0xF1, 0xE3, 0x90, 0x58,
+ 0xBD, 0xB0, 0x20, 0xCA, 0x1B, 0xAB, 0xC7, 0x78,
+ 0xF4, 0x7B, 0x8F, 0xA0, 0x70, 0xAA, 0x89, 0xBB,
+ 0x7F, 0xA4, 0xA0, 0xDF, 0x0C, 0x20, 0x0B, 0x79,
+ 0xAD, 0x8A, 0x30, 0xA6, 0x72, 0x4A, 0xA8, 0x2C,
+ 0xAC, 0x12, 0x70, 0x3A, 0x70, 0xD4, 0x48, 0x1A,
+ 0x53, 0x79, 0x5D, 0x65, 0x41, 0xD3, 0xB0, 0x7D,
+ 0xDD, 0x27, 0x95, 0xE4, 0xCC, 0x51, 0x36, 0x70,
+ 0x2F, 0x0B, 0x1F, 0x67, 0x43, 0xE5, 0x5F, 0x77,
+ 0xFB, 0xA8, 0x9C, 0xB4, 0x6C, 0x6A, 0xB0, 0x60,
+ 0xEC, 0xCD, 0xDE, 0x63, 0x9D, 0x0F, 0x7B, 0x47,
+ 0xE5, 0xFC, 0xBB, 0xF5, 0x79, 0x35, 0x53, 0x0E,
+ 0x71, 0x4F, 0x29, 0x63, 0x96, 0x21, 0x07, 0x3B,
+ 0x44, 0x9F, 0x1F, 0x32, 0xEA, 0x0B, 0x5F, 0x9C,
+ 0x44, 0x9A, 0x6E, 0xA2, 0x8A, 0x70, 0x55, 0xA7,
+ 0x23, 0x78, 0xE8, 0xA7, 0x4E, 0xD8, 0xFB, 0x08,
+ 0xE9, 0x79, 0xCC, 0xD1, 0x45, 0xF6, 0x9A, 0xF2,
+ 0x54, 0xEC, 0x75, 0x7F, 0x24, 0x8A, 0xE6, 0x55,
+ 0x47, 0xB9, 0xD1, 0x7D, 0x85, 0x35, 0xC7, 0x61,
+ 0x41, 0xA8, 0x5A, 0xB6, 0xDC, 0x69, 0x04, 0x66,
+ 0xE1, 0x3A, 0x3C, 0xE1, 0x3D, 0x3D, 0xF5, 0xA6,
+ 0x84, 0x18, 0xAE, 0xDF, 0xF7, 0x5A, 0xCA, 0x06,
+ 0x95, 0x08, 0xBE, 0xD2, 0x06, 0x85, 0xD7, 0x53,
+ 0x53, 0x95, 0xD3, 0xB3, 0x38, 0x4A, 0x0F, 0x11,
+ 0x51, 0xAA, 0x1C, 0xB2, 0x0C, 0x1C, 0xBA, 0x89,
+ 0xF6, 0x2D, 0xAD, 0x80, 0x58, 0xD9, 0xF7, 0x34,
+ 0x95, 0x01, 0xB4, 0xF1, 0x3A, 0x97, 0x07, 0xC7,
+ 0x47, 0x9C, 0x1C, 0x31, 0xE9, 0xC8, 0x9C, 0x5F,
+ 0x47, 0x95, 0xAF, 0x6A, 0x10, 0x89, 0x34, 0x54,
+ 0x74, 0xBB, 0x2B, 0x7D, 0xA7, 0xF2, 0xD0, 0x31,
+ 0xAC, 0x87, 0x07, 0x2A, 0xF2, 0xE3, 0xD2, 0x11,
+ 0xB0, 0x21, 0x94, 0xC9, 0x23, 0x90, 0x61, 0xF1,
+ 0x72, 0x28, 0xCC, 0xA3, 0xF2, 0x6B, 0x22, 0xE1,
+ 0xC8, 0x4A, 0xE1, 0x7D, 0xA5, 0x15, 0x43, 0xC2,
+ 0x42, 0xB8, 0x5D, 0x32, 0x62, 0xF0, 0x57, 0xFF,
+ 0x62, 0x18, 0xFA, 0x95, 0x28, 0xD1, 0x99, 0xC8,
+ 0x1D, 0xC5, 0xB2, 0x88, 0x53, 0x52, 0x65, 0xA6,
+ 0x8E, 0x77, 0x79, 0x1E, 0x06, 0x1C, 0x6C, 0x3C,
+ 0x26, 0xED, 0xEB, 0x1D, 0x56, 0x7F, 0x3D, 0x58,
+ 0x11, 0xEF, 0x44, 0xD8, 0x00, 0xB0, 0xE6, 0x67,
+ 0xE7, 0x9D, 0x7F, 0x10, 0x2D, 0xDF, 0x97, 0xB6,
+ 0x6E, 0xB6, 0x41, 0x1F, 0xC4, 0x45, 0x76, 0xB5,
+ 0x39, 0xEE, 0x80, 0xCF, 0xE6, 0x01, 0x62, 0x15,
+ 0xF8, 0x01, 0x0A, 0x69, 0x79, 0xCD, 0x64, 0xAB,
+ 0x86, 0x5F, 0x68, 0x5D, 0x86, 0xD6, 0x2B, 0xCB,
+ 0xD2, 0x2A, 0x15, 0x7D, 0xC0, 0x38, 0x58, 0x29,
+ 0xF3, 0x2B, 0x35, 0x7A, 0xAE, 0x1C, 0xCC, 0xA6,
+ 0x06, 0x74, 0xE1, 0x90, 0xB8, 0x04, 0x6F, 0x69,
+ 0x1F, 0x3B, 0xBB, 0x96, 0x4E, 0xE2, 0x4A, 0x0D,
+ 0x1F, 0xC0, 0x57, 0x60, 0xBB, 0x16, 0x86, 0xEB,
+ 0x69, 0x97, 0xE3, 0xAA, 0x5F, 0xE5, 0x98, 0xA8,
+ 0x28, 0xF3, 0x73, 0x5E, 0x86, 0x47, 0x60, 0xA3,
+ 0xFF, 0x70, 0x4E, 0x25, 0x71, 0x89, 0x4C, 0x92,
+ 0x12, 0x8F, 0x38, 0x54, 0x2D, 0xD5, 0xB6, 0x53,
+ 0xEF, 0x1C, 0x02, 0x69, 0xBD, 0x04, 0xF6, 0x7C,
+ 0x64, 0x0D, 0x1B, 0x04, 0x96, 0x45, 0xE7, 0x87,
+ 0x73, 0xCF, 0x45, 0x3A, 0x5F, 0xED, 0x25, 0xE2,
+ 0xAF, 0x77, 0x8B, 0x4D, 0x37, 0x4D, 0x09, 0x6C,
+ 0xA9, 0x5A, 0x5E, 0x92, 0x39, 0x4F, 0x2A, 0xEA,
+ 0x2D, 0xCD, 0x6F, 0xBE, 0x64, 0x7C, 0x1B, 0x19,
+ 0x39, 0x96, 0x60, 0xC0, 0xD8, 0x22, 0xE8, 0x8A,
+ 0xC0, 0x3F, 0x6C, 0x43, 0xB3, 0xB1, 0x71, 0xC2,
+ 0xFE, 0x70, 0xA1, 0xF6, 0x26, 0x34, 0xF0, 0x35,
+ 0x50, 0x5A, 0xC8, 0xE2, 0x3D, 0x8D, 0x5F, 0x3F,
+ 0xCB, 0x77, 0x7A, 0x1E, 0x64, 0x70, 0x16, 0x33,
+ 0x63, 0x9C, 0xAC, 0xC3, 0x1B, 0xA7, 0xCD, 0xD5,
+ 0x52, 0x85, 0x2F, 0x81, 0x14, 0x3C, 0xB9, 0xB6,
+ 0x12, 0xEC, 0x5E, 0x32, 0x02, 0xB5, 0x37, 0xF9,
+ 0xE1, 0xF6, 0x0E, 0xC3, 0x53, 0xE0, 0x25, 0xDD,
+ 0x75, 0xB3, 0xF5, 0x99, 0x41, 0xF1, 0xA7, 0x26,
+ 0xA6, 0x4C, 0xBD, 0xD2, 0x32, 0x81, 0xC0, 0x5C,
+ 0xDF, 0x2D, 0xE8, 0x0F, 0x54, 0x76, 0xD5, 0x01,
+ 0x18, 0xA0, 0x8F, 0xB0, 0xE1, 0x62, 0x8B, 0x68,
+ 0xCA, 0xD3, 0x99, 0xDC, 0x47, 0xEA, 0x7A, 0xBA,
+ 0x3A, 0xE1, 0x61, 0x4C, 0x94, 0xC1, 0xB2, 0x72,
+ 0xEF, 0xC4, 0x44, 0x69, 0xB1, 0x0D, 0x27, 0x42,
+ 0xE2, 0x1B, 0x8C, 0xA7, 0x7C, 0x41, 0x2B, 0x73,
+ 0xF1, 0x26, 0x8A, 0x64, 0xD5, 0x42, 0x87, 0x58,
+ 0xFA, 0x5D, 0x37, 0x27, 0x11, 0xAD, 0xE5, 0x9D,
+ 0x1F, 0xC8, 0x69, 0xA7, 0x14, 0x8C, 0x5D, 0xD6,
+ 0x55, 0x4E, 0xD8, 0xB4, 0xFE, 0x65, 0xAD, 0xAD,
+ 0x0D, 0xD6, 0x10, 0xE5, 0x1D, 0x3F, 0x34, 0x5C,
+ 0x1C, 0xE7, 0x51, 0xCF, 0x3C, 0x24, 0x84, 0x64,
+ 0xE4, 0xBF, 0xF6, 0xBA, 0x90, 0x4B, 0x83, 0x83,
+ 0x23, 0xF8, 0x9C, 0xDB, 0xA9, 0xD9, 0x99, 0x59,
+ 0x39, 0x3F, 0x99, 0x27, 0x94, 0x8E, 0x2E, 0xCE,
+ 0x4E, 0x37, 0xAA, 0x6C, 0x74, 0xE4, 0x84, 0x84,
+ 0xAE, 0x65, 0x71, 0x76, 0x04, 0x15, 0x28, 0xEB,
+ 0xCE, 0x00, 0x94, 0xF4, 0x2F, 0x27, 0x45, 0x89,
+ 0x0F, 0xD8, 0x2B, 0xA7, 0x3C, 0x9D, 0xF1, 0x38,
+ 0x88, 0xB0, 0xF6, 0x7A, 0x4C, 0xED, 0x3D, 0x0E,
+ 0x2E, 0x97, 0x4E, 0x08, 0xDC, 0x73, 0xDB, 0x19,
+ 0x09, 0x7B, 0x3D, 0x4A, 0x0B, 0x2B, 0xDB, 0x6F,
+ 0x05, 0x12, 0x6E, 0xC8, 0xC2, 0x7E, 0x37, 0x75,
+ 0xF9, 0x08, 0x0C, 0x6C, 0x91, 0xA1, 0x49, 0x98,
+ 0xA8, 0xC0, 0x37, 0xE9, 0x7D, 0xE8, 0x58, 0x10,
+ 0xB0, 0xB3, 0x07, 0xD6, 0x06, 0x36, 0xE9, 0xAA,
+ 0xC0, 0xC6, 0xC0, 0x54, 0xCD, 0x8F, 0xA3, 0x49,
+ 0x13, 0x62, 0x56, 0x30, 0xC0, 0xC2, 0xEE, 0x07,
+ 0x07, 0x58, 0xAF, 0x41, 0xD3, 0x4B, 0x4D, 0xC4,
+ 0xFE, 0xAD, 0x19, 0xD8, 0x03, 0x39, 0xCA, 0x80,
+ 0xB4, 0xDD, 0x40, 0x06, 0x54, 0x6A, 0xBA, 0xC1,
+ 0xB1, 0xD0, 0xEE, 0x00, 0xD0, 0x47, 0xA5, 0x2C,
+ 0x44, 0x17, 0xA3, 0xC3, 0x10, 0x20, 0x93, 0xC3,
+ 0xC9, 0xE6, 0xA2, 0xE1, 0x13, 0x29, 0xA7, 0x97,
+ 0xE8, 0xC3, 0x8F, 0x0D, 0x17, 0xA9, 0xE3, 0xC1,
+ 0x4F, 0xBD, 0x8B, 0x2B, 0xE2, 0xB2, 0x1E, 0xFE,
+ 0xBC, 0x3A, 0xE0, 0xE9, 0x20, 0x90, 0xFC, 0x35,
+ 0xBE, 0x30, 0x3E, 0x50, 0x93, 0x10, 0x40, 0xB0,
+ 0x44, 0xAF, 0xFA, 0x66, 0x04, 0x70, 0x62, 0xCE,
+ 0x60, 0x5B, 0xAE, 0xD3, 0x5D, 0x58, 0xCD, 0xAF,
+ 0xE4, 0x2B, 0x1C, 0x2E, 0xF5, 0xD7, 0x9C, 0x79,
+ 0x6B, 0xDB, 0x44, 0xE8, 0x10, 0xA0, 0x48, 0x80,
+ 0x89, 0xD9, 0xCA, 0xF1, 0x09, 0xA4, 0x34, 0xF4,
+ 0x74, 0xAF, 0x2F, 0x02, 0xDA, 0x4B, 0x6C, 0xAF,
+ 0x87, 0x5E, 0x4A, 0xEC, 0x20, 0xB5, 0x8D, 0x6D,
+ 0x45, 0x9C, 0xA1, 0x67, 0x9A, 0xB9, 0xFE, 0x32,
+ 0xF8, 0xC1, 0xD8, 0x34, 0x3D, 0xC6, 0xA5, 0xA5,
+ 0x05, 0xDE, 0xAA, 0xEB, 0x87, 0xF7, 0xB7, 0x77,
+ 0x4F, 0x96, 0xC0, 0x60, 0xA8, 0xDA, 0xD7, 0xA3,
+ 0x91, 0x61, 0xF0, 0xF9, 0x29, 0xBB, 0x63, 0xA1,
+ 0x2D, 0xEC, 0xE8, 0xAF, 0x5F, 0x0A, 0x6D, 0x8F,
+ 0x12, 0x39, 0xB9, 0x94, 0x4C, 0xAD, 0x86, 0x45,
+ 0x05, 0xFE, 0x48, 0x66, 0x9B, 0x9F, 0x3F, 0xDF,
+ 0x5F, 0xB4, 0x46, 0x3A, 0xA2, 0x50, 0x10, 0x92,
+ 0x77, 0x18, 0xB3, 0x2F, 0xF7, 0x47, 0x11, 0x90,
+ 0x10, 0xC7, 0x72, 0x6C, 0x14, 0xD4, 0xE5, 0x62,
+ 0xE1, 0x36, 0x96, 0x42, 0x9F, 0x1F, 0xBC, 0x8C,
+ 0xBC, 0xC4, 0xD2, 0x6C, 0x9E, 0x04, 0xD4, 0xD8,
+ 0xF8, 0xF3, 0x98, 0x04, 0x06, 0x7A, 0x98, 0x54,
+ 0xF0, 0xCB, 0x3E, 0x43, 0xFD, 0x55, 0x09, 0x2B,
+ 0x81, 0x74, 0x10, 0x56, 0xBC, 0x47, 0x94, 0xB3,
+ 0x3E, 0xF2, 0xE6, 0x86, 0x76, 0xC6, 0xBD, 0x3D,
+ 0xBD, 0xD0, 0xC7, 0xDB, 0xB8, 0x18, 0xD8, 0xB8,
+ 0x0C, 0x67, 0x7B, 0x37, 0x4F, 0x5F, 0x4B, 0xCD,
+ 0x4D, 0x96, 0x2C, 0x4A, 0x20, 0x3F, 0xDF, 0x3A,
+ 0x43, 0x67, 0x69, 0x00, 0x62, 0x06, 0x94, 0x79,
+ 0xD7, 0x00, 0xAA, 0x36, 0x01, 0xA0, 0x30, 0x3E,
+ 0x2D, 0x34, 0xEF, 0xAD, 0x6E, 0xED, 0xBD, 0x4D,
+ 0xB9, 0x04, 0xF1, 0x3D, 0x6E, 0x75, 0xB0, 0xF5,
+ 0x52, 0x24, 0x90, 0x7D, 0xFB, 0x48, 0xE8, 0x08,
+ 0x88, 0xDB, 0x65, 0x80, 0x6A, 0x7F, 0x56, 0xB6,
+ 0x2B, 0x00, 0x80, 0xAD, 0x75, 0x44, 0x63, 0xA0,
+ 0x00, 0xB9, 0xFF, 0x1B, 0xCB, 0x70, 0x53, 0x13,
+ 0xA1, 0xEA, 0xDC, 0xE2, 0x9A, 0x58, 0x1D, 0xF7,
+ 0xF7, 0x4A, 0x5C, 0x40, 0xEF, 0xAF, 0xB5, 0x53,
+ 0x85, 0xBA, 0x08, 0x46, 0x9C, 0x0A, 0x28, 0x7B,
+ 0x8B, 0xD0, 0x44, 0x29, 0xD1, 0x49, 0x18, 0x92,
+ 0x30, 0xEB, 0x7F, 0x02, 0xFA, 0x6A, 0x3B, 0xD9,
+ 0x0A, 0xA1, 0x55, 0x1C, 0xEE, 0x1E, 0x3A, 0x0A,
+ 0xC0, 0x5D, 0xA9, 0xC1, 0x3F, 0x2E, 0x11, 0xD2,
+ 0xD2, 0x4D, 0xFA, 0xD6, 0x46, 0xC7, 0x01, 0xD5,
+ 0x59, 0x24, 0x50, 0x2F, 0xEB, 0xA9, 0xD5, 0xED,
+ 0xEF, 0x67, 0xA1, 0x8B, 0x51, 0xE1, 0x67, 0xB5,
+ 0x33, 0xE4, 0x50, 0x30, 0xE1, 0xC3, 0xF0, 0x40,
+ 0x60, 0x19, 0x0F, 0xCB, 0x19, 0x0B, 0x0E, 0xFC,
+ 0x61, 0x4A, 0xDE, 0xB0, 0x4D, 0x7B, 0xF4, 0xCB,
+ 0x4B, 0x90, 0x10, 0x3D, 0xE5, 0x59, 0x3B, 0xF7,
+ 0x72, 0xE8, 0x19, 0x76, 0xA2, 0x51, 0xF9, 0x3D,
+ 0x7D, 0x74, 0x52, 0xAC, 0x69, 0xB5, 0xC3, 0x5A,
+ 0xDD, 0x0D, 0x32, 0xDE, 0x86, 0xC2, 0x20, 0xBD,
+ 0x51, 0xDC, 0xE2, 0x88, 0x90, 0xD2, 0x12, 0x30,
+ 0x9F, 0x6E, 0x64, 0x16, 0xE8, 0x46, 0x09, 0xEF,
+ 0x41, 0xB6, 0x66, 0x34, 0xBB, 0x59, 0x56, 0xBC,
+ 0x1C, 0x55, 0x13, 0xBF, 0xFE, 0xEE, 0x2C, 0xE5,
+ 0x4F, 0x26, 0x99, 0xDC, 0x84, 0x9E, 0xEF, 0x9F,
+ 0xB5, 0x4E, 0xF4, 0x93, 0xE9, 0x04, 0x08, 0xE2,
+ 0xCE, 0x87, 0x38, 0x73, 0x39, 0xC3, 0x4B, 0x26,
+ 0xA4, 0x5A, 0x1F, 0x8C, 0x12, 0xA9, 0xC9, 0x12,
+ 0x2C, 0xD7, 0xC3, 0x5F, 0x47, 0x5D, 0x9D, 0xEF,
+ 0x00, 0xF1, 0xF7, 0x20, 0x08, 0x02, 0xC8, 0xBA,
+ 0x30, 0xC1, 0x95, 0xF3, 0x02, 0x32, 0xE9, 0x38,
+ 0x58, 0x38, 0xAE, 0x70, 0xF5, 0x29, 0x63, 0x1F,
+ 0x3D, 0xEC, 0x7D, 0xB3, 0x20, 0x78, 0xB5, 0x77,
+ 0xFB, 0x2B, 0x78, 0xFB, 0xDC, 0xA4, 0xC0, 0x2A,
+ 0x76, 0x3F, 0x84, 0x00, 0x74, 0x0D, 0x66, 0x5F,
+ 0x2D, 0xBB, 0xE5, 0x41, 0x9D, 0x07, 0xBB, 0x99,
+ 0x14, 0x27, 0x4D, 0xEF, 0x9A, 0x28, 0x44, 0x9F,
+ 0x3F, 0x66, 0x20, 0x8C, 0xC6, 0xD6, 0x24, 0xCD,
+ 0x67, 0x7C, 0x42, 0x8E, 0xC6, 0xEF, 0x7F, 0x25,
+ 0x2D, 0x74, 0xCA, 0x81, 0xDB, 0x26, 0xAE, 0xCB,
+ 0xA7, 0x83, 0xFD, 0x95, 0x46, 0xC5, 0xBE, 0x5C,
+ 0xFC, 0x07, 0xC5, 0xFF, 0x34, 0x70, 0x82, 0x6E,
+ 0xC7, 0x90, 0xAF, 0xC8, 0x99, 0xAB, 0xA7, 0x4E,
+ 0x02, 0xC1, 0x92, 0x22, 0x05, 0xA8, 0x38, 0xF8,
+ 0x78, 0xA3, 0x23, 0x0E, 0xD6, 0x27, 0x27, 0xE4,
+ 0x55, 0xEF, 0x5A, 0xBE, 0x22, 0x1B, 0xF9, 0x00,
+ 0xC4, 0x02, 0x44, 0x28, 0xF0, 0x40, 0x16, 0x97,
+ 0x17, 0x6E, 0x1A, 0x66, 0x1B, 0x98, 0xD8, 0x89,
+ 0x69, 0xB1, 0x8F, 0x61, 0x30, 0xC9, 0xB4, 0x84,
+ 0x04, 0xDF, 0x5F, 0x72, 0xAA, 0xA7, 0xC5, 0x24,
+ 0xC6, 0x1E, 0x80, 0xEE, 0x3A, 0x06, 0xED, 0x8F,
+ 0xAA, 0x73, 0xED, 0x00, 0xBB, 0x08, 0xFA, 0xF8,
+ 0x68, 0x2A, 0xCE, 0x3B, 0xA1, 0x98, 0x9A, 0xD6,
+ 0x55, 0xB7, 0x93, 0xE2, 0xCA, 0x7A, 0x2C, 0xAD,
+ 0x2D, 0xC7, 0x13, 0x7C, 0x9C, 0x2F, 0xFD, 0x2E,
+ 0xB6, 0x61, 0xCB, 0xA0, 0x93, 0x39, 0xC8, 0x56,
+ 0xD5, 0xCE, 0xD3, 0x9F, 0xE5, 0x06, 0x7E, 0x7E,
+ 0xDE, 0x05, 0x2B, 0x4E, 0x14, 0xB7, 0xD1, 0xB3,
+ 0xF0, 0x3B, 0x17, 0xF3, 0xA2, 0x61, 0x64, 0x88,
+ 0x28, 0x41, 0xE4, 0x90, 0x5F, 0x04, 0x6A, 0x12,
+ 0x01, 0x56, 0x7B, 0x9F, 0x4C, 0x51, 0x33, 0x13,
+ 0x9B, 0x40, 0xDB, 0xBD, 0x78, 0x38, 0x54, 0x96,
+ 0x0B, 0x20, 0xA0, 0x8D, 0x55, 0xD4, 0xD6, 0x15,
+ 0xAD, 0x75, 0x71, 0x0F, 0xC3, 0xBB, 0x78, 0x10,
+ 0xB3, 0xA2, 0xAF, 0x7A, 0x01, 0x16, 0x4D, 0xDC,
+ 0xFC, 0xBC, 0xCA, 0x24, 0xEF, 0x47, 0xBE, 0xDD,
+ 0x4A, 0xF9, 0x64, 0xCA, 0xBA, 0xF5, 0x74, 0xD0,
+ 0x53, 0x70, 0x75, 0xD9, 0x21, 0x91, 0x23, 0xF0,
+ 0x68, 0x02, 0xFF, 0x90, 0xA8, 0xC5, 0xB5, 0x87,
+ 0x6C, 0x17, 0x73, 0x4C, 0x8C, 0xFC, 0xBC, 0x7C,
+ 0x5E, 0xAE, 0x98, 0x34, 0xCC, 0x7C, 0xDC, 0xB6,
+ 0x26, 0x5F, 0x82, 0x6E, 0xF0, 0x41, 0x21, 0x43,
+ 0x00, 0xCB, 0x58, 0x13, 0xEB, 0x9B, 0xDB, 0x1B,
+ 0x0A, 0x8F, 0x3A, 0xD4, 0x1F, 0xA9, 0x51, 0x98,
+ 0xBA, 0xA2, 0x04, 0xF2, 0xA2, 0x9B, 0x88, 0x2D,
+ 0x89, 0x72, 0x4C, 0xA3, 0xD6, 0x64, 0xE4, 0x2C,
+ 0xAC, 0x6A, 0x2C, 0x40, 0x98, 0x28, 0x7E, 0xFF,
+ 0x7F, 0xE6, 0xF8, 0x6B, 0x22, 0xF7, 0x94, 0xE5,
+ 0x07, 0xDF, 0x58, 0x7F, 0xA4, 0xAC, 0xC7, 0xC5,
+ 0x5E, 0x9D, 0x27, 0x66, 0x6E, 0x12, 0x52, 0x50,
+ 0x8B, 0x48, 0x3E, 0x72, 0xAA, 0xB8, 0xFB, 0x9B,
+ 0xB2, 0xD2, 0xA4, 0xE8, 0x30, 0x02, 0x41, 0x21,
+ 0x61, 0x9A, 0x2C, 0xD0, 0x80, 0x20, 0xD2, 0xB3,
+ 0x33, 0x78, 0x46, 0x0A, 0x50, 0x83, 0x43, 0x43,
+ 0xE3, 0x38, 0xAC, 0xE3, 0xBB, 0xCB, 0x8B, 0x4B,
+ 0x8B, 0x72, 0xD4, 0xFA, 0x86, 0x36, 0x16, 0xF4,
+ 0x54, 0xAD, 0x78, 0x94, 0x51, 0x11, 0x47, 0xC6,
+ 0x46, 0xFB, 0x79, 0x1D, 0x47, 0xF4, 0xB3, 0xB1,
+ 0x32, 0xCF, 0x1F, 0x4B, 0x99, 0x84, 0xE6, 0x9B,
+ 0x18, 0x0E, 0xBC, 0xF5, 0xB5, 0x27, 0x5A, 0x6A,
+ 0x42, 0xCA, 0xCE, 0x02, 0x21, 0x21, 0x8D, 0x5D,
+ 0x1F, 0x87, 0x17, 0xBB, 0x43, 0xF3, 0x01, 0xCB,
+ 0x47, 0x5C, 0xCA, 0xA6, 0xCE, 0xE7, 0x97, 0xC5,
+ 0x0F, 0xD8, 0x73, 0xEF, 0x37, 0x87, 0xFD, 0x3C,
+ 0xBC, 0x67, 0xD1, 0xBD, 0x65, 0xD5, 0x51, 0x9C,
+ 0x1E, 0xA5, 0x17, 0x7A, 0xA2, 0x12, 0x72, 0xB2,
+ 0x32, 0xE9, 0xEF, 0x8D, 0x57, 0x87, 0xCD, 0x0F,
+ 0x8F, 0x54, 0xE2, 0x8E, 0x56, 0xE6, 0x66, 0xB4,
+ 0x36, 0x8D, 0x27, 0x4B, 0x9B, 0x2B, 0x36, 0xF2,
+ 0x0C, 0xD3, 0xE1, 0x9F, 0x45, 0x95, 0x81, 0x52,
+ 0xD0, 0x6B, 0x45, 0x3A, 0xE0, 0x30, 0xF0, 0x23,
+ 0xA1, 0x1A, 0x74, 0x0C, 0xD6, 0x06, 0x7E, 0xAB,
+ 0x29, 0x92, 0x14, 0x6E, 0xB4, 0x64, 0x30, 0xE5,
+ 0x67, 0xDC, 0xD2, 0xAB, 0x71, 0xA1, 0xC1, 0x01,
+ 0x81, 0x5A, 0x1C, 0x8F, 0xA8, 0xE7, 0x87, 0x47,
+ 0xC7, 0x1C, 0x5A, 0xC9, 0xEE, 0xA1, 0xC1, 0x01,
+ 0x81, 0x5A, 0x1C, 0x8F, 0xA8, 0xE7, 0x87, 0x47,
+ 0xC7, 0x1C, 0x5A, 0xC9, 0xEE, 0xA1, 0xC1, 0x01,
+ 0x81, 0x5A, 0x1C, 0x8F, 0xA8, 0xE7, 0x87, 0x47,
+ 0xC7, 0x1C, 0x5A, 0xC9, 0xEE, 0xA1, 0xC1, 0x01,
+ 0x81, 0x5A, 0x1C, 0x8F, 0xA8, 0xE7, 0x87, 0x47,
+ 0xC7, 0x1C, 0x5A, 0xC9, 0xEE, 0xA1, 0xC1, 0x01,
+ 0x81, 0x5A, 0x1C, 0x8F, 0xA8, 0xE7, 0x97, 0x40,
+ 0xC2, 0x79, 0xEB, 0x90, 0x4A, 0x9A, 0xEE, 0x36,
+ 0xB4, 0x0F, 0x19, 0x62, 0xB8, 0x68, 0x08, 0xC8,
+ 0x48, 0x93, 0x25, 0x49, 0x91, 0x21, 0x41, 0x81,
+ 0x01, 0xDA, 0xA0, 0xD4, 0x0C, 0xDC, 0x6C, 0xB4,
+ 0x34, 0x8F, 0xC1, 0xB4, 0x6C, 0xBC, 0x30, 0xF0,
+ 0x70, 0xAB, 0x1D, 0x71, 0xA9, 0x19, 0x78, 0xB8,
+ 0x38, 0xE3, 0x54, 0x38, 0xE1, 0x51, 0x30, 0xF8,
+ 0x38, 0xE3, 0x54, 0x39, 0xE0, 0x51, 0x70, 0xA0,
+ 0x24, 0xFD, 0x6A, 0x02, 0xFB, 0x4F, 0x0E, 0x4A,
+ 0xDA, 0x43, 0xE4, 0x99, 0x50, 0xF1, 0xD8, 0x3A,
+ 0x9E, 0x67, 0x98, 0xE6, 0x77, 0xD5, 0xFC, 0x6E,
+ 0xD7, 0x1E, 0xFD, 0x80, 0x0D, 0xAC, 0x99, 0x4C,
+ 0x99, 0x53, 0x4F, 0x09, 0x7B, 0xE1, 0x2B, 0x41,
+ 0x6B, 0x9A, 0x79, 0x40, 0xCD, 0x28, 0x1D, 0x88,
+ 0x5D, 0x53, 0xB0, 0x09, 0x84, 0xE1, 0x2B, 0x01,
+ 0x2B, 0x1E, 0x02, 0x80, 0xF2, 0xAC, 0x7A, 0x17,
+ 0x21, 0x17, 0x17, 0x96, 0xF8, 0xA5, 0x73, 0x6E,
+ 0x35, 0x33, 0x6B, 0xE9, 0xDF, 0x81, 0x3F, 0x84,
+ 0xEB, 0x8D, 0xE5, 0x72, 0x74, 0x3F, 0xE1, 0xCE,
+ 0xB5, 0x93, 0xDB, 0x49, 0x6F, 0x21, 0xBF, 0x88,
+ 0xB7, 0x93, 0xDB, 0x48, 0x6E, 0x21, 0xBE, 0x81,
+ 0xFE, 0xDA, 0x58, 0x2D, 0xF5, 0x25, 0x7D, 0xA4,
+ 0x24, 0x9F, 0xD5, 0xA0, 0x78, 0xA8, 0xFC, 0x3C,
+ 0xBC, 0x67, 0xD1, 0xBD, 0x65, 0xD5, 0xB5, 0x75,
+ 0xF5, 0x2E, 0x98, 0xF4, 0x2C, 0x9C, 0xFC, 0x3C,
+ 0xBC, 0x67, 0xF9, 0x9C, 0x44, 0x94, 0xD0, 0x19,
+ 0x99, 0x22, 0x84, 0x58, 0x82, 0x32, 0x52, 0x88,
+ 0x08, 0xB3, 0x75, 0x18, 0xC0, 0x70, 0x6C, 0xAB,
+ 0x2B, 0x90, 0x9A, 0xFB, 0x21, 0xF1, 0xAD, 0x65,
+ 0xE5, 0x5E, 0xFC, 0x9E, 0x44, 0x94, 0x38, 0xF6,
+ 0x74, 0xCF, 0xED, 0x87, 0x5F, 0x8F, 0x4B, 0x84,
+ 0x06, 0xBD, 0x4F, 0x25, 0xFD, 0x2D, 0xC1, 0x0E,
+ 0x8C, 0x37, 0x71, 0x04, 0xDC, 0x0C, 0xB8, 0x77,
+ 0xF5, 0x4E, 0x48, 0x35, 0xEF, 0x3F, 0xE7, 0x2F,
+ 0xAF, 0x14, 0x82, 0xFC, 0x26, 0xF6, 0x2A, 0xED,
+ 0x6D, 0xD6, 0x34, 0x4A, 0x90, 0x40, 0xE8, 0x3A,
+ 0xB8, 0x03, 0x5D, 0x37, 0xEF, 0x3F, 0x3B, 0xE3,
+ 0x61, 0xDA, 0x2C, 0x4A, 0x92, 0x42, 0x14, 0x95,
+ 0x15, 0x4F, 0x7B, 0x11, 0x78, 0x48, 0x2E, 0xF2,
+ 0x78, 0x32, 0x05, 0x6F, 0x15, 0xEE, 0x8E, 0xC7,
+ 0x4E, 0xB0, 0x04, 0x68, 0x55, 0xE1, 0x81, 0xE4,
+ 0x66, 0xBD, 0xEE, 0x87, 0x5F, 0x0A, 0x62, 0xA2,
+ 0x07, 0xDF, 0x69, 0xA0, 0x71, 0xC1, 0x00, 0x43,
+ 0xC5, 0xAF, 0x9D, 0xF7, 0x8A, 0x60, 0x27, 0xFA,
+ 0x8A, 0x51, 0xD1, 0xFC, 0x24, 0xA5, 0x40, 0x86,
+ 0x27, 0x7A, 0xCA, 0x8F, 0x84, 0x29, 0xB9, 0x79,
+ 0xF9, 0x22, 0xA2, 0x8F, 0x57, 0xD6, 0x31, 0xF7,
+ 0x56, 0x05, 0xB5, 0xF0, 0x6B, 0xC6, 0x56, 0x96,
+ 0x16, 0xCD, 0x4D, 0x60, 0xB8, 0x39, 0xDC, 0x1A,
+ 0xBB, 0xE9, 0x59, 0x1C, 0x57, 0xFA, 0x6A, 0xAA,
+ 0x2A, 0xF1, 0x71, 0x5C, 0x84, 0x15, 0xF8, 0x3E,
+ 0x8F, 0xD8, 0x68, 0x95, 0xC7, 0x71, 0x90, 0xDB,
+ 0x5D, 0x0F, 0xF0, 0xB5, 0x6E, 0xC3, 0x53, 0x93,
+ 0x13, 0xC8, 0x48, 0x65, 0xBD, 0x9C, 0x72, 0xB4,
+ 0x38, 0xEB, 0xDF, 0xFA, 0x22, 0xF7, 0x96, 0x56,
+ 0x77, 0x3C, 0x8C, 0x51, 0x0E, 0xB8, 0x19, 0x56,
+ 0xD0, 0xC2, 0x7F, 0xBA, 0x39, 0x94, 0x04, 0xC4,
+ 0x44, 0x9F, 0x1F, 0x32, 0xEA, 0x6B, 0x9A, 0x5C,
+ 0xFD, 0xB4, 0x04, 0x41, 0x8A, 0x27, 0xB7, 0x77,
+ 0xF7, 0x2C, 0xAC, 0x81, 0x59, 0x68, 0x9C, 0x5A,
+ 0xEB, 0xA3, 0x13, 0x5E, 0x13, 0xA5, 0xEC, 0x0F,
+ 0x06, 0x8E, 0x25, 0xB9, 0x61, 0xD1, 0x87, 0x06,
+ 0x86, 0xCC, 0xEC, 0x86, 0xDF, 0xF8, 0x9E, 0xD7,
+ 0x7E, 0xC0, 0x76, 0x1A, 0xDF, 0x9F, 0xC9, 0x48,
+ 0xC8, 0xB2, 0x9C, 0xF6, 0x9C, 0x8C, 0x60, 0x08,
+ 0x82, 0x79, 0xAE, 0xC2, 0x92, 0x08, 0xD2, 0xA8,
+ 0xB4, 0x77, 0xCD, 0xBD, 0x69, 0x54, 0xD6, 0x3C,
+ 0x94, 0x8F, 0x19, 0x75, 0x7F, 0x81, 0xED, 0xEF,
+ 0x24, 0xD8, 0x4B, 0x80, 0x7B, 0xEB, 0x6D, 0xBE,
+ 0x2E, 0xD5, 0x63, 0x12, 0x3A, 0x8A, 0xEA, 0x2A,
+ 0xAA, 0x71, 0xC7, 0xAB, 0x73, 0xC3, 0xA3, 0x63,
+ 0xE3, 0x38, 0x8F, 0xE3, 0x3F, 0x8F, 0x8B, 0x51,
+ 0xD3, 0x68,
+};
+
+static unsigned char vfs5011_prepare_02[] = { /* 2565 B */
+ 0x02, 0xF0, 0x00, 0x14, 0x00, 0x03, 0x00, 0x09,
+ 0x00, 0x04, 0x20, 0x04, 0x30, 0x00, 0x00, 0x00,
+ 0x00, 0x04, 0x03, 0x00, 0x09, 0x00, 0x18, 0x20,
+ 0x04, 0x30, 0x00, 0x00, 0x00, 0x00, 0x04, 0x03,
+ 0x00, 0x09, 0x00, 0x20, 0x20, 0x04, 0x30, 0x08,
+ 0x00, 0x80, 0x00, 0x04, 0x03, 0x00, 0x09, 0x00,
+ 0x24, 0x20, 0x04, 0x30, 0x00, 0x00, 0xFF, 0x01,
+ 0x04, 0x03, 0x00, 0x09, 0x00, 0x2C, 0x20, 0x04,
+ 0x30, 0x01, 0x00, 0x00, 0x00, 0x04, 0x03, 0x00,
+ 0x09, 0x00, 0x40, 0x20, 0x04, 0x30, 0xFF, 0x03,
+ 0x00, 0x00, 0x04, 0x03, 0x00, 0x09, 0x00, 0x44,
+ 0x20, 0x04, 0x30, 0xE5, 0x03, 0x00, 0x00, 0x04,
+ 0x03, 0x00, 0x09, 0x00, 0x48, 0x20, 0x04, 0x30,
+ 0xEA, 0x03, 0x00, 0x00, 0x04, 0x03, 0x00, 0x09,
+ 0x00, 0x4C, 0x20, 0x04, 0x30, 0x0A, 0x00, 0x00,
+ 0x00, 0x04, 0x03, 0x00, 0x09, 0x00, 0x54, 0x20,
+ 0x04, 0x30, 0x01, 0xDE, 0x01, 0x00, 0x04, 0x03,
+ 0x00, 0x09, 0x00, 0x00, 0x21, 0x04, 0x30, 0x00,
+ 0x00, 0x00, 0x00, 0x04, 0x03, 0x00, 0x09, 0x00,
+ 0x04, 0x21, 0x04, 0x30, 0x01, 0x00, 0x00, 0x00,
+ 0x04, 0x03, 0x00, 0x09, 0x00, 0x08, 0x21, 0x04,
+ 0x30, 0x02, 0x00, 0x00, 0x00, 0x04, 0x03, 0x00,
+ 0x09, 0x00, 0x0C, 0x21, 0x04, 0x30, 0x01, 0x00,
+ 0x00, 0x00, 0x04, 0x03, 0x00, 0x09, 0x00, 0x10,
+ 0x21, 0x04, 0x30, 0x01, 0x00, 0x00, 0x00, 0x04,
+ 0x03, 0x00, 0x09, 0x00, 0x14, 0x21, 0x04, 0x30,
+ 0x01, 0x00, 0x00, 0x00, 0x04, 0x03, 0x00, 0x09,
+ 0x00, 0x18, 0x21, 0x04, 0x30, 0x01, 0x00, 0x00,
+ 0x00, 0x04, 0x03, 0x00, 0x09, 0x00, 0x1C, 0x21,
+ 0x04, 0x30, 0x1F, 0x00, 0x00, 0x00, 0x04, 0x03,
+ 0x00, 0x09, 0x00, 0x20, 0x21, 0x04, 0x30, 0x08,
+ 0x00, 0x00, 0x00, 0x04, 0x03, 0x00, 0x09, 0x00,
+ 0x40, 0x21, 0x04, 0x30, 0x01, 0x00, 0x00, 0x00,
+ 0x04, 0x03, 0x00, 0x09, 0x00, 0x44, 0x21, 0x04,
+ 0x30, 0x01, 0x00, 0x00, 0x00, 0x04, 0x03, 0x00,
+ 0x09, 0x00, 0x48, 0x21, 0x04, 0x30, 0x01, 0x00,
+ 0x00, 0x00, 0x04, 0x03, 0x00, 0x09, 0x00, 0x4C,
+ 0x21, 0x04, 0x30, 0x01, 0x00, 0x00, 0x00, 0x04,
+ 0x03, 0x00, 0x09, 0x00, 0x50, 0x21, 0x04, 0x30,
+ 0x01, 0x00, 0x00, 0x00, 0x04, 0x03, 0x00, 0x09,
+ 0x00, 0x54, 0x21, 0x04, 0x30, 0x01, 0x00, 0x00,
+ 0x00, 0x04, 0x03, 0x00, 0x09, 0x00, 0x58, 0x21,
+ 0x04, 0x30, 0x01, 0x00, 0x00, 0x00, 0x04, 0x03,
+ 0x00, 0x09, 0x00, 0x5C, 0x21, 0x04, 0x30, 0x1F,
+ 0x00, 0x00, 0x00, 0x04, 0x03, 0x00, 0x09, 0x00,
+ 0x60, 0x21, 0x04, 0x30, 0x08, 0x00, 0x00, 0x00,
+ 0x04, 0x03, 0x00, 0x09, 0x00, 0x80, 0x21, 0x04,
+ 0x30, 0x30, 0x00, 0x00, 0x00, 0x04, 0x03, 0x00,
+ 0x09, 0x00, 0x84, 0x21, 0x04, 0x30, 0x01, 0x00,
+ 0x00, 0x00, 0x04, 0x03, 0x00, 0x09, 0x00, 0x88,
+ 0x21, 0x04, 0x30, 0x01, 0x00, 0x00, 0x00, 0x04,
+ 0x03, 0x00, 0x09, 0x00, 0x8C, 0x21, 0x04, 0x30,
+ 0x01, 0x00, 0x00, 0x00, 0x04, 0x03, 0x00, 0x09,
+ 0x00, 0x90, 0x21, 0x04, 0x30, 0x00, 0x00, 0x00,
+ 0x00, 0x04, 0x03, 0x00, 0x09, 0x00, 0x94, 0x21,
+ 0x04, 0x30, 0x01, 0x00, 0x00, 0x00, 0x04, 0x03,
+ 0x00, 0x09, 0x00, 0x98, 0x21, 0x04, 0x30, 0x00,
+ 0x00, 0x00, 0x00, 0x04, 0x03, 0x00, 0x09, 0x00,
+ 0x9C, 0x21, 0x04, 0x30, 0x1F, 0x00, 0x00, 0x00,
+ 0x04, 0x03, 0x00, 0x09, 0x00, 0xA0, 0x21, 0x04,
+ 0x30, 0x04, 0x00, 0x00, 0x00, 0x04, 0x03, 0x00,
+ 0x09, 0x00, 0xC0, 0x21, 0x04, 0x30, 0x30, 0x00,
+ 0x00, 0x00, 0x04, 0x03, 0x00, 0x09, 0x00, 0xC4,
+ 0x21, 0x04, 0x30, 0x01, 0x00, 0x00, 0x00, 0x04,
+ 0x03, 0x00, 0x09, 0x00, 0xC8, 0x21, 0x04, 0x30,
+ 0x01, 0x00, 0x00, 0x00, 0x04, 0x03, 0x00, 0x09,
+ 0x00, 0xCC, 0x21, 0x04, 0x30, 0x01, 0x00, 0x00,
+ 0x00, 0x04, 0x03, 0x00, 0x09, 0x00, 0xD0, 0x21,
+ 0x04, 0x30, 0x00, 0x00, 0x00, 0x00, 0x04, 0x03,
+ 0x00, 0x09, 0x00, 0xD4, 0x21, 0x04, 0x30, 0x01,
+ 0x00, 0x00, 0x00, 0x04, 0x03, 0x00, 0x09, 0x00,
+ 0xD8, 0x21, 0x04, 0x30, 0x00, 0x00, 0x00, 0x00,
+ 0x04, 0x03, 0x00, 0x09, 0x00, 0xDC, 0x21, 0x04,
+ 0x30, 0x1F, 0x00, 0x00, 0x00, 0x04, 0x03, 0x00,
+ 0x09, 0x00, 0xE0, 0x21, 0x04, 0x30, 0x04, 0x00,
+ 0x00, 0x00, 0x04, 0x03, 0x00, 0x09, 0x00, 0xA0,
+ 0x20, 0x04, 0x30, 0xEF, 0xE1, 0x00, 0x00, 0x04,
+ 0x03, 0x00, 0x09, 0x00, 0xA4, 0x20, 0x04, 0x30,
+ 0x00, 0x00, 0x00, 0x00, 0x04, 0x03, 0x00, 0x09,
+ 0x00, 0xB0, 0x20, 0x04, 0x30, 0x00, 0x00, 0x00,
+ 0x00, 0x04, 0x03, 0x00, 0x09, 0x00, 0xC4, 0x20,
+ 0x04, 0x30, 0x14, 0x00, 0x00, 0x00, 0x04, 0x03,
+ 0x00, 0x09, 0x00, 0xC8, 0x20, 0x04, 0x30, 0x00,
+ 0x00, 0x00, 0x00, 0x04, 0x03, 0x00, 0x09, 0x00,
+ 0xCC, 0x20, 0x04, 0x30, 0x20, 0x00, 0x00, 0x00,
+ 0x04, 0x03, 0x00, 0x09, 0x00, 0x50, 0x20, 0x04,
+ 0x30, 0x00, 0x00, 0x74, 0x01, 0x04, 0x03, 0x00,
+ 0x09, 0x00, 0xA8, 0x20, 0x04, 0x30, 0xFE, 0x21,
+ 0x74, 0x01, 0x04, 0x03, 0x00, 0x09, 0x00, 0x04,
+ 0x00, 0x00, 0x38, 0x00, 0x07, 0x00, 0x00, 0x04,
+ 0x03, 0x00, 0x09, 0x00, 0x08, 0x00, 0x00, 0x38,
+ 0x00, 0x15, 0x00, 0x00, 0x04, 0x03, 0x00, 0x09,
+ 0x00, 0x0C, 0x00, 0x00, 0x38, 0x01, 0x03, 0x02,
+ 0x00, 0x04, 0x03, 0x00, 0x09, 0x00, 0x10, 0x00,
+ 0x00, 0x38, 0x01, 0x07, 0x02, 0x00, 0x04, 0x03,
+ 0x00, 0x09, 0x00, 0x14, 0x00, 0x00, 0x38, 0x0C,
+ 0x0C, 0x05, 0x00, 0x04, 0x02, 0x00, 0x80, 0x05,
+ 0xFF, 0xF9, 0x87, 0x20, 0xBB, 0xF8, 0x87, 0x00,
+ 0xBB, 0xF8, 0x87, 0x00, 0xBB, 0xF8, 0x87, 0x00,
+ 0xBB, 0xF8, 0x87, 0x00, 0xBB, 0xF8, 0x87, 0x00,
+ 0xBB, 0xF8, 0x87, 0x00, 0xBB, 0xF8, 0x07, 0x20,
+ 0xBA, 0xF8, 0x07, 0x20, 0xB9, 0xF8, 0x07, 0x20,
+ 0xB8, 0xF8, 0x07, 0x20, 0xB7, 0xF8, 0x07, 0x20,
+ 0xB6, 0xF8, 0x07, 0x20, 0xB5, 0xF8, 0x07, 0x20,
+ 0xB4, 0xF8, 0x07, 0x20, 0xB3, 0xF8, 0x07, 0x20,
+ 0xB2, 0xF8, 0x07, 0x20, 0xB1, 0xF8, 0x07, 0x22,
+ 0xB0, 0xF8, 0x07, 0x22, 0xAF, 0xF8, 0x07, 0x22,
+ 0xAE, 0xF8, 0x07, 0x22, 0xAD, 0xF8, 0x07, 0x22,
+ 0xAC, 0xF8, 0x07, 0x22, 0xAB, 0xF8, 0x07, 0x22,
+ 0xAA, 0xF8, 0x07, 0x22, 0xA9, 0xF8, 0x07, 0x22,
+ 0xA8, 0xF8, 0x07, 0x22, 0xA7, 0xF8, 0x07, 0x22,
+ 0xA6, 0xF8, 0x07, 0x22, 0xA5, 0xF8, 0x07, 0x22,
+ 0xA4, 0xF8, 0x07, 0x22, 0xA3, 0xF8, 0x07, 0x22,
+ 0xA2, 0xF8, 0x07, 0x22, 0xA1, 0xF8, 0x07, 0x22,
+ 0xA0, 0xF8, 0x07, 0x22, 0x9F, 0xF8, 0x07, 0x22,
+ 0x9E, 0xF8, 0x07, 0x22, 0x9D, 0xF8, 0x07, 0x22,
+ 0x9C, 0xF8, 0x07, 0x22, 0x9B, 0xF8, 0x07, 0x22,
+ 0x9A, 0xF8, 0x07, 0x22, 0x99, 0xF8, 0x07, 0x22,
+ 0x98, 0xF8, 0x07, 0x22, 0x97, 0xF8, 0x07, 0x22,
+ 0x96, 0xF8, 0x07, 0x22, 0x95, 0xF8, 0x07, 0x22,
+ 0x94, 0xF8, 0x07, 0x22, 0x93, 0xF8, 0x07, 0x22,
+ 0x92, 0xF8, 0x07, 0x22, 0x91, 0xF8, 0x07, 0x22,
+ 0x90, 0xF8, 0x07, 0x22, 0x8F, 0xF8, 0x07, 0x22,
+ 0x8E, 0xF8, 0x07, 0x22, 0x8D, 0xF8, 0x07, 0x22,
+ 0x8C, 0xF8, 0x07, 0x22, 0x8B, 0xF8, 0x07, 0x22,
+ 0x8A, 0xF8, 0x07, 0x22, 0x89, 0xF8, 0x07, 0x22,
+ 0x88, 0xF8, 0x07, 0x22, 0x87, 0xF8, 0x07, 0x22,
+ 0x86, 0xF8, 0x07, 0x22, 0x85, 0xF8, 0x07, 0x22,
+ 0x84, 0xF8, 0x07, 0x22, 0x83, 0xF8, 0x07, 0x22,
+ 0x82, 0xF8, 0x07, 0x22, 0x81, 0xF8, 0x07, 0x22,
+ 0x80, 0xF8, 0x07, 0x22, 0x7F, 0xF8, 0x07, 0x22,
+ 0x7E, 0xF8, 0x07, 0x22, 0x7D, 0xF8, 0x07, 0x22,
+ 0x7C, 0xF8, 0x07, 0x22, 0x7B, 0xF8, 0x07, 0x22,
+ 0x7A, 0xF8, 0x07, 0x22, 0x79, 0xF8, 0x07, 0x22,
+ 0x78, 0xF8, 0x07, 0x22, 0x77, 0xF8, 0x07, 0x22,
+ 0x76, 0xF8, 0x07, 0x22, 0x75, 0xF8, 0x07, 0x22,
+ 0x74, 0xF8, 0x07, 0x22, 0x73, 0xF8, 0x07, 0x22,
+ 0x72, 0xF8, 0x07, 0x22, 0x71, 0xF8, 0x07, 0x22,
+ 0x70, 0xF8, 0x07, 0x22, 0x6F, 0xF8, 0x07, 0x22,
+ 0x6E, 0xF8, 0x07, 0x22, 0x6D, 0xF8, 0x07, 0x22,
+ 0x6C, 0xF8, 0x07, 0x22, 0x6B, 0xF8, 0x07, 0x22,
+ 0x6A, 0xF8, 0x07, 0x22, 0x69, 0xF8, 0x07, 0x22,
+ 0x68, 0xF8, 0x07, 0x22, 0x67, 0xF8, 0x07, 0x22,
+ 0x66, 0xF8, 0x07, 0x22, 0x65, 0xF8, 0x07, 0x22,
+ 0x64, 0xF8, 0x07, 0x22, 0x63, 0xF8, 0x07, 0x22,
+ 0x62, 0xF8, 0x07, 0x22, 0x61, 0xF8, 0x07, 0x22,
+ 0x60, 0xF8, 0x07, 0x22, 0x5F, 0xF8, 0x07, 0x22,
+ 0x5E, 0xF8, 0x07, 0x22, 0x5D, 0xF8, 0x07, 0x22,
+ 0x5C, 0xF8, 0x07, 0x22, 0x5B, 0xF8, 0x07, 0x22,
+ 0x5A, 0xF8, 0x07, 0x22, 0x59, 0xF8, 0x07, 0x22,
+ 0x58, 0xF8, 0x07, 0x22, 0x57, 0xF8, 0x07, 0x22,
+ 0x56, 0xF8, 0x07, 0x22, 0x55, 0xF8, 0x07, 0x22,
+ 0x54, 0xF8, 0x07, 0x22, 0x53, 0xF8, 0x07, 0x22,
+ 0x52, 0xF8, 0x07, 0x22, 0x51, 0xF8, 0x07, 0x22,
+ 0x50, 0xF8, 0x07, 0x22, 0x4F, 0xF8, 0x07, 0x22,
+ 0x4E, 0xF8, 0x07, 0x22, 0x4D, 0xF8, 0x07, 0x22,
+ 0x4C, 0xF8, 0x07, 0x22, 0x4B, 0xF8, 0x07, 0x22,
+ 0x4A, 0xF8, 0x07, 0x22, 0x49, 0xF8, 0x07, 0x22,
+ 0x48, 0xF8, 0x07, 0x22, 0x47, 0xF8, 0x07, 0x22,
+ 0x46, 0xF8, 0x07, 0x22, 0x45, 0xF8, 0x07, 0x22,
+ 0x44, 0xF8, 0x07, 0x22, 0x43, 0xF8, 0x07, 0x22,
+ 0x42, 0xF8, 0x07, 0x22, 0x41, 0xF8, 0x07, 0x22,
+ 0x40, 0xF8, 0x07, 0x22, 0x3F, 0xF8, 0x07, 0x22,
+ 0x3E, 0xF8, 0x07, 0x22, 0x3D, 0xF8, 0x07, 0x22,
+ 0x3C, 0xF8, 0x07, 0x22, 0x3B, 0xF8, 0x07, 0x22,
+ 0x3A, 0xF8, 0x07, 0x22, 0x39, 0xF8, 0x07, 0x22,
+ 0x38, 0xF8, 0x07, 0x22, 0x37, 0xF8, 0x07, 0x22,
+ 0x36, 0xF8, 0x07, 0x22, 0x35, 0xF8, 0x07, 0x22,
+ 0x34, 0xF8, 0x07, 0x22, 0x33, 0xF8, 0x07, 0x22,
+ 0x32, 0xF8, 0x07, 0x22, 0x31, 0xF8, 0x07, 0x22,
+ 0x30, 0xF8, 0x07, 0x22, 0x2F, 0xF8, 0x07, 0x22,
+ 0x2E, 0xF8, 0x07, 0x22, 0x2D, 0xF8, 0x07, 0x22,
+ 0x2C, 0xF8, 0x07, 0x22, 0x2B, 0xF8, 0x07, 0x22,
+ 0x2A, 0xF8, 0x07, 0x22, 0x29, 0xF8, 0x07, 0x22,
+ 0x28, 0xF8, 0x07, 0x22, 0x27, 0xF8, 0x07, 0x22,
+ 0x26, 0xF8, 0x07, 0x22, 0x25, 0xF8, 0x07, 0x22,
+ 0x24, 0xF8, 0x07, 0x22, 0x23, 0xF8, 0x07, 0x20,
+ 0x22, 0xF8, 0x07, 0x20, 0x21, 0xF8, 0x07, 0x20,
+ 0x20, 0xF8, 0x07, 0x20, 0x1F, 0xF8, 0x07, 0x20,
+ 0x1E, 0xF8, 0x07, 0x20, 0x1D, 0xF8, 0x07, 0x20,
+ 0x1C, 0xF8, 0x07, 0x20, 0x1C, 0xF8, 0x07, 0x00,
+ 0xD7, 0xF8, 0xA7, 0x00, 0xD7, 0xF8, 0xA7, 0x00,
+ 0xD7, 0xF8, 0xA7, 0x00, 0xD7, 0xF8, 0xA7, 0x00,
+ 0xD7, 0xF8, 0xA7, 0x00, 0xD7, 0xF8, 0xA7, 0x00,
+ 0xD8, 0xF8, 0x27, 0x20, 0xD9, 0xF8, 0x27, 0x20,
+ 0xDA, 0xF8, 0x27, 0x20, 0xDB, 0xF8, 0x27, 0x20,
+ 0xDC, 0xF8, 0x27, 0x20, 0xDD, 0xF8, 0x27, 0x20,
+ 0xDE, 0xF8, 0x27, 0x20, 0xDF, 0xF8, 0x27, 0x20,
+ 0xE0, 0xF8, 0x27, 0x20, 0xE1, 0xF8, 0x27, 0x20,
+ 0xE2, 0xF8, 0x27, 0x20, 0xE3, 0xF8, 0x27, 0x20,
+ 0xE4, 0xF8, 0x27, 0x20, 0xE5, 0xF8, 0x27, 0x20,
+ 0xE6, 0xF8, 0x27, 0x20, 0xE7, 0xF8, 0x27, 0x20,
+ 0xE8, 0xF8, 0x27, 0x20, 0xE9, 0xF8, 0x27, 0x20,
+ 0xEA, 0xF8, 0x27, 0x20, 0xEB, 0xF8, 0x27, 0x20,
+ 0xEC, 0xF8, 0x27, 0x20, 0xED, 0xF8, 0x27, 0x20,
+ 0xEE, 0xF8, 0x27, 0x20, 0xEF, 0xF8, 0x27, 0x20,
+ 0xF0, 0xF8, 0x27, 0x20, 0xF1, 0xF8, 0x27, 0x20,
+ 0xF2, 0xF8, 0x27, 0x20, 0xF3, 0xF8, 0x27, 0x20,
+ 0xF4, 0xF8, 0x27, 0x20, 0xF5, 0xF8, 0x27, 0x20,
+ 0xF6, 0xF8, 0x27, 0x20, 0xF7, 0xF8, 0x27, 0x20,
+ 0xF8, 0xF8, 0x27, 0x20, 0xF9, 0xF8, 0x27, 0x20,
+ 0xFA, 0xF8, 0x27, 0x20, 0xFB, 0xF8, 0x27, 0x20,
+ 0xFC, 0xF8, 0x27, 0x20, 0xFD, 0xF8, 0x27, 0x20,
+ 0xFE, 0xF8, 0x27, 0x20, 0xFF, 0xF8, 0x27, 0x20,
+ 0x00, 0xF9, 0x27, 0x20, 0xD7, 0xF8, 0x27, 0x20,
+ 0x00, 0xF8, 0x27, 0x20, 0x01, 0xF8, 0x27, 0x20,
+ 0x02, 0xF8, 0x27, 0x20, 0x03, 0xF8, 0x27, 0x20,
+ 0x04, 0xF8, 0x27, 0x20, 0x05, 0xF8, 0x27, 0x20,
+ 0x06, 0xF8, 0x27, 0x20, 0x07, 0xF8, 0x27, 0x20,
+ 0x08, 0xF8, 0x27, 0x20, 0x09, 0xF8, 0x27, 0x20,
+ 0x0A, 0xF8, 0x27, 0x20, 0x0B, 0xF8, 0x27, 0x20,
+ 0x0C, 0xF8, 0x27, 0x20, 0x0D, 0xF8, 0x27, 0x20,
+ 0x0E, 0xF8, 0x27, 0x20, 0x0F, 0xF8, 0x27, 0x20,
+ 0x10, 0xF8, 0x27, 0x20, 0x11, 0xF8, 0x27, 0x20,
+ 0x12, 0xF8, 0x27, 0x20, 0x13, 0xF8, 0x27, 0x20,
+ 0x14, 0xF8, 0x27, 0x20, 0x15, 0xF8, 0x27, 0x20,
+ 0x15, 0xF8, 0x27, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x0A, 0x00, 0x08, 0x00, 0x10, 0x03, 0x18, 0x1C,
+ 0x10, 0x03, 0x18, 0x1C, 0x03, 0x00, 0x09, 0x00,
+ 0x00, 0x20, 0x04, 0x30, 0x80, 0x00, 0x00, 0x00,
+ 0x04, 0x17, 0x00, 0x00, 0x00, 0x05, 0x00, 0x0E,
+ 0x00, 0x0C, 0x20, 0xFD, 0x00, 0xFF, 0xFF, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x05,
+ 0x00, 0x0E, 0x00, 0x10, 0x20, 0xFD, 0x00, 0xFF,
+ 0xFF, 0x00, 0x00, 0x00, 0x00, 0x02, 0x05, 0x00,
+ 0x00, 0x03, 0x00, 0x09, 0x00, 0x04, 0x21, 0x04,
+ 0x30, 0x01, 0x00, 0x00, 0x00, 0x04, 0x03, 0x00,
+ 0x09, 0x00, 0x08, 0x21, 0x04, 0x30, 0x01, 0x00,
+ 0x00, 0x00, 0x04, 0x03, 0x00, 0x09, 0x00, 0x0C,
+ 0x21, 0x04, 0x30, 0x01, 0x00, 0x00, 0x00, 0x04,
+ 0x03, 0x00, 0x09, 0x00, 0x10, 0x21, 0x04, 0x30,
+ 0x01, 0x00, 0x00, 0x00, 0x04, 0x03, 0x00, 0x09,
+ 0x00, 0x14, 0x21, 0x04, 0x30, 0x01, 0x00, 0x00,
+ 0x00, 0x04, 0x03, 0x00, 0x09, 0x00, 0x18, 0x21,
+ 0x04, 0x30, 0x01, 0x00, 0x00, 0x00, 0x04, 0x03,
+ 0x00, 0x09, 0x00, 0x44, 0x21, 0x04, 0x30, 0x01,
+ 0x00, 0x00, 0x00, 0x04, 0x03, 0x00, 0x09, 0x00,
+ 0x48, 0x21, 0x04, 0x30, 0x01, 0x00, 0x00, 0x00,
+ 0x04, 0x03, 0x00, 0x09, 0x00, 0x4C, 0x21, 0x04,
+ 0x30, 0x01, 0x00, 0x00, 0x00, 0x04, 0x03, 0x00,
+ 0x09, 0x00, 0x50, 0x21, 0x04, 0x30, 0x01, 0x00,
+ 0x00, 0x00, 0x04, 0x03, 0x00, 0x09, 0x00, 0x54,
+ 0x21, 0x04, 0x30, 0x01, 0x00, 0x00, 0x00, 0x04,
+ 0x03, 0x00, 0x09, 0x00, 0x58, 0x21, 0x04, 0x30,
+ 0x01, 0x00, 0x00, 0x00, 0x04, 0x03, 0x00, 0x09,
+ 0x00, 0xC8, 0x20, 0x04, 0x30, 0x04, 0x00, 0x00,
+ 0x00, 0x04, 0x05, 0x00, 0x0E, 0x00, 0x14, 0x20,
+ 0xFF, 0xFF, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x84, 0x00, 0x03, 0x00, 0x09, 0x00,
+ 0x84, 0x21, 0x04, 0x30, 0x01, 0x00, 0x00, 0x00,
+ 0x04, 0x03, 0x00, 0x09, 0x00, 0x88, 0x21, 0x04,
+ 0x30, 0x01, 0x00, 0x00, 0x00, 0x04, 0x03, 0x00,
+ 0x09, 0x00, 0x8C, 0x21, 0x04, 0x30, 0x01, 0x00,
+ 0x00, 0x00, 0x04, 0x03, 0x00, 0x09, 0x00, 0x90,
+ 0x21, 0x04, 0x30, 0x01, 0x00, 0x00, 0x00, 0x04,
+ 0x03, 0x00, 0x09, 0x00, 0x94, 0x21, 0x04, 0x30,
+ 0x01, 0x00, 0x00, 0x00, 0x04, 0x03, 0x00, 0x09,
+ 0x00, 0x98, 0x21, 0x04, 0x30, 0x00, 0x00, 0x00,
+ 0x00, 0x04, 0x03, 0x00, 0x09, 0x00, 0xA0, 0x21,
+ 0x04, 0x30, 0x00, 0x00, 0x00, 0x00, 0x04, 0x03,
+ 0x00, 0x09, 0x00, 0x20, 0x21, 0x04, 0x30, 0x07,
+ 0x00, 0x00, 0x00, 0x04, 0x03, 0x00, 0x09, 0x00,
+ 0x60, 0x21, 0x04, 0x30, 0x07, 0x00, 0x00, 0x00,
+ 0x04, 0x15, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x20, 0x28, 0x00, 0x00,
+};
+
+static unsigned char vfs5011_prepare_03[] = { /* 117 B */
+ 0x2A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x01, 0xFF, 0x00, 0x00, 0xFF, 0xF4, 0x01, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00,
+ 0x00, 0x00, 0x00, 0xF4, 0x01, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x20, 0xBF, 0x02, 0x00,
+};
+
+static unsigned char vfs5011_prepare_04[] = { /* 2903 B */
+ 0x02, 0xF0, 0x00, 0x00, 0x00, 0x03, 0x00, 0x09,
+ 0x00, 0x04, 0x20, 0x04, 0x30, 0x00, 0x00, 0x00,
+ 0x00, 0x04, 0x03, 0x00, 0x09, 0x00, 0x18, 0x20,
+ 0x04, 0x30, 0x00, 0x00, 0x00, 0x00, 0x04, 0x03,
+ 0x00, 0x09, 0x00, 0x20, 0x20, 0x04, 0x30, 0x08,
+ 0x00, 0x80, 0x00, 0x04, 0x03, 0x00, 0x09, 0x00,
+ 0x24, 0x20, 0x04, 0x30, 0x00, 0x00, 0xFF, 0x01,
+ 0x04, 0x03, 0x00, 0x09, 0x00, 0x2C, 0x20, 0x04,
+ 0x30, 0x01, 0x00, 0x00, 0x00, 0x04, 0x03, 0x00,
+ 0x09, 0x00, 0x40, 0x20, 0x04, 0x30, 0xFF, 0x03,
+ 0x00, 0x00, 0x04, 0x03, 0x00, 0x09, 0x00, 0x44,
+ 0x20, 0x04, 0x30, 0xE5, 0x03, 0x00, 0x00, 0x04,
+ 0x03, 0x00, 0x09, 0x00, 0x48, 0x20, 0x04, 0x30,
+ 0xEA, 0x03, 0x00, 0x00, 0x04, 0x03, 0x00, 0x09,
+ 0x00, 0x4C, 0x20, 0x04, 0x30, 0x0A, 0x00, 0x00,
+ 0x00, 0x04, 0x03, 0x00, 0x09, 0x00, 0x54, 0x20,
+ 0x04, 0x30, 0x01, 0xDE, 0x01, 0x00, 0x04, 0x03,
+ 0x00, 0x09, 0x00, 0x00, 0x21, 0x04, 0x30, 0x00,
+ 0x00, 0x00, 0x00, 0x04, 0x03, 0x00, 0x09, 0x00,
+ 0x04, 0x21, 0x04, 0x30, 0x01, 0x00, 0x00, 0x00,
+ 0x04, 0x03, 0x00, 0x09, 0x00, 0x08, 0x21, 0x04,
+ 0x30, 0x02, 0x00, 0x00, 0x00, 0x04, 0x03, 0x00,
+ 0x09, 0x00, 0x0C, 0x21, 0x04, 0x30, 0x01, 0x00,
+ 0x00, 0x00, 0x04, 0x03, 0x00, 0x09, 0x00, 0x10,
+ 0x21, 0x04, 0x30, 0x01, 0x00, 0x00, 0x00, 0x04,
+ 0x03, 0x00, 0x09, 0x00, 0x14, 0x21, 0x04, 0x30,
+ 0x01, 0x00, 0x00, 0x00, 0x04, 0x03, 0x00, 0x09,
+ 0x00, 0x18, 0x21, 0x04, 0x30, 0x01, 0x00, 0x00,
+ 0x00, 0x04, 0x03, 0x00, 0x09, 0x00, 0x1C, 0x21,
+ 0x04, 0x30, 0x1F, 0x00, 0x00, 0x00, 0x04, 0x03,
+ 0x00, 0x09, 0x00, 0x20, 0x21, 0x04, 0x30, 0x08,
+ 0x00, 0x00, 0x00, 0x04, 0x03, 0x00, 0x09, 0x00,
+ 0x40, 0x21, 0x04, 0x30, 0x01, 0x00, 0x00, 0x00,
+ 0x04, 0x03, 0x00, 0x09, 0x00, 0x44, 0x21, 0x04,
+ 0x30, 0x01, 0x00, 0x00, 0x00, 0x04, 0x03, 0x00,
+ 0x09, 0x00, 0x48, 0x21, 0x04, 0x30, 0x01, 0x00,
+ 0x00, 0x00, 0x04, 0x03, 0x00, 0x09, 0x00, 0x4C,
+ 0x21, 0x04, 0x30, 0x01, 0x00, 0x00, 0x00, 0x04,
+ 0x03, 0x00, 0x09, 0x00, 0x50, 0x21, 0x04, 0x30,
+ 0x01, 0x00, 0x00, 0x00, 0x04, 0x03, 0x00, 0x09,
+ 0x00, 0x54, 0x21, 0x04, 0x30, 0x01, 0x00, 0x00,
+ 0x00, 0x04, 0x03, 0x00, 0x09, 0x00, 0x58, 0x21,
+ 0x04, 0x30, 0x01, 0x00, 0x00, 0x00, 0x04, 0x03,
+ 0x00, 0x09, 0x00, 0x5C, 0x21, 0x04, 0x30, 0x1F,
+ 0x00, 0x00, 0x00, 0x04, 0x03, 0x00, 0x09, 0x00,
+ 0x60, 0x21, 0x04, 0x30, 0x08, 0x00, 0x00, 0x00,
+ 0x04, 0x03, 0x00, 0x09, 0x00, 0x80, 0x21, 0x04,
+ 0x30, 0x30, 0x00, 0x00, 0x00, 0x04, 0x03, 0x00,
+ 0x09, 0x00, 0x84, 0x21, 0x04, 0x30, 0x01, 0x00,
+ 0x00, 0x00, 0x04, 0x03, 0x00, 0x09, 0x00, 0x88,
+ 0x21, 0x04, 0x30, 0x01, 0x00, 0x00, 0x00, 0x04,
+ 0x03, 0x00, 0x09, 0x00, 0x8C, 0x21, 0x04, 0x30,
+ 0x01, 0x00, 0x00, 0x00, 0x04, 0x03, 0x00, 0x09,
+ 0x00, 0x90, 0x21, 0x04, 0x30, 0x00, 0x00, 0x00,
+ 0x00, 0x04, 0x03, 0x00, 0x09, 0x00, 0x94, 0x21,
+ 0x04, 0x30, 0x01, 0x00, 0x00, 0x00, 0x04, 0x03,
+ 0x00, 0x09, 0x00, 0x98, 0x21, 0x04, 0x30, 0x00,
+ 0x00, 0x00, 0x00, 0x04, 0x03, 0x00, 0x09, 0x00,
+ 0x9C, 0x21, 0x04, 0x30, 0x1F, 0x00, 0x00, 0x00,
+ 0x04, 0x03, 0x00, 0x09, 0x00, 0xA0, 0x21, 0x04,
+ 0x30, 0x04, 0x00, 0x00, 0x00, 0x04, 0x03, 0x00,
+ 0x09, 0x00, 0xC0, 0x21, 0x04, 0x30, 0x30, 0x00,
+ 0x00, 0x00, 0x04, 0x03, 0x00, 0x09, 0x00, 0xC4,
+ 0x21, 0x04, 0x30, 0x01, 0x00, 0x00, 0x00, 0x04,
+ 0x03, 0x00, 0x09, 0x00, 0xC8, 0x21, 0x04, 0x30,
+ 0x01, 0x00, 0x00, 0x00, 0x04, 0x03, 0x00, 0x09,
+ 0x00, 0xCC, 0x21, 0x04, 0x30, 0x01, 0x00, 0x00,
+ 0x00, 0x04, 0x03, 0x00, 0x09, 0x00, 0xD0, 0x21,
+ 0x04, 0x30, 0x00, 0x00, 0x00, 0x00, 0x04, 0x03,
+ 0x00, 0x09, 0x00, 0xD4, 0x21, 0x04, 0x30, 0x01,
+ 0x00, 0x00, 0x00, 0x04, 0x03, 0x00, 0x09, 0x00,
+ 0xD8, 0x21, 0x04, 0x30, 0x00, 0x00, 0x00, 0x00,
+ 0x04, 0x03, 0x00, 0x09, 0x00, 0xDC, 0x21, 0x04,
+ 0x30, 0x1F, 0x00, 0x00, 0x00, 0x04, 0x03, 0x00,
+ 0x09, 0x00, 0xE0, 0x21, 0x04, 0x30, 0x04, 0x00,
+ 0x00, 0x00, 0x04, 0x03, 0x00, 0x09, 0x00, 0xA0,
+ 0x20, 0x04, 0x30, 0xEF, 0xE1, 0x00, 0x00, 0x04,
+ 0x03, 0x00, 0x09, 0x00, 0xA4, 0x20, 0x04, 0x30,
+ 0x00, 0x00, 0x00, 0x00, 0x04, 0x03, 0x00, 0x09,
+ 0x00, 0xB0, 0x20, 0x04, 0x30, 0x00, 0x00, 0x00,
+ 0x00, 0x04, 0x03, 0x00, 0x09, 0x00, 0xC4, 0x20,
+ 0x04, 0x30, 0x14, 0x00, 0x00, 0x00, 0x04, 0x03,
+ 0x00, 0x09, 0x00, 0xC8, 0x20, 0x04, 0x30, 0x00,
+ 0x00, 0x00, 0x00, 0x04, 0x03, 0x00, 0x09, 0x00,
+ 0xCC, 0x20, 0x04, 0x30, 0x20, 0x00, 0x00, 0x00,
+ 0x04, 0x03, 0x00, 0x09, 0x00, 0x50, 0x20, 0x04,
+ 0x30, 0x00, 0x00, 0x74, 0x01, 0x04, 0x03, 0x00,
+ 0x09, 0x00, 0xA8, 0x20, 0x04, 0x30, 0xFE, 0x21,
+ 0x74, 0x01, 0x04, 0x03, 0x00, 0x09, 0x00, 0x04,
+ 0x00, 0x00, 0x38, 0x00, 0x07, 0x00, 0x00, 0x04,
+ 0x03, 0x00, 0x09, 0x00, 0x08, 0x00, 0x00, 0x38,
+ 0x00, 0x15, 0x00, 0x00, 0x04, 0x03, 0x00, 0x09,
+ 0x00, 0x0C, 0x00, 0x00, 0x38, 0x01, 0x03, 0x02,
+ 0x00, 0x04, 0x03, 0x00, 0x09, 0x00, 0x10, 0x00,
+ 0x00, 0x38, 0x01, 0x07, 0x02, 0x00, 0x04, 0x03,
+ 0x00, 0x09, 0x00, 0x14, 0x00, 0x00, 0x38, 0x0C,
+ 0x0C, 0x05, 0x00, 0x04, 0x02, 0x00, 0x80, 0x05,
+ 0xFF, 0xF9, 0x87, 0x20, 0xBB, 0xF8, 0x87, 0x00,
+ 0xBB, 0xF8, 0x87, 0x00, 0xBB, 0xF8, 0x87, 0x00,
+ 0xBB, 0xF8, 0x87, 0x00, 0xBB, 0xF8, 0x87, 0x00,
+ 0xBB, 0xF8, 0x87, 0x00, 0xBB, 0xF8, 0x07, 0x20,
+ 0xBA, 0xF8, 0x07, 0x20, 0xB9, 0xF8, 0x07, 0x20,
+ 0xB8, 0xF8, 0x07, 0x20, 0xB7, 0xF8, 0x07, 0x20,
+ 0xB6, 0xF8, 0x07, 0x20, 0xB5, 0xF8, 0x07, 0x20,
+ 0xB4, 0xF8, 0x07, 0x20, 0xB3, 0xF8, 0x07, 0x20,
+ 0xB2, 0xF8, 0x07, 0x20, 0xB1, 0xF8, 0x07, 0x22,
+ 0xB0, 0xF8, 0x07, 0x22, 0xAF, 0xF8, 0x07, 0x22,
+ 0xAE, 0xF8, 0x07, 0x22, 0xAD, 0xF8, 0x07, 0x22,
+ 0xAC, 0xF8, 0x07, 0x22, 0xAB, 0xF8, 0x07, 0x22,
+ 0xAA, 0xF8, 0x07, 0x22, 0xA9, 0xF8, 0x07, 0x22,
+ 0xA8, 0xF8, 0x07, 0x22, 0xA7, 0xF8, 0x07, 0x22,
+ 0xA6, 0xF8, 0x07, 0x22, 0xA5, 0xF8, 0x07, 0x22,
+ 0xA4, 0xF8, 0x07, 0x22, 0xA3, 0xF8, 0x07, 0x22,
+ 0xA2, 0xF8, 0x07, 0x22, 0xA1, 0xF8, 0x07, 0x22,
+ 0xA0, 0xF8, 0x07, 0x22, 0x9F, 0xF8, 0x07, 0x22,
+ 0x9E, 0xF8, 0x07, 0x22, 0x9D, 0xF8, 0x07, 0x22,
+ 0x9C, 0xF8, 0x07, 0x22, 0x9B, 0xF8, 0x07, 0x22,
+ 0x9A, 0xF8, 0x07, 0x22, 0x99, 0xF8, 0x07, 0x22,
+ 0x98, 0xF8, 0x07, 0x22, 0x97, 0xF8, 0x07, 0x22,
+ 0x96, 0xF8, 0x07, 0x22, 0x95, 0xF8, 0x07, 0x22,
+ 0x94, 0xF8, 0x07, 0x22, 0x93, 0xF8, 0x07, 0x22,
+ 0x92, 0xF8, 0x07, 0x22, 0x91, 0xF8, 0x07, 0x22,
+ 0x90, 0xF8, 0x07, 0x22, 0x8F, 0xF8, 0x07, 0x22,
+ 0x8E, 0xF8, 0x07, 0x22, 0x8D, 0xF8, 0x07, 0x22,
+ 0x8C, 0xF8, 0x07, 0x22, 0x8B, 0xF8, 0x07, 0x22,
+ 0x8A, 0xF8, 0x07, 0x22, 0x89, 0xF8, 0x07, 0x22,
+ 0x88, 0xF8, 0x07, 0x22, 0x87, 0xF8, 0x07, 0x22,
+ 0x86, 0xF8, 0x07, 0x22, 0x85, 0xF8, 0x07, 0x22,
+ 0x84, 0xF8, 0x07, 0x22, 0x83, 0xF8, 0x07, 0x22,
+ 0x82, 0xF8, 0x07, 0x22, 0x81, 0xF8, 0x07, 0x22,
+ 0x80, 0xF8, 0x07, 0x22, 0x7F, 0xF8, 0x07, 0x22,
+ 0x7E, 0xF8, 0x07, 0x22, 0x7D, 0xF8, 0x07, 0x22,
+ 0x7C, 0xF8, 0x07, 0x22, 0x7B, 0xF8, 0x07, 0x22,
+ 0x7A, 0xF8, 0x07, 0x22, 0x79, 0xF8, 0x07, 0x22,
+ 0x78, 0xF8, 0x07, 0x22, 0x77, 0xF8, 0x07, 0x22,
+ 0x76, 0xF8, 0x07, 0x22, 0x75, 0xF8, 0x07, 0x22,
+ 0x74, 0xF8, 0x07, 0x22, 0x73, 0xF8, 0x07, 0x22,
+ 0x72, 0xF8, 0x07, 0x22, 0x71, 0xF8, 0x07, 0x22,
+ 0x70, 0xF8, 0x07, 0x22, 0x6F, 0xF8, 0x07, 0x22,
+ 0x6E, 0xF8, 0x07, 0x22, 0x6D, 0xF8, 0x07, 0x22,
+ 0x6C, 0xF8, 0x07, 0x22, 0x6B, 0xF8, 0x07, 0x22,
+ 0x6A, 0xF8, 0x07, 0x22, 0x69, 0xF8, 0x07, 0x22,
+ 0x68, 0xF8, 0x07, 0x22, 0x67, 0xF8, 0x07, 0x22,
+ 0x66, 0xF8, 0x07, 0x22, 0x65, 0xF8, 0x07, 0x22,
+ 0x64, 0xF8, 0x07, 0x22, 0x63, 0xF8, 0x07, 0x22,
+ 0x62, 0xF8, 0x07, 0x22, 0x61, 0xF8, 0x07, 0x22,
+ 0x60, 0xF8, 0x07, 0x22, 0x5F, 0xF8, 0x07, 0x22,
+ 0x5E, 0xF8, 0x07, 0x22, 0x5D, 0xF8, 0x07, 0x22,
+ 0x5C, 0xF8, 0x07, 0x22, 0x5B, 0xF8, 0x07, 0x22,
+ 0x5A, 0xF8, 0x07, 0x22, 0x59, 0xF8, 0x07, 0x22,
+ 0x58, 0xF8, 0x07, 0x22, 0x57, 0xF8, 0x07, 0x22,
+ 0x56, 0xF8, 0x07, 0x22, 0x55, 0xF8, 0x07, 0x22,
+ 0x54, 0xF8, 0x07, 0x22, 0x53, 0xF8, 0x07, 0x22,
+ 0x52, 0xF8, 0x07, 0x22, 0x51, 0xF8, 0x07, 0x22,
+ 0x50, 0xF8, 0x07, 0x22, 0x4F, 0xF8, 0x07, 0x22,
+ 0x4E, 0xF8, 0x07, 0x22, 0x4D, 0xF8, 0x07, 0x22,
+ 0x4C, 0xF8, 0x07, 0x22, 0x4B, 0xF8, 0x07, 0x22,
+ 0x4A, 0xF8, 0x07, 0x22, 0x49, 0xF8, 0x07, 0x22,
+ 0x48, 0xF8, 0x07, 0x22, 0x47, 0xF8, 0x07, 0x22,
+ 0x46, 0xF8, 0x07, 0x22, 0x45, 0xF8, 0x07, 0x22,
+ 0x44, 0xF8, 0x07, 0x22, 0x43, 0xF8, 0x07, 0x22,
+ 0x42, 0xF8, 0x07, 0x22, 0x41, 0xF8, 0x07, 0x22,
+ 0x40, 0xF8, 0x07, 0x22, 0x3F, 0xF8, 0x07, 0x22,
+ 0x3E, 0xF8, 0x07, 0x22, 0x3D, 0xF8, 0x07, 0x22,
+ 0x3C, 0xF8, 0x07, 0x22, 0x3B, 0xF8, 0x07, 0x22,
+ 0x3A, 0xF8, 0x07, 0x22, 0x39, 0xF8, 0x07, 0x22,
+ 0x38, 0xF8, 0x07, 0x22, 0x37, 0xF8, 0x07, 0x22,
+ 0x36, 0xF8, 0x07, 0x22, 0x35, 0xF8, 0x07, 0x22,
+ 0x34, 0xF8, 0x07, 0x22, 0x33, 0xF8, 0x07, 0x22,
+ 0x32, 0xF8, 0x07, 0x22, 0x31, 0xF8, 0x07, 0x22,
+ 0x30, 0xF8, 0x07, 0x22, 0x2F, 0xF8, 0x07, 0x22,
+ 0x2E, 0xF8, 0x07, 0x22, 0x2D, 0xF8, 0x07, 0x22,
+ 0x2C, 0xF8, 0x07, 0x22, 0x2B, 0xF8, 0x07, 0x22,
+ 0x2A, 0xF8, 0x07, 0x22, 0x29, 0xF8, 0x07, 0x22,
+ 0x28, 0xF8, 0x07, 0x22, 0x27, 0xF8, 0x07, 0x22,
+ 0x26, 0xF8, 0x07, 0x22, 0x25, 0xF8, 0x07, 0x22,
+ 0x24, 0xF8, 0x07, 0x22, 0x23, 0xF8, 0x07, 0x20,
+ 0x22, 0xF8, 0x07, 0x20, 0x21, 0xF8, 0x07, 0x20,
+ 0x20, 0xF8, 0x07, 0x20, 0x1F, 0xF8, 0x07, 0x20,
+ 0x1E, 0xF8, 0x07, 0x20, 0x1D, 0xF8, 0x07, 0x20,
+ 0x1C, 0xF8, 0x07, 0x20, 0x1C, 0xF8, 0x07, 0x00,
+ 0xD7, 0xF8, 0xA7, 0x00, 0xD7, 0xF8, 0xA7, 0x00,
+ 0xD7, 0xF8, 0xA7, 0x00, 0xD7, 0xF8, 0xA7, 0x00,
+ 0xD7, 0xF8, 0xA7, 0x00, 0xD7, 0xF8, 0xA7, 0x00,
+ 0xD8, 0xF8, 0x27, 0x20, 0xD9, 0xF8, 0x27, 0x20,
+ 0xDA, 0xF8, 0x27, 0x20, 0xDB, 0xF8, 0x27, 0x20,
+ 0xDC, 0xF8, 0x27, 0x20, 0xDD, 0xF8, 0x27, 0x20,
+ 0xDE, 0xF8, 0x27, 0x20, 0xDF, 0xF8, 0x27, 0x20,
+ 0xE0, 0xF8, 0x27, 0x20, 0xE1, 0xF8, 0x27, 0x20,
+ 0xE2, 0xF8, 0x27, 0x20, 0xE3, 0xF8, 0x27, 0x20,
+ 0xE4, 0xF8, 0x27, 0x20, 0xE5, 0xF8, 0x27, 0x20,
+ 0xE6, 0xF8, 0x27, 0x20, 0xE7, 0xF8, 0x27, 0x20,
+ 0xE8, 0xF8, 0x27, 0x20, 0xE9, 0xF8, 0x27, 0x20,
+ 0xEA, 0xF8, 0x27, 0x20, 0xEB, 0xF8, 0x27, 0x20,
+ 0xEC, 0xF8, 0x27, 0x20, 0xED, 0xF8, 0x27, 0x20,
+ 0xEE, 0xF8, 0x27, 0x20, 0xEF, 0xF8, 0x27, 0x20,
+ 0xF0, 0xF8, 0x27, 0x20, 0xF1, 0xF8, 0x27, 0x20,
+ 0xF2, 0xF8, 0x27, 0x20, 0xF3, 0xF8, 0x27, 0x20,
+ 0xF4, 0xF8, 0x27, 0x20, 0xF5, 0xF8, 0x27, 0x20,
+ 0xF6, 0xF8, 0x27, 0x20, 0xF7, 0xF8, 0x27, 0x20,
+ 0xF8, 0xF8, 0x27, 0x20, 0xF9, 0xF8, 0x27, 0x20,
+ 0xFA, 0xF8, 0x27, 0x20, 0xFB, 0xF8, 0x27, 0x20,
+ 0xFC, 0xF8, 0x27, 0x20, 0xFD, 0xF8, 0x27, 0x20,
+ 0xFE, 0xF8, 0x27, 0x20, 0xFF, 0xF8, 0x27, 0x20,
+ 0x00, 0xF9, 0x27, 0x20, 0xD7, 0xF8, 0x27, 0x20,
+ 0x00, 0xF8, 0x27, 0x20, 0x01, 0xF8, 0x27, 0x20,
+ 0x02, 0xF8, 0x27, 0x20, 0x03, 0xF8, 0x27, 0x20,
+ 0x04, 0xF8, 0x27, 0x20, 0x05, 0xF8, 0x27, 0x20,
+ 0x06, 0xF8, 0x27, 0x20, 0x07, 0xF8, 0x27, 0x20,
+ 0x08, 0xF8, 0x27, 0x20, 0x09, 0xF8, 0x27, 0x20,
+ 0x0A, 0xF8, 0x27, 0x20, 0x0B, 0xF8, 0x27, 0x20,
+ 0x0C, 0xF8, 0x27, 0x20, 0x0D, 0xF8, 0x27, 0x20,
+ 0x0E, 0xF8, 0x27, 0x20, 0x0F, 0xF8, 0x27, 0x20,
+ 0x10, 0xF8, 0x27, 0x20, 0x11, 0xF8, 0x27, 0x20,
+ 0x12, 0xF8, 0x27, 0x20, 0x13, 0xF8, 0x27, 0x20,
+ 0x14, 0xF8, 0x27, 0x20, 0x15, 0xF8, 0x27, 0x20,
+ 0x15, 0xF8, 0x27, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x0A, 0x00, 0x08, 0x00, 0x10, 0x03, 0x18, 0x1C,
+ 0x10, 0x03, 0x18, 0x1C, 0x03, 0x00, 0x09, 0x00,
+ 0x00, 0x20, 0x04, 0x30, 0x80, 0x00, 0x00, 0x00,
+ 0x04, 0x05, 0x00, 0x0E, 0x00, 0x0C, 0x20, 0xFD,
+ 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x02, 0x00, 0x00, 0x05, 0x00, 0x0E, 0x00, 0x10,
+ 0x20, 0xFD, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x00,
+ 0x00, 0x02, 0x05, 0x00, 0x00, 0x03, 0x00, 0x09,
+ 0x00, 0x04, 0x21, 0x04, 0x30, 0x01, 0x00, 0x00,
+ 0x00, 0x04, 0x03, 0x00, 0x09, 0x00, 0x08, 0x21,
+ 0x04, 0x30, 0x01, 0x00, 0x00, 0x00, 0x04, 0x03,
+ 0x00, 0x09, 0x00, 0x0C, 0x21, 0x04, 0x30, 0x01,
+ 0x00, 0x00, 0x00, 0x04, 0x03, 0x00, 0x09, 0x00,
+ 0x10, 0x21, 0x04, 0x30, 0x01, 0x00, 0x00, 0x00,
+ 0x04, 0x03, 0x00, 0x09, 0x00, 0x14, 0x21, 0x04,
+ 0x30, 0x01, 0x00, 0x00, 0x00, 0x04, 0x03, 0x00,
+ 0x09, 0x00, 0x18, 0x21, 0x04, 0x30, 0x01, 0x00,
+ 0x00, 0x00, 0x04, 0x03, 0x00, 0x09, 0x00, 0x44,
+ 0x21, 0x04, 0x30, 0x01, 0x00, 0x00, 0x00, 0x04,
+ 0x03, 0x00, 0x09, 0x00, 0x48, 0x21, 0x04, 0x30,
+ 0x01, 0x00, 0x00, 0x00, 0x04, 0x03, 0x00, 0x09,
+ 0x00, 0x4C, 0x21, 0x04, 0x30, 0x01, 0x00, 0x00,
+ 0x00, 0x04, 0x03, 0x00, 0x09, 0x00, 0x50, 0x21,
+ 0x04, 0x30, 0x01, 0x00, 0x00, 0x00, 0x04, 0x03,
+ 0x00, 0x09, 0x00, 0x54, 0x21, 0x04, 0x30, 0x01,
+ 0x00, 0x00, 0x00, 0x04, 0x03, 0x00, 0x09, 0x00,
+ 0x58, 0x21, 0x04, 0x30, 0x01, 0x00, 0x00, 0x00,
+ 0x04, 0x03, 0x00, 0x09, 0x00, 0xC8, 0x20, 0x04,
+ 0x30, 0x04, 0x00, 0x00, 0x00, 0x04, 0x05, 0x00,
+ 0x0E, 0x00, 0x14, 0x20, 0xFF, 0xFF, 0x00, 0xFF,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x84, 0x00,
+ 0x03, 0x00, 0x09, 0x00, 0x84, 0x21, 0x04, 0x30,
+ 0x01, 0x00, 0x00, 0x00, 0x04, 0x03, 0x00, 0x09,
+ 0x00, 0x88, 0x21, 0x04, 0x30, 0x01, 0x00, 0x00,
+ 0x00, 0x04, 0x03, 0x00, 0x09, 0x00, 0x8C, 0x21,
+ 0x04, 0x30, 0x01, 0x00, 0x00, 0x00, 0x04, 0x03,
+ 0x00, 0x09, 0x00, 0x90, 0x21, 0x04, 0x30, 0x01,
+ 0x00, 0x00, 0x00, 0x04, 0x03, 0x00, 0x09, 0x00,
+ 0x94, 0x21, 0x04, 0x30, 0x01, 0x00, 0x00, 0x00,
+ 0x04, 0x03, 0x00, 0x09, 0x00, 0x98, 0x21, 0x04,
+ 0x30, 0x00, 0x00, 0x00, 0x00, 0x04, 0x03, 0x00,
+ 0x09, 0x00, 0xA0, 0x21, 0x04, 0x30, 0x00, 0x00,
+ 0x00, 0x00, 0x04, 0x03, 0x00, 0x09, 0x00, 0x20,
+ 0x21, 0x04, 0x30, 0x07, 0x00, 0x00, 0x00, 0x04,
+ 0x03, 0x00, 0x09, 0x00, 0x60, 0x21, 0x04, 0x30,
+ 0x07, 0x00, 0x00, 0x00, 0x04, 0x15, 0x00, 0x08,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x28, 0x00,
+ 0x00, 0x18, 0x00, 0x52, 0x01, 0x08, 0x00, 0x05,
+ 0x00, 0x0A, 0x00, 0xFA, 0x00, 0x1E, 0x00, 0xC8,
+ 0x00, 0x00, 0x00, 0x9F, 0x00, 0x38, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03,
+ 0xFF, 0xFB, 0xF9, 0xFC, 0xFD, 0xFF, 0xFD, 0xFE,
+ 0x00, 0x01, 0x00, 0x00, 0x03, 0x01, 0x01, 0x02,
+ 0x06, 0x05, 0x05, 0x06, 0x05, 0x08, 0x0A, 0x06,
+ 0x09, 0x09, 0x06, 0x08, 0x05, 0x04, 0x03, 0x04,
+ 0x03, 0x05, 0x07, 0x07, 0x09, 0x05, 0x04, 0x03,
+ 0x01, 0x02, 0x02, 0x02, 0x02, 0x02, 0xFF, 0x00,
+ 0xFF, 0x00, 0xFB, 0xFD, 0xFF, 0xFF, 0x01, 0xFF,
+ 0xFD, 0xFF, 0x01, 0x02, 0x01, 0xFE, 0xFF, 0x01,
+ 0xFE, 0xFC, 0x00, 0xFF, 0x01, 0x01, 0x00, 0x00,
+ 0xFF, 0xFF, 0x04, 0x03, 0x00, 0x01, 0xFE, 0x02,
+ 0x02, 0x03, 0x03, 0x00, 0xFF, 0xFA, 0xFB, 0xFC,
+ 0xFF, 0xFF, 0x02, 0xFF, 0x01, 0xFF, 0xFE, 0xFD,
+ 0xFF, 0xFE, 0xFB, 0xF9, 0xF9, 0xFC, 0xFC, 0xFC,
+ 0xF5, 0xF3, 0xF8, 0xF5, 0xF5, 0xF5, 0xF9, 0xFB,
+ 0xFE, 0xFC, 0xFA, 0xF8, 0xFC, 0xF9, 0xF7, 0xF6,
+ 0xF6, 0xF7, 0xFB, 0xF7, 0xF9, 0xF9, 0xF8, 0xF8,
+ 0xF1, 0xF6, 0xF9, 0xFC, 0xFE, 0xFC, 0xFE, 0x00,
+ 0xFB, 0xFE, 0xFC, 0xFC, 0xFC, 0xFB, 0xFD, 0xFB,
+ 0xFC, 0xFA, 0xFC, 0xFA, 0x01, 0x02, 0xFE, 0xFE,
+ 0xFC, 0xF7, 0xF4, 0xF4, 0xED, 0xE1, 0xD7, 0x01,
+ 0x04, 0x03, 0x04, 0x08, 0x0B, 0x09, 0x09, 0x09,
+ 0x05, 0x06, 0x08, 0x05, 0x03, 0x00, 0x00, 0x01,
+ 0x00, 0xFF, 0xFF, 0xFE, 0xFD, 0xFD, 0xFC, 0xFF,
+ 0x02, 0xFD, 0xFB, 0xFC, 0xFA, 0xFC, 0xFD, 0xFF,
+ 0xFF, 0xFC, 0xFC, 0xFB, 0xFC, 0xFE, 0xFF, 0x00,
+ 0x01, 0x0B, 0x09, 0x07, 0x06, 0x03, 0x06, 0x08,
+ 0x07, 0x06, 0x07, 0x08, 0x08, 0x09, 0x0B, 0x0D,
+ 0x0E, 0x10, 0x15, 0x15, 0x19, 0x1B, 0x20, 0x01,
+ 0x00, 0xFF, 0xFF, 0xFE, 0xFD, 0xFD, 0xFC, 0x80,
+ 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
+ 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
+ 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
+ 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
+ 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
+ 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
+ 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
+ 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
+ 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
+ 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
+};
+
+#endif
diff --git a/libfprint/fp_internal.h b/libfprint/fp_internal.h
index 04d304f4..f640f58c 100644
--- a/libfprint/fp_internal.h
+++ b/libfprint/fp_internal.h
@@ -91,6 +91,10 @@ enum fp_dev_state {
DEV_STATE_IDENTIFYING,
DEV_STATE_IDENTIFY_DONE,
DEV_STATE_IDENTIFY_STOPPING,
+ DEV_STATE_CAPTURE_STARTING,
+ DEV_STATE_CAPTURING,
+ DEV_STATE_CAPTURE_DONE,
+ DEV_STATE_CAPTURE_STOPPING,
};
struct fp_driver **fprint_get_drivers (void);
@@ -108,8 +112,8 @@ struct fp_dev {
/* drivers should not mess with any of the below */
enum fp_dev_state state;
-
int __enroll_stage;
+ int unconditional_capture;
/* async I/O callbacks and data */
/* FIXME: convert this to generic state operational data mechanism? */
@@ -129,6 +133,10 @@ struct fp_dev {
void *identify_cb_data;
fp_identify_stop_cb identify_stop_cb;
void *identify_stop_cb_data;
+ fp_capture_cb capture_cb;
+ void *capture_cb_data;
+ fp_capture_stop_cb capture_stop_cb;
+ void *capture_stop_cb_data;
/* FIXME: better place to put this? */
struct fp_print_data **identify_gallery;
@@ -146,6 +154,7 @@ enum fp_imgdev_action {
IMG_ACTION_ENROLL,
IMG_ACTION_VERIFY,
IMG_ACTION_IDENTIFY,
+ IMG_ACTION_CAPTURE,
};
enum fp_imgdev_enroll_state {
@@ -170,7 +179,9 @@ struct fp_img_dev {
int action_state;
struct fp_print_data *acquire_data;
+ struct fp_print_data *enroll_data;
struct fp_img *acquire_img;
+ int enroll_stage;
int action_result;
/* FIXME: better place to put this? */
@@ -179,8 +190,6 @@ struct fp_img_dev {
void *priv;
};
-int fpi_imgdev_capture(struct fp_img_dev *imgdev, int unconditional,
- struct fp_img **image);
int fpi_imgdev_get_img_width(struct fp_img_dev *imgdev);
int fpi_imgdev_get_img_height(struct fp_img_dev *imgdev);
@@ -215,6 +224,8 @@ struct fp_driver {
int (*verify_stop)(struct fp_dev *dev, gboolean iterating);
int (*identify_start)(struct fp_dev *dev);
int (*identify_stop)(struct fp_dev *dev, gboolean iterating);
+ int (*capture_start)(struct fp_dev *dev);
+ int (*capture_stop)(struct fp_dev *dev);
};
enum fp_print_data_type fpi_driver_get_data_type(struct fp_driver *drv);
@@ -267,6 +278,9 @@ extern struct fp_img_driver aes2550_driver;
#ifdef ENABLE_AES2660
extern struct fp_img_driver aes2660_driver;
#endif
+#ifdef ENABLE_AES3500
+extern struct fp_img_driver aes3500_driver;
+#endif
#ifdef ENABLE_AES4000
extern struct fp_img_driver aes4000_driver;
#endif
@@ -282,6 +296,15 @@ extern struct fp_img_driver vfs101_driver;
#ifdef ENABLE_VFS301
extern struct fp_img_driver vfs301_driver;
#endif
+#ifdef ENABLE_VFS5011
+extern struct fp_img_driver vfs5011_driver;
+#endif
+#ifdef ENABLE_UPEKTC_IMG
+extern struct fp_img_driver upektc_img_driver;
+#endif
+#ifdef ENABLE_ETES603
+extern struct fp_img_driver etes603_driver;
+#endif
extern libusb_context *fpi_usb_ctx;
extern GSList *opened_devices;
@@ -310,15 +333,19 @@ enum fp_print_data_type {
PRINT_DATA_NBIS_MINUTIAE,
};
-struct fp_print_data {
- uint16_t driver_id;
- uint32_t devtype;
- enum fp_print_data_type type;
+struct fp_print_data_item {
size_t length;
unsigned char data[0];
};
-struct fpi_print_data_fp1 {
+struct fp_print_data {
+ uint16_t driver_id;
+ uint32_t devtype;
+ enum fp_print_data_type type;
+ GSList *prints;
+};
+
+struct fpi_print_data_fp2 {
char prefix[3];
uint16_t driver_id;
uint32_t devtype;
@@ -326,8 +353,14 @@ struct fpi_print_data_fp1 {
unsigned char data[0];
} __attribute__((__packed__));
+struct fpi_print_data_item_fp2 {
+ uint32_t length;
+ unsigned char data[0];
+} __attribute__((__packed__));
+
void fpi_data_exit(void);
-struct fp_print_data *fpi_print_data_new(struct fp_dev *dev, size_t length);
+struct fp_print_data *fpi_print_data_new(struct fp_dev *dev);
+struct fp_print_data_item *fpi_print_data_item_new(size_t length);
gboolean fpi_print_data_compatible(uint16_t driver_id1, uint32_t devtype1,
enum fp_print_data_type type1, uint16_t driver_id2, uint32_t devtype2,
enum fp_print_data_type type2);
@@ -436,6 +469,11 @@ void fpi_drvcb_report_identify_result(struct fp_dev *dev, int result,
size_t match_offset, struct fp_img *img);
void fpi_drvcb_identify_stopped(struct fp_dev *dev);
+void fpi_drvcb_capture_started(struct fp_dev *dev, int status);
+void fpi_drvcb_report_capture_result(struct fp_dev *dev, int result,
+ struct fp_img *img);
+void fpi_drvcb_capture_stopped(struct fp_dev *dev);
+
/* for image drivers */
void fpi_imgdev_open_complete(struct fp_img_dev *imgdev, int status);
void fpi_imgdev_close_complete(struct fp_img_dev *imgdev);
diff --git a/libfprint/fprint-list-udev-rules.c b/libfprint/fprint-list-udev-rules.c
index 71c0b598..4b18f5ae 100644
--- a/libfprint/fprint-list-udev-rules.c
+++ b/libfprint/fprint-list-udev-rules.c
@@ -74,7 +74,7 @@ static void print_driver (struct fp_driver *driver)
if (num_printed == 0)
printf ("# %s\n", driver->full_name);
- printf ("SUBSYSTEM==\"usb\", ATTRS{idVendor}==\"%04x\", ATTRS{idProduct}==\"%04x\", ATTRS{dev}==\"*\", ATTR{power/control}=\"auto\"\n", driver->id_table[i].vendor, driver->id_table[i].product);
+ printf ("SUBSYSTEM==\"usb\", ATTRS{idVendor}==\"%04x\", ATTRS{idProduct}==\"%04x\", ATTRS{dev}==\"*\", TEST==\"power/control\", ATTR{power/control}=\"auto\"\n", driver->id_table[i].vendor, driver->id_table[i].product);
num_printed++;
}
diff --git a/libfprint/fprint.h b/libfprint/fprint.h
index 99fa1e10..af1d686b 100644
--- a/libfprint/fprint.h
+++ b/libfprint/fprint.h
@@ -107,6 +107,17 @@ uint32_t fp_dev_get_devtype(struct fp_dev *dev);
int fp_dev_supports_print_data(struct fp_dev *dev, struct fp_print_data *data);
int fp_dev_supports_dscv_print(struct fp_dev *dev, struct fp_dscv_print *print);
+/** \ingroup dev
+ * Image capture result codes returned from fp_dev_img_capture().
+ */
+enum fp_capture_result {
+ /** Capture completed successfully, the capture data has been
+ * returned to the caller. */
+ FP_CAPTURE_COMPLETE = 0,
+ /** Capture failed for some reason */
+ FP_CAPTURE_FAIL,
+};
+
int fp_dev_supports_imaging(struct fp_dev *dev);
int fp_dev_img_capture(struct fp_dev *dev, int unconditional,
struct fp_img **image);
@@ -340,6 +351,13 @@ typedef void (*fp_identify_stop_cb)(struct fp_dev *dev, void *user_data);
int fp_async_identify_stop(struct fp_dev *dev, fp_identify_stop_cb callback,
void *user_data);
+typedef void (*fp_capture_cb)(struct fp_dev *dev, int result,
+ struct fp_img *img, void *user_data);
+int fp_async_capture_start(struct fp_dev *dev, int unconditional, fp_capture_cb callback, void *user_data);
+
+typedef void (*fp_capture_stop_cb)(struct fp_dev *dev, void *user_data);
+int fp_async_capture_stop(struct fp_dev *dev, fp_capture_stop_cb callback, void *user_data);
+
#ifdef __cplusplus
}
#endif
diff --git a/libfprint/gdkpixbuf.c b/libfprint/gdkpixbuf.c
deleted file mode 100644
index 4de6151c..00000000
--- a/libfprint/gdkpixbuf.c
+++ /dev/null
@@ -1,88 +0,0 @@
-/*
- * Imaging utility functions for libfprint
- * Copyright (C) 2007-2008 Daniel Drake
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
- */
-
-#include
-#include
-
-#include "fp_internal.h"
-
-struct fp_img *fpi_im_resize(struct fp_img *img, unsigned int w_factor, unsigned int h_factor)
-{
- int new_width = img->width * w_factor;
- int new_height = img->height * h_factor;
- GdkPixbuf *orig, *resized;
- struct fp_img *newimg;
- guchar *pixels;
- guint y;
- int rowstride;
-
- g_type_init ();
-
- /* It is possible to implement resizing using a simple algorithm, however
- * we use gdk-pixbuf because it applies some kind of smoothing to the
- * result, which improves matching performances in my experiments. */
-
- /* Create the original pixbuf, and fill it in from the grayscale data */
- orig = gdk_pixbuf_new (GDK_COLORSPACE_RGB,
- FALSE,
- 8,
- img->width,
- img->height);
- rowstride = gdk_pixbuf_get_rowstride (orig);
- pixels = gdk_pixbuf_get_pixels (orig);
- for (y = 0; y < img->height; y++) {
- guint x;
- for (x = 0; x < img->width; x++) {
- guchar *p, *r;
-
- p = pixels + y * rowstride + x * 3;
- r = img->data + y * img->width + x;
- p[0] = r[0];
- p[1] = r[0];
- p[2] = r[0];
- }
- }
-
- /* Resize the pixbuf, and create the new fp_img */
- resized = gdk_pixbuf_scale_simple (orig, new_width, new_height, GDK_INTERP_HYPER);
- g_object_unref (orig);
-
- newimg = fpi_img_new(new_width * new_height);
- newimg->width = new_width;
- newimg->height = new_height;
- newimg->flags = img->flags;
-
- rowstride = gdk_pixbuf_get_rowstride (resized);
- pixels = gdk_pixbuf_get_pixels (resized);
- for (y = 0; y < newimg->height; y++) {
- guint x;
- for (x = 0; x < newimg->width; x++) {
- guchar *p, *r;
-
- r = newimg->data + y * newimg->width + x;
- p = pixels + y * rowstride + x * 3;
- r[0] = p[0];
- }
- }
-
- g_object_unref (resized);
-
- return newimg;
-}
-
diff --git a/libfprint/img.c b/libfprint/img.c
index b1d32edc..3c91d93f 100644
--- a/libfprint/img.c
+++ b/libfprint/img.c
@@ -313,6 +313,7 @@ int fpi_img_to_print_data(struct fp_img_dev *imgdev, struct fp_img *img,
struct fp_print_data **ret)
{
struct fp_print_data *print;
+ struct fp_print_data_item *item;
int r;
if (!img->minutiae) {
@@ -327,9 +328,11 @@ int fpi_img_to_print_data(struct fp_img_dev *imgdev, struct fp_img *img,
/* FIXME: space is wasted if we dont hit the max minutiae count. would
* be good to make this dynamic. */
- print = fpi_print_data_new(imgdev->dev, sizeof(struct xyt_struct));
+ print = fpi_print_data_new(imgdev->dev);
+ item = fpi_print_data_item_new(sizeof(struct xyt_struct));
print->type = PRINT_DATA_NBIS_MINUTIAE;
- minutiae_to_xyt(img->minutiae, img->width, img->height, print->data);
+ minutiae_to_xyt(img->minutiae, img->width, img->height, item->data);
+ print->prints = g_slist_prepend(print->prints, item);
/* FIXME: the print buffer at this point is endian-specific, and will
* only work when loaded onto machines with identical endianness. not good!
@@ -342,42 +345,73 @@ int fpi_img_to_print_data(struct fp_img_dev *imgdev, struct fp_img *img,
int fpi_img_compare_print_data(struct fp_print_data *enrolled_print,
struct fp_print_data *new_print)
{
- struct xyt_struct *gstruct = (struct xyt_struct *) enrolled_print->data;
- struct xyt_struct *pstruct = (struct xyt_struct *) new_print->data;
- GTimer *timer;
- int r;
+ int score, max_score = 0, probe_len;
+ struct xyt_struct *pstruct = NULL;
+ struct xyt_struct *gstruct = NULL;
+ struct fp_print_data_item *data_item;
+ GSList *list_item;
if (enrolled_print->type != PRINT_DATA_NBIS_MINUTIAE ||
- new_print->type != PRINT_DATA_NBIS_MINUTIAE) {
+ new_print->type != PRINT_DATA_NBIS_MINUTIAE) {
fp_err("invalid print format");
return -EINVAL;
}
- timer = g_timer_new();
- r = bozorth_main(pstruct, gstruct);
- g_timer_stop(timer);
- fp_dbg("bozorth processing took %f seconds, score=%d",
- g_timer_elapsed(timer, NULL), r);
- g_timer_destroy(timer);
+ if (g_slist_length(new_print->prints) != 1) {
+ fp_err("new_print contains more than one sample, is it enrolled print?");
+ return -EINVAL;
+ }
- return r;
+ data_item = new_print->prints->data;
+ pstruct = (struct xyt_struct *)data_item->data;
+
+ probe_len = bozorth_probe_init(pstruct);
+ list_item = enrolled_print->prints;
+ do {
+ data_item = list_item->data;
+ gstruct = (struct xyt_struct *)data_item->data;
+ score = bozorth_to_gallery(probe_len, pstruct, gstruct);
+ fp_dbg("score %d", score);
+ max_score = max(score, max_score);
+ list_item = g_slist_next(list_item);
+ } while (list_item);
+
+ return max_score;
}
int fpi_img_compare_print_data_to_gallery(struct fp_print_data *print,
struct fp_print_data **gallery, int match_threshold, size_t *match_offset)
{
- struct xyt_struct *pstruct = (struct xyt_struct *) print->data;
+ struct xyt_struct *pstruct;
+ struct xyt_struct *gstruct;
struct fp_print_data *gallery_print;
- int probe_len = bozorth_probe_init(pstruct);
+ struct fp_print_data_item *data_item;
+ int probe_len;
size_t i = 0;
+ int r;
+ GSList *list_item;
+ if (g_slist_length(print->prints) != 1) {
+ fp_err("new_print contains more than one sample, is it enrolled print?");
+ return -EINVAL;
+ }
+
+ data_item = print->prints->data;
+ pstruct = (struct xyt_struct *)data_item->data;
+
+ probe_len = bozorth_probe_init(pstruct);
while ((gallery_print = gallery[i++])) {
- struct xyt_struct *gstruct = (struct xyt_struct *) gallery_print->data;
- int r = bozorth_to_gallery(probe_len, pstruct, gstruct);
- if (r >= match_threshold) {
- *match_offset = i - 1;
- return FP_VERIFY_MATCH;
- }
+ list_item = gallery_print->prints;
+ do {
+ data_item = list_item->data;
+ gstruct = (struct xyt_struct *)data_item->data;
+ r = bozorth_to_gallery(probe_len, pstruct, gstruct);
+ if (r >= match_threshold) {
+ *match_offset = i - 1;
+ return FP_VERIFY_MATCH;
+ }
+ list_item = g_slist_next(list_item);
+ } while (list_item);
}
return FP_VERIFY_NO_MATCH;
}
diff --git a/libfprint/imgdev.c b/libfprint/imgdev.c
index 1ed3f6dd..f960ee34 100644
--- a/libfprint/imgdev.c
+++ b/libfprint/imgdev.c
@@ -25,6 +25,7 @@
#define MIN_ACCEPTABLE_MINUTIAE 10
#define BOZORTH3_DEFAULT_THRESHOLD 40
+#define IMG_ENROLL_STAGES 5
static int img_dev_open(struct fp_dev *dev, unsigned long driver_data)
{
@@ -33,8 +34,9 @@ static int img_dev_open(struct fp_dev *dev, unsigned long driver_data)
int r = 0;
imgdev->dev = dev;
+ imgdev->enroll_stage = 0;
dev->priv = imgdev;
- dev->nr_enroll_stages = 1;
+ dev->nr_enroll_stages = IMG_ENROLL_STAGES;
/* for consistency in driver code, allow udev access through imgdev */
imgdev->udev = dev->udev;
@@ -144,7 +146,13 @@ void fpi_imgdev_report_finger_status(struct fp_img_dev *imgdev,
switch (imgdev->action) {
case IMG_ACTION_ENROLL:
fp_dbg("reporting enroll result");
- fpi_drvcb_enroll_stage_completed(imgdev->dev, r, data, img);
+ data = imgdev->enroll_data;
+ if (r == FP_ENROLL_COMPLETE) {
+ imgdev->enroll_data = NULL;
+ }
+ fpi_drvcb_enroll_stage_completed(imgdev->dev, r,
+ r == FP_ENROLL_COMPLETE ? data : NULL,
+ img);
/* the callback can cancel enrollment, so recheck current
* action and the status to see if retry is needed */
if (imgdev->action == IMG_ACTION_ENROLL &&
@@ -163,6 +171,9 @@ void fpi_imgdev_report_finger_status(struct fp_img_dev *imgdev,
imgdev->identify_match_offset, img);
fp_print_data_free(data);
break;
+ case IMG_ACTION_CAPTURE:
+ fpi_drvcb_report_capture_result(imgdev->dev, r, img);
+ break;
default:
fp_err("unhandled action %d", imgdev->action);
break;
@@ -231,24 +242,41 @@ void fpi_imgdev_image_captured(struct fp_img_dev *imgdev, struct fp_img *img)
fp_img_standardize(img);
imgdev->acquire_img = img;
- r = fpi_img_to_print_data(imgdev, img, &print);
- if (r < 0) {
- fp_dbg("image to print data conversion error: %d", r);
- imgdev->action_result = FP_ENROLL_RETRY;
- goto next_state;
- } else if (img->minutiae->num < MIN_ACCEPTABLE_MINUTIAE) {
- fp_dbg("not enough minutiae, %d/%d", img->minutiae->num,
- MIN_ACCEPTABLE_MINUTIAE);
- fp_print_data_free(print);
- /* depends on FP_ENROLL_RETRY == FP_VERIFY_RETRY */
- imgdev->action_result = FP_ENROLL_RETRY;
- goto next_state;
+ if (imgdev->action != IMG_ACTION_CAPTURE) {
+ r = fpi_img_to_print_data(imgdev, img, &print);
+ if (r < 0) {
+ fp_dbg("image to print data conversion error: %d", r);
+ imgdev->action_result = FP_ENROLL_RETRY;
+ goto next_state;
+ } else if (img->minutiae->num < MIN_ACCEPTABLE_MINUTIAE) {
+ fp_dbg("not enough minutiae, %d/%d", img->minutiae->num,
+ MIN_ACCEPTABLE_MINUTIAE);
+ fp_print_data_free(print);
+ /* depends on FP_ENROLL_RETRY == FP_VERIFY_RETRY */
+ imgdev->action_result = FP_ENROLL_RETRY;
+ goto next_state;
+ }
}
imgdev->acquire_data = print;
switch (imgdev->action) {
case IMG_ACTION_ENROLL:
- imgdev->action_result = FP_ENROLL_COMPLETE;
+ if (!imgdev->enroll_data) {
+ imgdev->enroll_data = fpi_print_data_new(imgdev->dev);
+ }
+ BUG_ON(g_slist_length(print->prints) != 1);
+ /* Move print data from acquire data into enroll_data */
+ imgdev->enroll_data->prints =
+ g_slist_prepend(imgdev->enroll_data->prints, print->prints->data);
+ print->prints = g_slist_remove(print->prints, print->prints->data);
+
+ fp_print_data_free(imgdev->acquire_data);
+ imgdev->acquire_data = NULL;
+ imgdev->enroll_stage++;
+ if (imgdev->enroll_stage == imgdev->dev->nr_enroll_stages)
+ imgdev->action_result = FP_ENROLL_COMPLETE;
+ else
+ imgdev->action_result = FP_ENROLL_PASS;
break;
case IMG_ACTION_VERIFY:
verify_process_img(imgdev);
@@ -256,6 +284,9 @@ void fpi_imgdev_image_captured(struct fp_img_dev *imgdev, struct fp_img *img)
case IMG_ACTION_IDENTIFY:
identify_process_img(imgdev);
break;
+ case IMG_ACTION_CAPTURE:
+ imgdev->action_result = FP_CAPTURE_COMPLETE;
+ break;
default:
BUG();
break;
@@ -280,6 +311,9 @@ void fpi_imgdev_session_error(struct fp_img_dev *imgdev, int error)
case IMG_ACTION_IDENTIFY:
fpi_drvcb_report_identify_result(imgdev->dev, error, 0, NULL);
break;
+ case IMG_ACTION_CAPTURE:
+ fpi_drvcb_report_capture_result(imgdev->dev, error, NULL);
+ break;
default:
fp_err("unhandled action %d", imgdev->action);
break;
@@ -300,6 +334,9 @@ void fpi_imgdev_activate_complete(struct fp_img_dev *imgdev, int status)
case IMG_ACTION_IDENTIFY:
fpi_drvcb_identify_started(imgdev->dev, status);
break;
+ case IMG_ACTION_CAPTURE:
+ fpi_drvcb_capture_started(imgdev->dev, status);
+ break;
default:
fp_err("unhandled action %d", imgdev->action);
return;
@@ -325,6 +362,9 @@ void fpi_imgdev_deactivate_complete(struct fp_img_dev *imgdev)
case IMG_ACTION_IDENTIFY:
fpi_drvcb_identify_stopped(imgdev->dev);
break;
+ case IMG_ACTION_CAPTURE:
+ fpi_drvcb_capture_stopped(imgdev->dev);
+ break;
default:
fp_err("unhandled action %d", imgdev->action);
break;
@@ -385,6 +425,7 @@ static int generic_acquire_start(struct fp_dev *dev, int action)
fp_dbg("action %d", action);
imgdev->action = action;
imgdev->action_state = IMG_ACQUIRE_STATE_ACTIVATING;
+ imgdev->enroll_stage = 0;
r = dev_activate(imgdev, IMGDEV_STATE_AWAIT_FINGER_ON);
if (r < 0)
@@ -400,8 +441,10 @@ static void generic_acquire_stop(struct fp_img_dev *imgdev)
dev_deactivate(imgdev);
fp_print_data_free(imgdev->acquire_data);
+ fp_print_data_free(imgdev->enroll_data);
fp_img_free(imgdev->acquire_img);
imgdev->acquire_data = NULL;
+ imgdev->enroll_data = NULL;
imgdev->acquire_img = NULL;
imgdev->action_result = 0;
}
@@ -421,6 +464,14 @@ static int img_dev_identify_start(struct fp_dev *dev)
return generic_acquire_start(dev, IMG_ACTION_IDENTIFY);
}
+static int img_dev_capture_start(struct fp_dev *dev)
+{
+ /* Unconditional capture is not supported yet */
+ if (dev->unconditional_capture)
+ return -ENOTSUP;
+ return generic_acquire_start(dev, IMG_ACTION_CAPTURE);
+}
+
static int img_dev_enroll_stop(struct fp_dev *dev)
{
struct fp_img_dev *imgdev = dev->priv;
@@ -446,6 +497,14 @@ static int img_dev_identify_stop(struct fp_dev *dev, gboolean iterating)
return 0;
}
+static int img_dev_capture_stop(struct fp_dev *dev)
+{
+ struct fp_img_dev *imgdev = dev->priv;
+ BUG_ON(imgdev->action != IMG_ACTION_CAPTURE);
+ generic_acquire_stop(imgdev);
+ return 0;
+}
+
void fpi_img_driver_setup(struct fp_img_driver *idriver)
{
idriver->driver.type = DRIVER_IMAGING;
@@ -457,5 +516,7 @@ void fpi_img_driver_setup(struct fp_img_driver *idriver)
idriver->driver.verify_stop = img_dev_verify_stop;
idriver->driver.identify_start = img_dev_identify_start;
idriver->driver.identify_stop = img_dev_identify_stop;
+ idriver->driver.capture_start = img_dev_capture_start;
+ idriver->driver.capture_stop = img_dev_capture_stop;
}
diff --git a/libfprint/imagemagick.c b/libfprint/pixman.c
similarity index 56%
rename from libfprint/imagemagick.c
rename to libfprint/pixman.c
index 68e7146f..1b4ca06f 100644
--- a/libfprint/imagemagick.c
+++ b/libfprint/pixman.c
@@ -1,6 +1,7 @@
/*
* Imaging utility functions for libfprint
* Copyright (C) 2007-2008 Daniel Drake
+ * Copyright (C) 2013 Vasily Khoruzhick
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
@@ -17,50 +18,45 @@
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*/
-#include
-#include
+#include
+#include
#include "fp_internal.h"
struct fp_img *fpi_im_resize(struct fp_img *img, unsigned int w_factor, unsigned int h_factor)
{
- Image *mimg;
- Image *resized;
- ExceptionInfo exception;
- MagickBooleanType ret;
int new_width = img->width * w_factor;
int new_height = img->height * h_factor;
+ pixman_image_t *orig, *resized;
+ pixman_transform_t transform;
struct fp_img *newimg;
- /* It is possible to implement resizing using a simple algorithm, however
- * we use ImageMagick because it applies some kind of smoothing to the
- * result, which improves matching performances in my experiments. */
+ orig = pixman_image_create_bits(PIXMAN_a8, img->width, img->height, (uint32_t *)img->data, img->width);
+ resized = pixman_image_create_bits(PIXMAN_a8, new_width, new_height, NULL, new_width);
- if (!IsMagickInstantiated())
- InitializeMagick(NULL);
-
- GetExceptionInfo(&exception);
- mimg = ConstituteImage(img->width, img->height, "I", CharPixel, img->data,
- &exception);
-
- GetExceptionInfo(&exception);
- resized = ResizeImage(mimg, new_width, new_height, 0, 1.0, &exception);
+ pixman_transform_init_identity(&transform);
+ pixman_transform_scale(NULL, &transform, pixman_int_to_fixed(w_factor), pixman_int_to_fixed(h_factor));
+ pixman_image_set_transform(orig, &transform);
+ pixman_image_set_filter(orig, PIXMAN_FILTER_BILINEAR, NULL, 0);
+ pixman_image_composite32(PIXMAN_OP_SRC,
+ orig, /* src */
+ NULL, /* mask */
+ resized, /* dst */
+ 0, 0, /* src x y */
+ 0, 0, /* mask x y */
+ 0, 0, /* dst x y */
+ new_width, new_height /* width height */
+ );
newimg = fpi_img_new(new_width * new_height);
newimg->width = new_width;
newimg->height = new_height;
newimg->flags = img->flags;
- GetExceptionInfo(&exception);
- ret = ExportImagePixels(resized, 0, 0, new_width, new_height, "I",
- CharPixel, newimg->data, &exception);
- if (ret != MagickTrue) {
- fp_err("export failed");
- return NULL;
- }
+ memcpy(newimg->data, pixman_image_get_data(resized), new_width * new_height);
- DestroyImage(mimg);
- DestroyImage(resized);
+ pixman_image_unref(orig);
+ pixman_image_unref(resized);
return newimg;
}
diff --git a/libfprint/sync.c b/libfprint/sync.c
index ca2f302f..b3b28983 100644
--- a/libfprint/sync.c
+++ b/libfprint/sync.c
@@ -512,3 +512,100 @@ err:
return r;
}
+struct sync_capture_data {
+ gboolean populated;
+ int result;
+ struct fp_img *img;
+};
+
+static void sync_capture_cb(struct fp_dev *dev, int result, struct fp_img *img,
+ void *user_data)
+{
+ struct sync_capture_data *vdata = user_data;
+ vdata->result = result;
+ vdata->img = img;
+ vdata->populated = TRUE;
+}
+
+static void capture_stop_cb(struct fp_dev *dev, void *user_data)
+{
+ gboolean *stopped = user_data;
+ fp_dbg("");
+ *stopped = TRUE;
+}
+/** \ingroup dev
+ * Captures an \ref img "image" from a device. The returned image is the raw
+ * image provided by the device, you may wish to \ref img_std "standardize" it.
+ *
+ * If set, the unconditional flag indicates that the device should
+ * capture an image unconditionally, regardless of whether a finger is there
+ * or not. If unset, this function will block until a finger is detected on
+ * the sensor.
+ *
+ * \param dev the device
+ * \param unconditional whether to unconditionally capture an image, or to only capture when a finger is detected
+ * \param img a location to return the captured image. Must be freed with
+ * fp_img_free() after use.
+ * \return 0 on success, non-zero on error. -ENOTSUP indicates that either the
+ * unconditional flag was set but the device does not support this, or that the
+ * device does not support imaging.
+ * \sa fp_dev_supports_imaging()
+ */
+API_EXPORTED int fp_dev_img_capture(struct fp_dev *dev, int unconditional,
+ struct fp_img **img)
+{
+ struct sync_capture_data *vdata;
+ gboolean stopped = FALSE;
+ int r;
+
+ if (!dev->drv->capture_start) {
+ fp_dbg("image capture is not supported on %s device", dev->drv->name);
+ return -ENOTSUP;
+ }
+
+ fp_dbg("to be handled by %s", dev->drv->name);
+ vdata = g_malloc0(sizeof(struct sync_capture_data));
+ r = fp_async_capture_start(dev, unconditional, sync_capture_cb, vdata);
+ if (r < 0) {
+ fp_dbg("capture_start error %d", r);
+ g_free(vdata);
+ return r;
+ }
+
+ while (!vdata->populated) {
+ r = fp_handle_events();
+ if (r < 0) {
+ g_free(vdata);
+ goto err;
+ }
+ }
+
+ if (img)
+ *img = vdata->img;
+ else
+ fp_img_free(vdata->img);
+
+ r = vdata->result;
+ g_free(vdata);
+ switch (r) {
+ case FP_CAPTURE_COMPLETE:
+ fp_dbg("result: complete");
+ break;
+ case FP_CAPTURE_FAIL:
+ fp_dbg("result: fail");
+ break;
+ default:
+ fp_err("unrecognised return code %d", r);
+ r = -EINVAL;
+ }
+
+err:
+ fp_dbg("ending capture");
+ if (fp_async_capture_stop(dev, capture_stop_cb, &stopped) == 0)
+ while (!stopped)
+ if (fp_handle_events() < 0)
+ break;
+
+ return r;
+}
+