From 268d7318c6366d3fdc08e011f670ea3de0060ca6 Mon Sep 17 00:00:00 2001 From: Vasily Khoruzhick Date: Sun, 18 Nov 2012 11:44:05 +0300 Subject: [PATCH 5/5] lib: add AES1660 driver Initial implementation of AES1660 driver --- configure.ac | 14 +- libfprint/Makefile.am | 6 + libfprint/core.c | 3 + libfprint/drivers/aes1660.c | 716 ++++++++++++++ libfprint/drivers/aes1660.h | 2066 ++++++++++++++++++++++++++++++++++++++++ libfprint/drivers/driver_ids.h | 1 + libfprint/fp_internal.h | 3 + 7 files changed, 2808 insertions(+), 1 deletion(-) create mode 100644 libfprint/drivers/aes1660.c create mode 100644 libfprint/drivers/aes1660.h diff --git a/configure.ac b/configure.ac index 66806df..fa2de4d 100644 --- a/configure.ac +++ b/configure.ac @@ -23,7 +23,7 @@ AC_SUBST(lt_major) AC_SUBST(lt_revision) AC_SUBST(lt_age) -all_drivers="upeke2 upekts upektc upeksonly vcom5s uru4000 fdu2000 aes1610 aes2501 aes2550 aes4000 vfs101 vfs301" +all_drivers="upeke2 upekts upektc upeksonly vcom5s uru4000 fdu2000 aes1610 aes1660 aes2501 aes2550 aes4000 vfs101 vfs301" require_imaging='no' require_aeslib='no' @@ -35,6 +35,7 @@ enable_vcom5s='no' enable_uru4000='no' enable_fdu2000='no' enable_aes1610='no' +enable_aes1660='no' enable_aes2501='no' enable_aes2550='no' enable_aes4000='no' @@ -92,6 +93,11 @@ for driver in `echo ${drivers} | sed -e 's/,/ /g' -e 's/,$//g'`; do require_aeslib="yes" enable_aes1610="yes" ;; + aes1660) + AC_DEFINE([ENABLE_AES1660], [], [Build AuthenTec AES1660 driver]) + require_aeslib="yes" + enable_aes1660="yes" + ;; aes4000) AC_DEFINE([ENABLE_AES4000], [], [Build AuthenTec AES4000 driver]) require_aeslib="yes" @@ -117,6 +123,7 @@ AM_CONDITIONAL([ENABLE_VCOM5S], [test "$enable_vcom5s" = "yes"]) AM_CONDITIONAL([ENABLE_URU4000], [test "$enable_uru4000" = "yes"]) AM_CONDITIONAL([ENABLE_FDU2000], [test "$enable_fdu2000" = "yes"]) AM_CONDITIONAL([ENABLE_AES1610], [test "$enable_aes1610" = "yes"]) +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_AES4000], [test "$enable_aes4000" = "yes"]) @@ -295,6 +302,11 @@ if test x$enable_aes1610 != xno ; then else AC_MSG_NOTICE([ aes1610 driver disabled]) fi +if test x$enable_aes1660 != xno ; then + AC_MSG_NOTICE([** aes1660 driver enabled]) +else + AC_MSG_NOTICE([ aes1660 driver disabled]) +fi if test x$enable_aes2501 != xno ; then AC_MSG_NOTICE([** aes2501 driver enabled]) else diff --git a/libfprint/Makefile.am b/libfprint/Makefile.am index 7c5f182..fd82181 100644 --- a/libfprint/Makefile.am +++ b/libfprint/Makefile.am @@ -8,6 +8,7 @@ UPEKTC_SRC = drivers/upektc.c UPEKSONLY_SRC = drivers/upeksonly.c URU4000_SRC = drivers/uru4000.c AES1610_SRC = drivers/aes1610.c +AES1660_SRC = drivers/aes1660.c drivers/aes1660.h AES2501_SRC = drivers/aes2501.c drivers/aes2501.h AES2550_SRC = drivers/aes2550.c drivers/aes2550.h AES4000_SRC = drivers/aes4000.c @@ -23,6 +24,7 @@ EXTRA_DIST = \ $(UPEKSONLY_SRC) \ $(URU4000_SRC) \ $(AES1610_SRC) \ + $(AES1660_SRC) \ $(AES2501_SRC) \ $(AES2550_SRC) \ $(AES4000_SRC) \ @@ -122,6 +124,10 @@ if ENABLE_AES1610 DRIVER_SRC += $(AES1610_SRC) endif +if ENABLE_AES1660 +DRIVER_SRC += $(AES1660_SRC) +endif + if ENABLE_AES2501 DRIVER_SRC += $(AES2501_SRC) endif diff --git a/libfprint/core.c b/libfprint/core.c index 01a9cfa..ddab4aa 100644 --- a/libfprint/core.c +++ b/libfprint/core.c @@ -371,6 +371,9 @@ static struct fp_img_driver * const img_drivers[] = { #ifdef ENABLE_AES1610 &aes1610_driver, #endif +#ifdef ENABLE_AES1660 + &aes1660_driver, +#endif #ifdef ENABLE_VFS101 &vfs101_driver, #endif diff --git a/libfprint/drivers/aes1660.c b/libfprint/drivers/aes1660.c new file mode 100644 index 0000000..28a3a12 --- /dev/null +++ b/libfprint/drivers/aes1660.c @@ -0,0 +1,716 @@ +/* + * AuthenTec AES1660 driver for libfprint + * Copyright (C) 2007-2008 Daniel Drake + * Copyright (C) 2007 Cyrille Bagard + * Copyright (C) 2007-2012 Vasily Khoruzhick + * + * Based on AES2550 driver + * + * 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 "aes1660" + +#include + +#include +#include + +#include + +#include +#include + +#include "aes1660.h" +#include "driver_ids.h" + +static void start_capture(struct fp_img_dev *dev); +static void complete_deactivation(struct fp_img_dev *dev); + +#define EP_IN (1 | LIBUSB_ENDPOINT_IN) +#define EP_OUT (2 | LIBUSB_ENDPOINT_OUT) +#define BULK_TIMEOUT 4000 +#define FRAME_WIDTH 128 +#define FRAME_HEIGHT 8 +#define SCALE_FACTOR 2 + +#define min(a, b) (((a) < (b)) ? (a) : (b)) + +struct aes1660_dev { + GSList *strips; + size_t strips_len; + gboolean deactivating;; + struct aes1660_cmd *init_seq; + size_t init_seq_len; + unsigned int init_cmd_idx; + unsigned int init_seq_idx; + struct libusb_transfer *fd_data_transfer; + unsigned char buffer[AES1660_FRAME_SIZE + AES1660_HEADER_SIZE]; + size_t buffer_size; + size_t buffer_max; +}; + +static void aes1660_send_cmd_timeout(struct fpi_ssm *ssm, const unsigned char *cmd, + size_t cmd_len, libusb_transfer_cb_fn callback, int timeout) +{ + struct fp_img_dev *dev = ssm->priv; + struct libusb_transfer *transfer = libusb_alloc_transfer(0); + int r; + + if (!transfer) { + fpi_ssm_mark_aborted(ssm, -ENOMEM); + return; + } + + libusb_fill_bulk_transfer(transfer, dev->udev, EP_OUT, + (unsigned char *)cmd, cmd_len, + callback, ssm, timeout); + r = libusb_submit_transfer(transfer); + if (r < 0) { + fp_dbg("failed to submit transfer\n"); + libusb_free_transfer(transfer); + fpi_ssm_mark_aborted(ssm, -ENOMEM); + } +} + +static void aes1660_send_cmd(struct fpi_ssm *ssm, const unsigned char *cmd, + size_t cmd_len, libusb_transfer_cb_fn callback) +{ + return aes1660_send_cmd_timeout(ssm, cmd, cmd_len, callback, BULK_TIMEOUT); +} + +static void aes1660_read_response(struct fpi_ssm *ssm, size_t buf_len, + libusb_transfer_cb_fn callback) +{ + struct fp_img_dev *dev = ssm->priv; + struct libusb_transfer *transfer = libusb_alloc_transfer(0); + unsigned char *data; + int r; + + if (!transfer) { + fpi_ssm_mark_aborted(ssm, -ENOMEM); + return; + } + + data = g_malloc(buf_len); + libusb_fill_bulk_transfer(transfer, dev->udev, EP_IN, + data, buf_len, + callback, ssm, BULK_TIMEOUT); + + r = libusb_submit_transfer(transfer); + if (r < 0) { + fp_dbg("Failed to submit rx transfer: %d\n", r); + g_free(data); + libusb_free_transfer(transfer); + fpi_ssm_mark_aborted(ssm, r); + } +} + +static void aes1660_send_cmd_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 { + fp_dbg("tx transfer status: %d, actual_len: %.4x\n", + transfer->status, transfer->actual_length); + fpi_ssm_mark_aborted(ssm, -EIO); + } + libusb_free_transfer(transfer); +} + +static void aes1660_read_calibrate_data_cb(struct libusb_transfer *transfer) +{ + struct fpi_ssm *ssm = transfer->user_data; + unsigned char *data = transfer->buffer; + + if ((transfer->status != LIBUSB_TRANSFER_COMPLETED) || + (transfer->length != transfer->actual_length)) { + fpi_ssm_mark_aborted(ssm, -EIO); + goto out; + } + /* Calibrate response was read correctly? */ + if (data[AES1660_RESPONSE_TYPE_OFFSET] != AES1660_CALIBRATE_RESPONSE) { + fp_dbg("Bogus calibrate response: %.2x\n", data[0]); + fpi_ssm_mark_aborted(ssm, -EPROTO); + goto out; + } + + fpi_ssm_next_state(ssm); +out: + g_free(transfer->buffer); + libusb_free_transfer(transfer); +} + +/****** FINGER PRESENCE DETECTION ******/ + +enum finger_det_states { + FINGER_DET_SEND_LED_CMD, + FINGER_DET_SEND_FD_CMD, + FINGER_DET_READ_FD_DATA, + FINGER_DET_SET_IDLE, + FINGER_DET_NUM_STATES, +}; + +static void finger_det_read_fd_data_cb(struct libusb_transfer *transfer) +{ + struct fpi_ssm *ssm = transfer->user_data; + struct fp_img_dev *dev = ssm->priv; + struct aes1660_dev *aesdev = dev->priv; + unsigned char *data = transfer->buffer; + + aesdev->fd_data_transfer = NULL; + + if (transfer->status == LIBUSB_TRANSFER_CANCELLED) { + fp_dbg("Cancelling transfer...\n"); + fpi_ssm_next_state(ssm); + goto out; + } + + if ((transfer->status != LIBUSB_TRANSFER_COMPLETED) || + (transfer->length != transfer->actual_length)) { + fp_dbg("Failed to read FD data\n"); + fpi_ssm_mark_aborted(ssm, -EIO); + goto out; + } + + if (data[AES1660_RESPONSE_TYPE_OFFSET] != AES1660_FINGER_DET_RESPONSE) { + fp_dbg("Bogus FD response: %.2x\n", data[0]); + fpi_ssm_mark_aborted(ssm, -EPROTO); + goto out; + } + + if (data[AES1660_FINGER_PRESENT_OFFSET] == AES1660_FINGER_PRESENT || aesdev->deactivating) { + /* Finger present or we're deactivating... */ + fpi_ssm_next_state(ssm); + } else { + fp_dbg("Wait for finger returned %.2x as result\n", + data[AES1660_FINGER_PRESENT_OFFSET]); + fpi_ssm_jump_to_state(ssm, FINGER_DET_SEND_FD_CMD); + } +out: + g_free(data); + libusb_free_transfer(transfer); +} + +static void finger_det_set_idle_cmd_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_mark_completed(ssm); + } else { + fpi_ssm_mark_aborted(ssm, -EIO); + } + libusb_free_transfer(transfer); +} + +static void finger_det_sm_complete(struct fpi_ssm *ssm) +{ + struct fp_img_dev *dev = ssm->priv; + struct aes1660_dev *aesdev = dev->priv; + int err = ssm->error; + + fp_dbg("Finger detection completed"); + fpi_imgdev_report_finger_status(dev, TRUE); + fpi_ssm_free(ssm); + + if (aesdev->deactivating) + complete_deactivation(dev); + else if (err) + fpi_imgdev_session_error(dev, err); + else { + fpi_imgdev_report_finger_status(dev, TRUE); + start_capture(dev); + } +} + +static void finger_det_run_state(struct fpi_ssm *ssm) +{ + switch (ssm->cur_state) { + case FINGER_DET_SEND_LED_CMD: + aes1660_send_cmd(ssm, led_blink_cmd, sizeof(led_blink_cmd), + aes1660_send_cmd_cb); + break; + case FINGER_DET_SEND_FD_CMD: + aes1660_send_cmd_timeout(ssm, wait_for_finger_cmd, sizeof(wait_for_finger_cmd), + aes1660_send_cmd_cb, 0); + break; + case FINGER_DET_READ_FD_DATA: + /* Should return 4 byte of response */ + aes1660_read_response(ssm, 4, finger_det_read_fd_data_cb); + break; + case FINGER_DET_SET_IDLE: + aes1660_send_cmd(ssm, set_idle_cmd, sizeof(set_idle_cmd), + finger_det_set_idle_cmd_cb); + break; + } +} + +static void start_finger_detection(struct fp_img_dev *dev) +{ + struct fpi_ssm *ssm; + struct aes1660_dev *aesdev = dev->priv; + + if (aesdev->deactivating) { + complete_deactivation(dev); + return; + } + + ssm = fpi_ssm_new(dev->dev, finger_det_run_state, FINGER_DET_NUM_STATES); + ssm->priv = dev; + fpi_ssm_start(ssm, finger_det_sm_complete); +} + +/****** CAPTURE ******/ + +enum capture_states { + CAPTURE_SEND_LED_CMD, + CAPTURE_SEND_CAPTURE_CMD, + CAPTURE_READ_STRIPE_DATA, + CAPTURE_SET_IDLE, + CAPTURE_NUM_STATES, +}; + +/* Returns number of processed bytes */ +static int process_stripe_data(struct fpi_ssm *ssm, unsigned char *data) +{ + unsigned char *stripdata; + struct fp_img_dev *dev = ssm->priv; + struct aes1660_dev *aesdev = dev->priv; + + stripdata = g_malloc(FRAME_WIDTH * FRAME_HEIGHT / 2); /* 4 bits per pixel */ + if (!stripdata) { + fpi_ssm_mark_aborted(ssm, -ENOMEM); + return 1; + } + + fp_dbg("Processing frame %.2x %.2x", data[AES1660_IMAGE_OK_OFFSET], + data[AES1660_LAST_FRAME_OFFSET]); + + if (data[AES1660_IMAGE_OK_OFFSET] == AES1660_IMAGE_OK) { + memcpy(stripdata, data + AES1660_IMAGE_OFFSET, FRAME_WIDTH * FRAME_HEIGHT / 2); + + aesdev->strips = g_slist_prepend(aesdev->strips, stripdata); + aesdev->strips_len++; + return (data[AES1660_LAST_FRAME_OFFSET] & AES1660_LAST_FRAME_BIT); + } else { + return 0; + } + +} + +static void capture_set_idle_cmd_cb(struct libusb_transfer *transfer) +{ + struct fpi_ssm *ssm = transfer->user_data; + struct fp_img_dev *dev = ssm->priv; + struct aes1660_dev *aesdev = dev->priv; + + if ((transfer->status == LIBUSB_TRANSFER_COMPLETED) && + (transfer->length == transfer->actual_length)) { + struct fp_img *img, *tmp; + + aesdev->strips = g_slist_reverse(aesdev->strips); + tmp = aes_assemble(aesdev->strips, aesdev->strips_len, + FRAME_WIDTH, FRAME_HEIGHT); + g_slist_foreach(aesdev->strips, (GFunc) g_free, NULL); + g_slist_free(aesdev->strips); + aesdev->strips = NULL; + aesdev->strips_len = 0; + img = fpi_im_resize(tmp, SCALE_FACTOR, 1); + fp_img_free(tmp); + fpi_imgdev_image_captured(dev, img); + fpi_imgdev_report_finger_status(dev, FALSE); + fpi_ssm_mark_completed(ssm); + } else { + fpi_ssm_mark_aborted(ssm, -EIO); + } + libusb_free_transfer(transfer); +} + +static void capture_read_stripe_data_cb(struct libusb_transfer *transfer) +{ + struct fpi_ssm *ssm = transfer->user_data; + struct fp_img_dev *dev = ssm->priv; + struct aes1660_dev *aesdev = dev->priv; + unsigned char *data = transfer->buffer; + int finger_missing = 0; + size_t copied, actual_len = transfer->actual_length; + + if (transfer->status != LIBUSB_TRANSFER_COMPLETED) { + fpi_ssm_mark_aborted(ssm, -EIO); + goto out; + } + + fp_dbg("Got %d bytes of data", actual_len); + do { + copied = min(aesdev->buffer_max - aesdev->buffer_size, actual_len); + memcpy(aesdev->buffer + aesdev->buffer_size, + data, + copied); + actual_len -= copied; + data += copied; + aesdev->buffer_size += copied; + fp_dbg("Copied %.4x bytes into internal buffer", + copied); + if (aesdev->buffer_size == aesdev->buffer_max) { + if (aesdev->buffer_max == AES1660_HEADER_SIZE) { + aesdev->buffer_max = aesdev->buffer[AES1660_RESPONSE_SIZE_LSB_OFFSET] + + (aesdev->buffer[AES1660_RESPONSE_SIZE_MSB_OFFSEt] << 8) + AES1660_HEADER_SIZE; + fp_dbg("Got frame, type %.2x size %.4x", + aesdev->buffer[AES1660_RESPONSE_TYPE_OFFSET], + aesdev->buffer_max); + continue; + } else { + finger_missing |= process_stripe_data(ssm, aesdev->buffer); + aesdev->buffer_max = AES1660_HEADER_SIZE; + aesdev->buffer_size = 0; + } + } + } while (actual_len); + + fp_dbg("finger %s\n", finger_missing ? "missing" : "present"); + + if (finger_missing) { + fpi_ssm_next_state(ssm); + } else { + fpi_ssm_jump_to_state(ssm, CAPTURE_READ_STRIPE_DATA); + } +out: + g_free(transfer->buffer); + libusb_free_transfer(transfer); +} + +static void capture_run_state(struct fpi_ssm *ssm) +{ + struct fp_img_dev *dev = ssm->priv; + struct aes1660_dev *aesdev = dev->priv; + + switch (ssm->cur_state) { + case CAPTURE_SEND_LED_CMD: + aes1660_send_cmd(ssm, led_solid_cmd, sizeof(led_solid_cmd), + aes1660_send_cmd_cb); + break; + case CAPTURE_SEND_CAPTURE_CMD: + aesdev->buffer_size = 0; + aesdev->buffer_max = AES1660_HEADER_SIZE; + aes1660_send_cmd(ssm, start_imaging_cmd, sizeof(start_imaging_cmd), + aes1660_send_cmd_cb); + break; + case CAPTURE_READ_STRIPE_DATA: + aes1660_read_response(ssm, AES1660_BULK_TRANSFER_SIZE, + capture_read_stripe_data_cb); + break; + case CAPTURE_SET_IDLE: + fp_dbg("Got %d frames\n", aesdev->strips_len); + aes1660_send_cmd(ssm, set_idle_cmd, sizeof(set_idle_cmd), + capture_set_idle_cmd_cb); + break; + } +} + +static void capture_sm_complete(struct fpi_ssm *ssm) +{ + struct fp_img_dev *dev = ssm->priv; + struct aes1660_dev *aesdev = dev->priv; + int err = ssm->error; + + fp_dbg("Capture completed"); + fpi_ssm_free(ssm); + + if (aesdev->deactivating) + complete_deactivation(dev); + else if (err) + fpi_imgdev_session_error(dev, err); + else + start_finger_detection(dev); +} + +static void start_capture(struct fp_img_dev *dev) +{ + struct aes1660_dev *aesdev = dev->priv; + struct fpi_ssm *ssm; + + if (aesdev->deactivating) { + complete_deactivation(dev); + return; + } + + ssm = fpi_ssm_new(dev->dev, capture_run_state, CAPTURE_NUM_STATES); + fp_dbg(""); + ssm->priv = dev; + fpi_ssm_start(ssm, capture_sm_complete); +} + +/****** INITIALIZATION/DEINITIALIZATION ******/ + +enum activate_states { + ACTIVATE_SET_IDLE, + ACTIVATE_SEND_READ_ID_CMD, + ACTIVATE_READ_ID, + ACTIVATE_SEND_CALIBRATE_CMD, + ACTIVATE_READ_CALIBRATE_DATA, + ACTIVATE_SEND_INIT_CMD, + ACTIVATE_READ_INIT_RESPONSE, + ACTIVATE_NUM_STATES, +}; + +static void activate_read_id_cb(struct libusb_transfer *transfer) +{ + struct fpi_ssm *ssm = transfer->user_data; + struct fp_img_dev *dev = ssm->priv; + struct aes1660_dev *aesdev = dev->priv; + unsigned char *data = transfer->buffer; + + if ((transfer->status != LIBUSB_TRANSFER_COMPLETED) || + (transfer->length != transfer->actual_length)) { + fp_dbg("read_id cmd failed\n"); + fpi_ssm_mark_aborted(ssm, -EIO); + goto out; + } + /* ID was read correctly */ + if (data[0] == 0x07) { + fp_dbg("Sensor device id: %.2x%2x, bcdDevice: %.2x.%.2x, init status: %.2x\n", + data[4], data[3], data[5], data[6], data[7]); + } else { + fp_dbg("Bogus read ID response: %.2x\n", data[AES1660_RESPONSE_TYPE_OFFSET]); + fpi_ssm_mark_aborted(ssm, -EPROTO); + goto out; + } + + switch (aesdev->init_seq_idx) { + case 0: + aesdev->init_seq = aes1660_init_1, + aesdev->init_seq_len = array_n_elements(aes1660_init_1); + aesdev->init_seq_idx = 1; + aesdev->init_cmd_idx = 0; + /* Do calibration only after 1st init sequence */ + fpi_ssm_jump_to_state(ssm, ACTIVATE_SEND_INIT_CMD); + break; + case 1: + aesdev->init_seq = aes1660_init_2, + aesdev->init_seq_len = array_n_elements(aes1660_init_2); + aesdev->init_seq_idx = 2; + aesdev->init_cmd_idx = 0; + fpi_ssm_next_state(ssm); + break; + default: + fp_dbg("Failed to init device! init status: %.2x\n", data[7]); + fpi_ssm_mark_aborted(ssm, -EPROTO); + break; + + } + +out: + g_free(transfer->buffer); + libusb_free_transfer(transfer); +} + +static void activate_read_init_cb(struct libusb_transfer *transfer) +{ + struct fpi_ssm *ssm = transfer->user_data; + struct fp_img_dev *dev = ssm->priv; + struct aes1660_dev *aesdev = dev->priv; + unsigned char *data = transfer->buffer; + + fp_dbg("read_init_cb\n"); + + if ((transfer->status != LIBUSB_TRANSFER_COMPLETED) || + (transfer->length != transfer->actual_length)) { + fp_dbg("read_init transfer status: %d, actual_len: %d\n", transfer->status, transfer->actual_length); + fpi_ssm_mark_aborted(ssm, -EIO); + goto out; + } + /* ID was read correctly */ + if (data[0] != 0x42 || data[3] != 0x01) { + fp_dbg("Bogus read init response: %.2x %.2x\n", data[0], + data[3]); + fpi_ssm_mark_aborted(ssm, -EPROTO); + goto out; + } + aesdev->init_cmd_idx++; + if (aesdev->init_cmd_idx == aesdev->init_seq_len) { + if (aesdev->init_seq_idx < 2) + fpi_ssm_jump_to_state(ssm, ACTIVATE_SEND_READ_ID_CMD); + else + fpi_ssm_mark_completed(ssm); + goto out; + } + + fpi_ssm_jump_to_state(ssm, ACTIVATE_SEND_INIT_CMD); +out: + g_free(transfer->buffer); + libusb_free_transfer(transfer); +} + +static void activate_run_state(struct fpi_ssm *ssm) +{ + struct fp_img_dev *dev = ssm->priv; + struct aes1660_dev *aesdev = dev->priv; + + switch (ssm->cur_state) { + case ACTIVATE_SET_IDLE: + aesdev->init_seq_idx = 0; + fp_dbg("Activate: set idle\n"); + aes1660_send_cmd(ssm, set_idle_cmd, sizeof(set_idle_cmd), + aes1660_send_cmd_cb); + break; + case ACTIVATE_SEND_READ_ID_CMD: + fp_dbg("Activate: read ID\n"); + aes1660_send_cmd(ssm, read_id_cmd, sizeof(read_id_cmd), + aes1660_send_cmd_cb); + break; + case ACTIVATE_READ_ID: + /* Should return 8-byte response */ + aes1660_read_response(ssm, 8, activate_read_id_cb); + break; + case ACTIVATE_SEND_INIT_CMD: + fp_dbg("Activate: send init seq #%d cmd #%d\n", + aesdev->init_seq_idx, + aesdev->init_cmd_idx); + aes1660_send_cmd(ssm, + aesdev->init_seq[aesdev->init_cmd_idx].cmd, + aesdev->init_seq[aesdev->init_cmd_idx].len, + aes1660_send_cmd_cb); + break; + case ACTIVATE_READ_INIT_RESPONSE: + fp_dbg("Activate: read init response\n"); + /* Should return 4-byte response */ + aes1660_read_response(ssm, 4, activate_read_init_cb); + break; + case ACTIVATE_SEND_CALIBRATE_CMD: + aes1660_send_cmd(ssm, calibrate_cmd, sizeof(calibrate_cmd), + aes1660_send_cmd_cb); + break; + case ACTIVATE_READ_CALIBRATE_DATA: + /* Should return 4-byte response */ + aes1660_read_response(ssm, 4, aes1660_read_calibrate_data_cb); + break; + } +} + +static void activate_sm_complete(struct fpi_ssm *ssm) +{ + struct fp_img_dev *dev = ssm->priv; + int err = ssm->error; + fp_dbg("status %d", err); + fpi_imgdev_activate_complete(dev, err); + fpi_ssm_free(ssm); + + if (!err) + start_finger_detection(dev); +} + +static int dev_activate(struct fp_img_dev *dev, enum fp_imgdev_state state) +{ + struct fpi_ssm *ssm = fpi_ssm_new(dev->dev, activate_run_state, + ACTIVATE_NUM_STATES); + ssm->priv = dev; + fpi_ssm_start(ssm, activate_sm_complete); + return 0; +} + +static void dev_deactivate(struct fp_img_dev *dev) +{ + struct aes1660_dev *aesdev = dev->priv; + + if (aesdev->fd_data_transfer) + libusb_cancel_transfer(aesdev->fd_data_transfer); + + aesdev->deactivating = TRUE; +} + +static void complete_deactivation(struct fp_img_dev *dev) +{ + struct aes1660_dev *aesdev = dev->priv; + fp_dbg(""); + + aesdev->deactivating = FALSE; + g_slist_free(aesdev->strips); + aesdev->strips = NULL; + aesdev->strips_len = 0; + fpi_imgdev_deactivate_complete(dev); +} + +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 aes1660_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 const struct usb_id id_table[] = { + { .vendor = 0x08ff, .product = 0x1660 }, + { .vendor = 0x08ff, .product = 0x1680 }, + { .vendor = 0x08ff, .product = 0x1681 }, + { .vendor = 0x08ff, .product = 0x1682 }, + { .vendor = 0x08ff, .product = 0x1683 }, + { .vendor = 0x08ff, .product = 0x1684 }, + { .vendor = 0x08ff, .product = 0x1685 }, + { .vendor = 0x08ff, .product = 0x1686 }, + { .vendor = 0x08ff, .product = 0x1687 }, + { .vendor = 0x08ff, .product = 0x1688 }, + { .vendor = 0x08ff, .product = 0x1689 }, + { .vendor = 0x08ff, .product = 0x168a }, + { .vendor = 0x08ff, .product = 0x168b }, + { .vendor = 0x08ff, .product = 0x168c }, + { .vendor = 0x08ff, .product = 0x168d }, + { .vendor = 0x08ff, .product = 0x168e }, + { .vendor = 0x08ff, .product = 0x168f }, + { 0, 0, 0, }, +}; + +struct fp_img_driver aes1660_driver = { + .driver = { + .id = AES1660_ID, + .name = FP_COMPONENT, + .full_name = "AuthenTec AES1660", + .id_table = id_table, + .scan_type = FP_SCAN_TYPE_SWIPE, + }, + .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, + + .open = dev_init, + .close = dev_deinit, + .activate = dev_activate, + .deactivate = dev_deactivate, +}; diff --git a/libfprint/drivers/aes1660.h b/libfprint/drivers/aes1660.h new file mode 100644 index 0000000..80f9844 --- /dev/null +++ b/libfprint/drivers/aes1660.h @@ -0,0 +1,2066 @@ +/* + * AuthenTec AES1660 driver for libfprint + * Copyright (c) 2012 Vasily Khoruzhick + * Based on USB logs from Andreas Loos + * + * 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 __AES1660_H +#define __AES1660_H + +#define AES1660_FRAME_SIZE 0x244 +#define AES1660_HEADER_SIZE 3 +#define AES1660_RESPONSE_TYPE_OFFSET 0x00 +#define AES1660_RESPONSE_SIZE_LSB_OFFSET 0x01 +#define AES1660_RESPONSE_SIZE_MSB_OFFSEt 0x02 + +#define AES1660_CALIBRATE_RESPONSE 0x06 +#define AES1660_FINGER_DET_RESPONSE 0x40 +#define AES1660_FINGER_PRESENT_OFFSET 0x03 +#define AES1660_FINGER_PRESENT 0x01 + +#define AES1660_IMAGE_OK_OFFSET 0x03 +#define AES1660_IMAGE_OK 0x0d +#define AES1660_LAST_FRAME_OFFSET 0x04 +#define AES1660_LAST_FRAME_BIT 0x01 + +#define AES1660_IMAGE_OFFSET 43 + +#define AES1660_BULK_TRANSFER_SIZE 4096 + +struct aes1660_cmd { + const unsigned char *cmd; + size_t len; +}; + +/* First init sequence, 0x07 cmd returns following before INIT1: + * { 0x07, 0x05, 0x00, 0x8f, 0x16, 0x25, 0x01, 0x00 } + */ + +/* INIT1 */ +static const unsigned char pkt107[] = { +0x44, 0x02, 0x00, 0x04, 0x00, +0x0d, 0x23, +0x42, 0xca, 0x00, +0x00, 0x20, 0x23, +0xff, 0x3f, 0x1d, 0xc1, 0x2e, 0xa3, 0xbf, 0xc2, +0x2e, 0x00, 0xdf, 0xff, 0x2d, 0x02, 0x5a, 0xbf, +0x22, 0xc1, 0x2e, 0xa3, 0xbf, 0x02, 0xcf, 0x0f, +0x1c, 0x10, 0x18, 0x26, 0x83, 0xc8, 0x46, 0x00, +0x5b, 0x01, 0x0c, 0xa2, 0x32, 0xa8, 0xcf, 0xf1, +0x1c, 0x0c, 0x18, 0xa8, 0xaf, 0xaf, 0x31, 0x0a, +0x3a, 0x5d, 0xcf, 0x30, 0x1c, 0x05, 0x55, 0x5d, +0x41, 0x03, 0x5b, 0x5d, 0xcf, 0xfc, 0x1c, 0x01, +0x18, 0x5d, 0xaf, 0x02, 0x43, 0x00, 0x2e, 0x09, +0x5a, 0x0c, 0xef, 0x56, 0xaf, 0x2e, 0x23, 0x02, +0x2e, 0x0b, 0x87, 0x83, 0x23, 0x84, 0x23, 0x81, +0x23, 0x82, 0x23, 0x24, 0x23, 0x0a, 0xef, 0xbf, +0x22, 0x00, 0x2e, 0xa9, 0x8b, 0x57, 0x23, 0x3c, +0x23, 0xf9, 0x34, 0x6b, 0x81, 0x64, 0xef, 0x64, +0xaf, 0x09, 0x88, 0xdf, 0xef, 0x27, 0xff, 0xd6, +0xaf, 0xd7, 0xbf, 0x46, 0xef, 0x46, 0xaf, 0x2a, +0xef, 0x2a, 0xaf, 0x05, 0x81, 0x05, 0x27, 0x10, +0xef, 0x99, 0xaf, 0x9b, 0xaf, 0x04, 0xaf, 0x3d, +0x23, 0x44, 0xef, 0x20, 0xff, 0x1a, 0x27, 0x05, +0xef, 0x27, 0xff, 0x06, 0x27, 0x05, 0x27, 0x9c, +0xcf, 0xdf, 0x96, 0xfe, 0xef, 0x27, 0xff, 0x19, +0x27, 0x65, 0xdf, 0xe1, 0x22, 0x1c, 0x55, 0xe0, +0x97, 0xbf, 0x03, 0x19, 0x5e, 0xfe, 0x0c, 0x9f, +0x22, 0x0f, 0xff, 0xe1, 0x22, 0x10, 0x55, 0x20, +0x00, 0x0e, 0x52, 0x82, 0x03, 0x03, 0x53 +}; + +static const unsigned char pkt112[] = { +0x42, 0xca, 0x00, +0x64, 0x20, 0xfe, 0x0d, 0x7f, +0x20, 0xf6, 0x55, 0x08, 0x50, 0x5f, 0x90, 0x82, +0x01, 0x1f, 0x90, 0xc1, 0x97, 0xa0, 0x01, 0x82, +0x01, 0xdf, 0x21, 0x80, 0x03, 0x00, 0x5e, 0x3f, +0x20, 0x29, 0xbf, 0x03, 0x0c, 0x05, 0x27, 0x01, +0x0c, 0x10, 0xff, 0x29, 0xbf, 0x05, 0x27, 0x9a, +0xcf, 0xdf, 0x96, 0xe0, 0xef, 0x27, 0xff, 0x19, +0x27, 0xfe, 0x0c, 0x9f, 0x22, 0x00, 0xff, 0xe1, +0x22, 0x10, 0x55, 0x20, 0x00, 0x0e, 0x52, 0x82, +0x03, 0x03, 0x53, 0x02, 0x0d, 0x3f, 0x20, 0x0f, +0x1f, 0xf5, 0x55, 0x5f, 0x90, 0x82, 0x01, 0x1f, +0x90, 0xc1, 0x97, 0xa0, 0x01, 0x82, 0x01, 0xdf, +0x21, 0x80, 0x03, 0x02, 0x5e, 0x7f, 0x20, 0x00, +0x53, 0xbf, 0x22, 0x29, 0xcf, 0xbf, 0x03, 0x01, +0x5e, 0x5f, 0x20, 0xdf, 0x9f, 0x28, 0xbf, 0x03, +0x0c, 0x05, 0x27, 0x24, 0xcf, 0x10, 0xdf, 0xbf, +0x01, 0x06, 0x1e, 0xe1, 0x2f, 0xe6, 0x5c, 0xdf, +0x2d, 0x00, 0x5b, 0x9f, 0x22, 0xdf, 0x96, 0xc8, +0xef, 0x20, 0xff, 0x1d, 0x00, 0x00, 0x13, 0x1a, +0x27, 0x07, 0x27, 0x9b, 0x22, 0xdf, 0x96, 0xbb, +0xcf, 0x1a, 0x88, 0xbb, 0xcf, 0x1b, 0x88, 0x01, +0x0f, 0xbc, 0xcf, 0x15, 0x88, 0xbc, 0xcf, 0x16, +0x88, 0x01, 0x0f, 0xbd, 0xcf, 0x10, 0x88, 0xbd, +0xcf, 0x11, 0x88, 0x01, 0x0f, 0xbe, 0xcf, 0x0b, +0x88, 0xbe, 0xcf, 0x0c, 0x88, 0x01, 0x0c, 0xdd, +0x97, 0x25, 0xaf, 0x05, 0x27 +}; + +static const unsigned char pkt116[] = { +0x42, 0xca, 0x00, +0xc8, 0x20, 0xff, 0x00, 0xab, +0x00, 0x72, 0x00, 0x4c, 0x00, 0x33, 0x00, 0x22, +0x00, 0x09, 0x88, 0xbf, 0x9d, 0x05, 0x27, 0x09, +0x27, 0x05, 0x88, 0xff, 0x97, 0x09, 0x27, 0xf6, +0x9f, 0x5f, 0x02, 0xbf, 0x9d, 0x05, 0x27, 0x0f, +0x1c, 0xc0, 0x9f, 0x8a, 0x80, 0x80, 0x10, 0x00, +0x13, 0x0f, 0x1d, 0xc1, 0x03, 0x00, 0x5f, 0x7f, +0x90, 0x05, 0x27, 0x53, 0x80, 0x2b, 0x0d, 0x05, +0x27, 0x9f, 0x22, 0x8f, 0xaf, 0x67, 0x2e, 0xe0, +0xdf, 0x04, 0x1e, 0x00, 0x52, 0x8f, 0x30, 0x67, +0x2e, 0xe1, 0xdf, 0xdf, 0x22, 0x00, 0x54, 0x8f, +0x30, 0x67, 0x2e, 0xfe, 0xdf, 0x04, 0x1e, 0x00, +0x52, 0x8f, 0x31, 0x67, 0x2e, 0xff, 0xdf, 0xdf, +0x22, 0x00, 0x54, 0x8f, 0x31, 0x8f, 0xcf, 0x03, +0x1c, 0x03, 0x1e, 0x00, 0x55, 0x0c, 0x27, 0x0d, +0x27, 0x4a, 0xcf, 0xdf, 0x96, 0x10, 0xcf, 0x5f, +0xdf, 0xbf, 0x03, 0x02, 0x5f, 0x5f, 0xcf, 0x10, +0xaf, 0x04, 0x50, 0x5e, 0xdf, 0xbf, 0x03, 0x01, +0x53, 0x5e, 0xcf, 0x10, 0xaf, 0x46, 0x88, 0x01, +0x2e, 0x1e, 0x80, 0xdd, 0x97, 0x0a, 0x40, 0x1c, +0x5a, 0x37, 0x43, 0x0b, 0x5b, 0xe2, 0xcf, 0x0f, +0x1c, 0x06, 0x1e, 0x07, 0x52, 0x62, 0xdf, 0x18, +0x1f, 0x07, 0x53, 0x04, 0x16, 0xe2, 0xaf, 0x04, +0x11, 0x62, 0xbf, 0x02, 0x50, 0x62, 0xcf, 0xdf, +0x22, 0x0e, 0x54, 0x0e, 0x88, 0x62, 0xdf, 0xbf, +0x03, 0x04, 0x53, 0x62, 0xaf +}; + +static const unsigned char pkt120[] = { +0x42, 0xca, 0x00, +0x2c, 0x21, 0xdf, 0x01, 0xe2, +0xcf, 0x3f, 0x00, 0xe2, 0xaf, 0x0e, 0x88, 0x4a, +0xdf, 0x3f, 0x00, 0x4a, 0xaf, 0x00, 0x2e, 0xc4, +0x8d, 0x05, 0x27, 0xff, 0xef, 0x4a, 0xdf, 0xbf, +0x01, 0x0a, 0x88, 0xa1, 0x27, 0x5f, 0x21, 0x7f, +0x20, 0xfb, 0x55, 0x05, 0x27, 0x62, 0xcf, 0x03, +0x88, 0x1f, 0x22, 0x7f, 0x20, 0xfc, 0x55, 0x05, +0x27, 0x10, 0xdf, 0x02, 0x1f, 0x02, 0x5e, 0x04, +0xff, 0x00, 0x2e, 0x0a, 0x50, 0x05, 0x1f, 0x02, +0x5e, 0x03, 0xff, 0x00, 0x2e, 0x05, 0x50, 0x06, +0x1f, 0x02, 0x5e, 0x02, 0xff, 0x00, 0x2e, 0x00, +0x50, 0x01, 0xff, 0x05, 0x27, 0x10, 0xcf, 0x60, +0xff, 0x3f, 0x00, 0x21, 0xff, 0x00, 0x13, 0x1a, +0x27, 0x07, 0x27, 0x05, 0x27, 0x01, 0x00, 0x02, +0x57, 0x42, 0x87, 0x52, 0x80, 0x92, 0x81, 0xd2, +0x6c, 0xe2, 0x80, 0xf2, 0x80, 0xf6, 0x7b, 0xfa, +0x7e, 0xfe, 0x8b, 0xf9, 0x45, 0x04, 0x5a, 0x40, +0xef, 0xf9, 0x44, 0x03, 0x5b, 0x80, 0xef, 0x01, +0x50, 0x41, 0x2e, 0x7e, 0xdf, 0x4d, 0xaf, 0x05, +0x27, 0x28, 0xff, 0x54, 0xef, 0x19, 0x27, 0x4d, +0x26, 0xe0, 0x2f, 0xfb, 0x54, 0x27, 0xff, 0xe0, +0xef, 0x1b, 0x27, 0x10, 0xef, 0x06, 0xaf, 0xfc, +0x97, 0xfc, 0x9f, 0x1c, 0x82, 0x1c, 0x82, 0x1a, +0x27, 0x4d, 0xdf, 0x6d, 0x80, 0x5f, 0x9f, 0x06, +0x25, 0xf5, 0x55, 0x05, 0x27, 0x26, 0x1f, 0x00, +0x5f, 0xbf, 0x22, 0xff, 0x96 +}; + +static const unsigned char pkt124[] = { +0x42, 0xac, 0x00, +0x90, 0x21, 0x99, 0xef, 0x21, +0xff, 0x1d, 0x00, 0x00, 0x13, 0x1a, 0x27, 0x07, +0x27, 0x1a, 0x27, 0xd6, 0x97, 0x05, 0x27, 0xa3, +0x01, 0xa4, 0x01, 0xa3, 0x01, 0x2e, 0x00, 0xb0, +0x00, 0xb1, 0x00, 0xb2, 0x00, 0xb3, 0x00, 0xb4, +0x00, 0xb5, 0x00, 0xb6, 0x00, 0xb7, 0x00, 0xb8, +0x00, 0xb9, 0x00, 0xba, 0x00, 0x56, 0x00, 0xae, +0x00, 0x54, 0x01, 0x44, 0x01, 0x55, 0x01, 0x44, +0x01, 0xbb, 0x00, 0xbc, 0x00, 0xbd, 0x00, 0xbe, +0x00, 0x83, 0x00, 0x84, 0x00, 0x81, 0x00, 0x82, +0x00, 0x24, 0x00, 0x44, 0x01, 0xdb, 0x00, 0xdc, +0x00, 0xdd, 0x00, 0xde, 0x00, 0x04, 0x00, 0x9b, +0x00, 0x99, 0x00, 0x9e, 0x00, 0x10, 0xef, 0xe6, +0x81, 0x65, 0xaf, 0x10, 0xef, 0xe6, 0x81, 0x9c, +0xaf, 0x10, 0xef, 0xe6, 0x81, 0x9a, 0xaf, 0x05, +0x27, 0xe5, 0x31, 0x1d, 0x81, 0xe5, 0x39, 0x05, +0x27, 0xc8, 0x46, 0x0b, 0x5b, 0xd3, 0x45, 0xfd, +0x5a, 0xd3, 0x45, 0xfb, 0x5a, 0xd3, 0x45, 0xf9, +0x5a, 0x41, 0x2e, 0xa1, 0xdf, 0x9f, 0x28, 0x41, +0x2e, 0xa1, 0xbf, 0x00, 0x88, 0x05, 0x27, 0x9f, +0x22, 0xbf, 0x22, 0x1f, 0x20, 0xfd, 0x53, 0x3f, +0x20, 0x14, 0x1f, 0xfa, 0x55, 0x05, 0x27 +}; + +static const unsigned char pkt128[] = { +0x42, 0xca, 0x00, +0xe5, 0x21, 0x25, 0x85, 0x01, +0x1e, 0x17, 0x55, 0xdc, 0x8a, 0x41, 0x2e, 0x53, +0xdf, 0xc1, 0x2e, 0x79, 0xdf, 0xff, 0x96, 0xdf, +0x96, 0x41, 0x2e, 0x55, 0xdf, 0xc1, 0x2e, 0x78, +0xdf, 0x9d, 0x01, 0x5d, 0x01, 0xff, 0x22, 0x00, +0x54, 0xff, 0xef, 0x2e, 0xaf, 0x05, 0x27, 0x07, +0x80, 0x9f, 0x22, 0xff, 0xaf, 0x00, 0x2e, 0x5d, +0x89, 0x05, 0x27, 0x03, 0x1e, 0x3c, 0x55, 0xaf, +0x8a, 0xa1, 0xcf, 0xfe, 0x1c, 0xa1, 0xaf, 0x05, +0x81, 0x47, 0x81, 0x76, 0x88, 0xff, 0x96, 0xdf, +0x96, 0xa1, 0xcf, 0x01, 0x18, 0xa1, 0xaf, 0x05, +0x81, 0x64, 0xef, 0xbf, 0x22, 0xbd, 0x80, 0x47, +0x81, 0x6b, 0x88, 0xff, 0x96, 0xdf, 0x96, 0x9b, +0x22, 0x14, 0x1e, 0x03, 0x53, 0xff, 0x22, 0x01, +0x55, 0x00, 0x20, 0x0a, 0x50, 0xc3, 0x97, 0xc4, +0x9f, 0x81, 0x01, 0x42, 0x01, 0x03, 0x52, 0xfa, +0x1e, 0x03, 0x53, 0xff, 0x22, 0x01, 0x55, 0x00, +0x20, 0xf2, 0x50, 0x00, 0x2e, 0xf0, 0x8b, 0x03, +0xcf, 0x7f, 0x1c, 0xff, 0xaf, 0x05, 0xef, 0xff, +0xaf, 0x00, 0xef, 0xff, 0xaf, 0xdd, 0x97, 0xff, +0xaf, 0xc2, 0x97, 0xff, 0xaf, 0xc3, 0x97, 0xff, +0xaf, 0xc0, 0x97, 0xff, 0xaf, 0xc1, 0x97, 0xff, +0xaf, 0x04, 0x0c, 0x00, 0x2e, 0x5d, 0x89, 0x05, +0x27, 0x06, 0x1e, 0x00, 0x55, 0x0f, 0x27, 0x0a, +0x1e, 0x07, 0x55, 0x00, 0x88, 0x66, 0x76, 0x3b, +0x30, 0x07, 0x35, 0xff, 0xff +}; + +static const unsigned char pkt133[] = { +0x42, 0xc2, 0x00, +0x49, 0x22, 0xc2, 0xbf, 0x0d, +0x27, 0x0c, 0x27, 0x0d, 0x1e, 0x02, 0x55, 0x28, +0x85, 0xf5, 0x5b, 0x7b, 0x76, 0x12, 0x1e, 0x07, +0x55, 0xdc, 0xef, 0x05, 0xff, 0x1a, 0x27, 0x56, +0xdf, 0x3f, 0x20, 0x6d, 0x80, 0x3c, 0xaf, 0x05, +0x27, 0x13, 0x1e, 0x01, 0x55, 0x3c, 0x23, 0x05, +0x27, 0x23, 0x1e, 0x0c, 0x55, 0x00, 0xef, 0x02, +0xff, 0x19, 0x27, 0xbf, 0x22, 0x20, 0xef, 0x7f, +0x9f, 0x5f, 0x20, 0xfc, 0x55, 0xf0, 0x81, 0x9f, +0x22, 0x41, 0x2e, 0xa3, 0xbf, 0x05, 0x27, 0x30, +0x1e, 0x0e, 0x55, 0x7e, 0xef, 0xff, 0xaf, 0x02, +0xef, 0xff, 0xaf, 0x00, 0xef, 0xff, 0xaf, 0xff, +0xef, 0x17, 0xff, 0x1a, 0x27, 0x07, 0x27, 0xff, +0xaf, 0xff, 0xbf, 0x00, 0x2e, 0x5d, 0x89, 0x05, +0x27, 0xcb, 0x74, 0xc9, 0xcf, 0xf3, 0x1c, 0x04, +0x18, 0xc9, 0xaf, 0x39, 0x81, 0x10, 0xff, 0xff, +0xef, 0xc1, 0x2e, 0x7c, 0xbf, 0x41, 0x2e, 0x7b, +0xbf, 0x02, 0xef, 0x41, 0x2e, 0x7a, 0xbf, 0xc9, +0x31, 0x18, 0xef, 0xc0, 0xaf, 0x04, 0x27, 0x41, +0x2e, 0x7a, 0xdf, 0xdf, 0x2d, 0x08, 0x5b, 0x01, +0xef, 0x41, 0x2e, 0x7a, 0xbf, 0xc0, 0x23, 0x18, +0xef, 0xc1, 0xaf, 0xcb, 0xcf, 0xcc, 0xdf, 0x05, +0x27, 0xc9, 0x30, 0x01, 0xef, 0x41, 0x2e, 0x7a, +0xbf, 0xc0, 0x23, 0x18, 0xef, 0xc1, 0xaf, 0x9f, +0x22, 0xbf, 0x22, 0x05, 0x27 +}; + +static const unsigned char pkt136[] = { +0x42, 0xca, 0x00, +0xa9, 0x22, 0x25, 0x85, 0x44, +0x1e, 0x01, 0x55, 0xe2, 0x2f, 0x7d, 0x50, 0x49, +0x1e, 0x02, 0x55, 0xe2, 0x2f, 0x79, 0x50, 0x05, +0x27, 0x4a, 0x1e, 0x01, 0x55, 0xe2, 0x2f, 0x74, +0x50, 0x4e, 0x1e, 0x01, 0x55, 0x00, 0x2e, 0xbb, +0x79, 0x4f, 0x1e, 0x00, 0x55, 0x7d, 0x78, 0x55, +0x1e, 0x00, 0x55, 0x05, 0x27, 0x58, 0x1e, 0x0d, +0x55, 0x02, 0x44, 0x01, 0x5a, 0x00, 0x2e, 0x07, +0x78, 0xfe, 0xcf, 0x75, 0xaf, 0xfe, 0xdf, 0x76, +0xbf, 0x41, 0x2e, 0xa4, 0xdf, 0xdf, 0x29, 0x41, +0x2e, 0xa4, 0xbf, 0x05, 0x27, 0x59, 0x1e, 0x02, +0x55, 0xfe, 0xcf, 0x10, 0xaf, 0x2b, 0x7e, 0x63, +0x1e, 0x1a, 0x55, 0x28, 0x85, 0xe2, 0x2f, 0x50, +0x5b, 0x0c, 0xef, 0x20, 0x80, 0xe2, 0x2f, 0x4c, +0x5a, 0xf0, 0xef, 0x00, 0xff, 0x19, 0x27, 0x08, +0xef, 0x06, 0xaf, 0xfe, 0xcf, 0x5f, 0x9f, 0x06, +0x25, 0xfb, 0x55, 0xfe, 0xcf, 0xfe, 0xcf, 0x41, +0x2e, 0x40, 0xbf, 0xfe, 0xcf, 0x41, 0x2e, 0x41, +0xbf, 0xfe, 0xcf, 0x41, 0x2e, 0x42, 0xbf, 0x05, +0x27, 0x64, 0x1e, 0x31, 0x55, 0xb0, 0xef, 0x00, +0xff, 0x19, 0x27, 0x0b, 0xef, 0x06, 0xaf, 0xfe, +0xcf, 0x5f, 0x9f, 0x06, 0x25, 0xfb, 0x55, 0xfe, +0xcf, 0x56, 0xaf, 0xfe, 0xcf, 0xae, 0xdf, 0x1f, +0x1c, 0xe0, 0x1d, 0x5f, 0x02, 0xae, 0xbf, 0xfe, +0xcf, 0x41, 0x2e, 0x54, 0xbf, 0xfe, 0xcf, 0x41, +0x2e, 0x77, 0xbf, 0xfe, 0xcf +}; + +static const unsigned char pkt140[] = { +0x42, 0xca, 0x00, +0x0d, 0x23, 0x41, 0x2e, 0x55, +0xbf, 0xfe, 0xcf, 0x41, 0x2e, 0x78, 0xbf, 0xfe, +0xcf, 0xbb, 0xaf, 0xfe, 0xcf, 0xbc, 0xaf, 0xfe, +0xcf, 0xbd, 0xaf, 0xfe, 0xcf, 0xbe, 0xaf, 0xfe, +0xcf, 0x83, 0xaf, 0xfe, 0xcf, 0x84, 0xaf, 0xfe, +0xcf, 0x81, 0xaf, 0xfe, 0xcf, 0x82, 0xaf, 0xfe, +0xcf, 0x24, 0xaf, 0xfe, 0xcf, 0x02, 0x33, 0x05, +0x27, 0x66, 0x1e, 0x0b, 0x55, 0x60, 0xef, 0x21, +0xff, 0x1a, 0x27, 0x0b, 0xef, 0x06, 0xaf, 0xfe, +0xcf, 0xfe, 0xdf, 0x06, 0x27, 0x01, 0x0e, 0x06, +0x25, 0xf9, 0x55, 0x05, 0x27, 0x35, 0x74, 0xff, +0x96, 0xc6, 0x2e, 0x01, 0xdf, 0x3f, 0x2c, 0xdd, +0x9f, 0x05, 0x27, 0x01, 0xef, 0x20, 0x80, 0xe1, +0x2f, 0xeb, 0x5a, 0xfe, 0xcf, 0xdf, 0x22, 0xe7, +0x2f, 0x1e, 0x54, 0x01, 0xff, 0x05, 0xef, 0xff, +0x96, 0xdf, 0x96, 0x2d, 0xff, 0x8d, 0xef, 0x19, +0x27, 0x03, 0xcf, 0x7f, 0x1c, 0x5f, 0x9f, 0xdd, +0x97, 0x5f, 0x9f, 0xdd, 0x97, 0x5f, 0x9f, 0x05, +0xef, 0x06, 0xaf, 0x9f, 0x22, 0x5f, 0x9f, 0x06, +0x25, 0xfc, 0x55, 0x5f, 0x9f, 0x06, 0x25, 0xfc, +0x55, 0x20, 0xef, 0x08, 0xaf, 0x09, 0x23, 0x00, +0x2e, 0xd1, 0x8d, 0x67, 0x81, 0x03, 0xef, 0xfc, +0xaf, 0x86, 0xef, 0xaa, 0xaf, 0x08, 0xef, 0xe3, +0xaf, 0x9f, 0x22, 0xe2, 0xaf, 0x21, 0xef, 0x41, +0x2e, 0x47, 0xbf, 0x27, 0xef, 0xf4, 0xaf, 0x28, +0xff, 0xa7, 0xef, 0xe1, 0xbf +}; + +static const unsigned char pkt144[] = { +0x42, 0x88, 0x00, +0x71, 0x23, 0xe0, 0xaf, 0x08, +0xef, 0x10, 0xaf, 0x8c, 0x8d, 0x05, 0x81, 0x01, +0x2e, 0x54, 0x80, 0x01, 0x2e, 0x56, 0x80, 0x9b, +0x22, 0x9b, 0x22, 0x2d, 0xff, 0x95, 0xef, 0x19, +0x27, 0x28, 0xff, 0xa7, 0xef, 0x1a, 0x27, 0x80, +0xef, 0x06, 0xaf, 0xdc, 0x97, 0x5f, 0x9f, 0xdf, +0x22, 0x01, 0x54, 0x00, 0x2e, 0x66, 0x8a, 0x06, +0x25, 0xf7, 0x55, 0x2d, 0xff, 0x91, 0xef, 0x19, +0x27, 0xdd, 0x97, 0xdd, 0x9f, 0x5f, 0x9f, 0x7f, +0x9f, 0xfd, 0x0d, 0xdf, 0x22, 0x01, 0x55, 0xff, +0x22, 0x01, 0x54, 0x01, 0xef, 0x1f, 0x98, 0x2f, +0xef, 0x41, 0x2e, 0x47, 0xbf, 0x11, 0xef, 0xf4, +0xaf, 0x28, 0xff, 0xa7, 0xef, 0xe1, 0xbf, 0xe0, +0xaf, 0x01, 0x2e, 0x54, 0x80, 0x01, 0x2e, 0x56, +0x80, 0x9b, 0x22, 0x9b, 0x22, 0x2e, 0xff, 0x15, +0xef, 0x19, 0x27, 0x28, 0xff, 0xa7, 0xef, 0x1a, +0x27, 0x80, 0xef, 0x06, 0xaf, 0x00, 0x2e, 0x3c, +0x8a, 0x05, 0x27 +}; + +static const unsigned char pkt148[] = { +0x42, 0xca, 0x00, +0xb4, 0x23, 0x37, 0xcf, 0xdf, +0x96, 0x08, 0xcf, 0xdf, 0x96, 0x3d, 0xcf, 0xdf, +0x96, 0x00, 0x2e, 0xd4, 0x8d, 0xdd, 0x97, 0x3d, +0xaf, 0xdd, 0x97, 0x08, 0xaf, 0xdd, 0x97, 0x37, +0xaf, 0x03, 0xcf, 0x51, 0x1e, 0x00, 0x55, 0x44, +0x8b, 0xa0, 0xcf, 0xbf, 0x1c, 0xa0, 0xaf, 0x05, +0x81, 0xfb, 0x39, 0x08, 0x45, 0x00, 0x5a, 0xfb, +0x31, 0x0a, 0x42, 0x00, 0x5b, 0xa2, 0x39, 0x02, +0xcf, 0x5c, 0xaf, 0xe1, 0xef, 0x40, 0x2e, 0x95, +0xbf, 0x9f, 0x22, 0x25, 0xaf, 0x69, 0xaf, 0x6a, +0xaf, 0x16, 0xaf, 0x40, 0x2e, 0x96, 0xbf, 0x29, +0xaf, 0x02, 0x47, 0x06, 0x5a, 0x0a, 0x41, 0x04, +0x5a, 0x0a, 0xdf, 0x30, 0x1d, 0x30, 0x1f, 0x00, +0x54, 0x01, 0xef, 0x44, 0xaf, 0x09, 0xef, 0x60, +0xaf, 0x0a, 0x40, 0x06, 0x5a, 0x10, 0xcf, 0x27, +0xaf, 0xe2, 0x23, 0x6e, 0x23, 0x08, 0xef, 0xe3, +0xaf, 0x6f, 0xaf, 0x0d, 0x8d, 0x5d, 0xcf, 0x30, +0x1c, 0x00, 0x1e, 0x07, 0x55, 0xf8, 0xcf, 0x5f, +0x2b, 0x9f, 0x29, 0xf8, 0xaf, 0xa1, 0xcf, 0xc1, +0x1c, 0xa1, 0xaf, 0x09, 0x50, 0x10, 0x1e, 0x07, +0x55, 0xf8, 0xcf, 0x5f, 0x29, 0x9f, 0x2b, 0xf8, +0xaf, 0xa1, 0xcf, 0xc1, 0x1c, 0x08, 0x18, 0xa1, +0xaf, 0x41, 0x2e, 0xa4, 0xdf, 0xdf, 0x2d, 0x04, +0x5b, 0x75, 0xcf, 0xf4, 0xaf, 0x76, 0xcf, 0xf5, +0xaf, 0x00, 0x50, 0x0f, 0x88, 0xe2, 0x23, 0x08, +0xef, 0xe3, 0xaf, 0x81, 0x82 +}; + +static const unsigned char pkt152[] = { +0x42, 0x24, 0x00, +0x18, 0x24, 0x4d, 0xaf, 0xdf, +0x96, 0x64, 0xdf, 0x93, 0x82, 0x93, 0xbf, 0xdd, +0x97, 0x77, 0xff, 0x93, 0x82, 0x94, 0xbf, 0x9e, +0x23, 0xe4, 0x23, 0x05, 0x27, 0x14, 0xef, 0xf4, +0xaf, 0x00, 0xef, 0xf5, 0xaf, 0x05, 0x27 +}; + +static const unsigned char pkt156[] = { +0x42, 0xca, 0x00, +0x29, 0x24, 0xfe, 0xcf, 0x58, +0xaf, 0xfe, 0xcf, 0xfe, 0xdf, 0x00, 0x2e, 0xa9, +0x8b, 0xfe, 0xcf, 0x3c, 0xaf, 0x07, 0x3d, 0x58, +0x40, 0x4a, 0x5a, 0x3c, 0x26, 0x48, 0x55, 0x37, +0x45, 0x46, 0x5a, 0xe0, 0x88, 0x44, 0x5a, 0x77, +0x88, 0x00, 0x2e, 0xd1, 0x8b, 0xfe, 0xef, 0x16, +0x80, 0x02, 0xcf, 0xdf, 0x96, 0x61, 0xef, 0xc0, +0xaf, 0x04, 0x27, 0xc1, 0x46, 0x04, 0x5b, 0xc0, +0x3e, 0x40, 0xef, 0xc1, 0xaf, 0x01, 0x2e, 0x94, +0x84, 0xd0, 0x41, 0x06, 0x5b, 0x2d, 0x88, 0xf3, +0x5b, 0x6c, 0x86, 0xdd, 0x97, 0x1f, 0x2d, 0x05, +0x5b, 0x03, 0x50, 0x01, 0x0c, 0x02, 0xcf, 0xc0, +0x1c, 0x00, 0x55, 0x05, 0x88, 0xc0, 0x23, 0x20, +0xef, 0xc1, 0xaf, 0x00, 0x2e, 0xf0, 0x8b, 0x05, +0x27, 0x9b, 0x22, 0x37, 0x45, 0x05, 0x5a, 0x41, +0x2e, 0x52, 0xdf, 0xdf, 0x2d, 0x04, 0x5b, 0x00, +0x28, 0x02, 0x50, 0x3b, 0x43, 0x00, 0x5b, 0x00, +0x28, 0xd3, 0xdf, 0xc6, 0x2e, 0x15, 0xbf, 0xd3, +0x3c, 0x40, 0xef, 0x09, 0x80, 0xdd, 0x97, 0xff, +0xaf, 0x00, 0x2e, 0x5d, 0x89, 0xc6, 0x2e, 0x15, +0xdf, 0x10, 0x1d, 0xd3, 0xcf, 0x3f, 0x02, 0xd3, +0xaf, 0x05, 0x27, 0xc1, 0x83, 0x07, 0x45, 0x05, +0x27, 0x3d, 0x23, 0x07, 0x3d, 0x02, 0xcf, 0xdf, +0x96, 0x2e, 0x88, 0x26, 0x88, 0xfe, 0xef, 0x16, +0x80, 0x05, 0xef, 0xc0, 0xaf, 0x04, 0x27, 0xd0, +0x41, 0x02, 0x5b, 0xee, 0x8f +}; + +static const unsigned char pkt160[] = { +0x42, 0xca, 0x00, +0x8d, 0x24, 0xfa, 0x5b, 0xbf, +0x50, 0x31, 0x82, 0x04, 0xef, 0xc1, 0xaf, 0x9b, +0x22, 0x41, 0x88, 0xdd, 0x97, 0xdf, 0x22, 0x02, +0x55, 0x58, 0x40, 0x02, 0x5a, 0x09, 0x50, 0x58, +0x40, 0x07, 0x5a, 0xdd, 0x97, 0x1f, 0x2d, 0xb8, +0x5a, 0x7a, 0x88, 0xb7, 0x5b, 0x9b, 0x22, 0xc7, +0x8f, 0xb4, 0x50, 0x75, 0x88, 0xdc, 0x5b, 0xb7, +0x8f, 0x58, 0x41, 0x01, 0x5b, 0x01, 0x0c, 0xad, +0x7f, 0xd6, 0x50, 0x41, 0x2e, 0x52, 0xdf, 0xed, +0x1c, 0x04, 0x18, 0x41, 0x2e, 0x52, 0xbf, 0x05, +0x27, 0x00, 0x2e, 0xb9, 0x8b, 0xae, 0xdf, 0xe0, +0x19, 0xae, 0xbf, 0x57, 0x40, 0x00, 0x5b, 0xa1, +0x32, 0x57, 0x43, 0x00, 0x5b, 0xae, 0x3f, 0x05, +0x81, 0x05, 0x27, 0x41, 0x2e, 0x52, 0xdf, 0x03, +0x18, 0x41, 0x2e, 0x52, 0xbf, 0x05, 0x27, 0xd3, +0xdf, 0xff, 0x96, 0x9b, 0x22, 0x0b, 0x88, 0xd3, +0x3c, 0x07, 0x80, 0xdd, 0x97, 0xff, 0xaf, 0x00, +0x2e, 0x5d, 0x89, 0xdd, 0x9f, 0x10, 0x1d, 0xd3, +0xcf, 0x3f, 0x02, 0xd3, 0xaf, 0x05, 0x27, 0x37, +0x45, 0x0e, 0x5a, 0x40, 0x88, 0x0c, 0x5a, 0xd7, +0x8f, 0x00, 0x2e, 0xd7, 0x8b, 0x00, 0x2e, 0xeb, +0x8b, 0x41, 0x2e, 0x52, 0xdf, 0xdf, 0x2d, 0x00, +0x5b, 0x00, 0x28, 0x00, 0x2e, 0xf0, 0x8b, 0x05, +0x27, 0xf9, 0xcf, 0xdf, 0x96, 0xf9, 0x3d, 0x00, +0x2e, 0xd1, 0x8d, 0x28, 0xff, 0xa7, 0xef, 0xe1, +0xbf, 0xe0, 0xaf, 0x09, 0xef +}; + +static const unsigned char pkt164[] = { +0x42, 0x6c, 0x00, +0xf1, 0x24, 0x10, 0xaf, 0x0e, +0x8c, 0x05, 0x81, 0x01, 0x2e, 0x54, 0x80, 0x01, +0x2e, 0x56, 0x80, 0x20, 0x82, 0x7b, 0x8c, 0x37, +0x82, 0x26, 0x37, 0x00, 0x5a, 0x0c, 0x50, 0xff, +0x96, 0xdf, 0x96, 0x79, 0xcf, 0x7a, 0xdf, 0xff, +0x96, 0xdf, 0x96, 0xc2, 0x97, 0xc3, 0x9f, 0x9d, +0x01, 0x5d, 0x01, 0x07, 0x53, 0xdd, 0x97, 0xdd, +0x9f, 0x79, 0xaf, 0x7a, 0xbf, 0x3b, 0x3b, 0xdd, +0x97, 0xf9, 0xaf, 0x05, 0x27, 0xff, 0x22, 0x01, +0x55, 0x32, 0x1e, 0xf3, 0x5f, 0x02, 0x0c, 0xf6, +0x8f, 0x3b, 0x33, 0x00, 0x28, 0x05, 0x27, 0x0d, +0x27, 0x3c, 0x26, 0x07, 0x54, 0x3c, 0xcf, 0x3d, +0xdf, 0x3f, 0x20, 0x3d, 0xbf, 0xdf, 0x03, 0x01, +0x52, 0x3d, 0x23, 0x0c, 0x27, 0x0d, 0x27 +}; + +static const unsigned char pkt168[] = { +0x42, 0x50, 0x00, +0x26, 0x25, 0x08, 0x44, 0x12, +0x5a, 0x07, 0x40, 0x01, 0x5b, 0x4f, 0x80, 0x00, +0x50, 0x53, 0x80, 0x27, 0x0d, 0x25, 0xcf, 0x1f, +0x98, 0x29, 0xcf, 0x09, 0x27, 0x28, 0xdf, 0x3f, +0x02, 0x5f, 0x98, 0x62, 0xcf, 0xdf, 0x98, 0xd9, +0x0d, 0x02, 0x0d, 0x00, 0x2e, 0xd5, 0x7f, 0x05, +0x27, 0x01, 0x0d, 0x41, 0x2e, 0x56, 0xdf, 0x5f, +0x9f, 0x41, 0x2e, 0x57, 0xdf, 0x5f, 0x9f, 0x41, +0x2e, 0x58, 0xdf, 0x5f, 0x9f, 0x41, 0x2e, 0x59, +0xdf, 0x5f, 0x9f, 0x06, 0x0d, 0x3b, 0xcf, 0x5f, +0x9f, 0x05, 0x27 +}; + +static const unsigned char pkt172[] = { +0x42, 0xca, 0x00, +0x4d, 0x25, 0x9b, 0x22, 0xbb, +0x89, 0x22, 0x88, 0x75, 0x88, 0x14, 0x86, 0x2b, +0x86, 0x2b, 0x86, 0x2b, 0x86, 0x2b, 0x86, 0xa0, +0x88, 0x2e, 0x89, 0x24, 0x89, 0x02, 0x33, 0x07, +0x80, 0xdd, 0x97, 0xff, 0xaf, 0x00, 0x2e, 0x5d, +0x89, 0x05, 0x27, 0x6c, 0xcf, 0x6d, 0xdf, 0xbf, +0x01, 0x6c, 0xaf, 0x6d, 0x26, 0x00, 0x2e, 0x33, +0x55, 0x00, 0x2e, 0x4e, 0x50, 0xdf, 0x96, 0xff, +0x96, 0x32, 0xff, 0x07, 0xef, 0x91, 0x81, 0x7f, +0x20, 0xfb, 0x55, 0xdd, 0x9f, 0xdd, 0x97, 0x05, +0x27, 0x9f, 0x22, 0x6b, 0xaf, 0x00, 0x2e, 0x6e, +0x8f, 0x00, 0xef, 0x41, 0x2e, 0x44, 0xbf, 0x7f, +0xef, 0x41, 0x2e, 0x45, 0xbf, 0x80, 0xef, 0x0a, +0xaf, 0x00, 0x2e, 0xd1, 0x8d, 0x88, 0x82, 0x8c, +0x82, 0x6b, 0xcf, 0x10, 0xaf, 0x02, 0x2e, 0x02, +0x81, 0x40, 0xef, 0x6d, 0xaf, 0x80, 0xef, 0x6c, +0xaf, 0x00, 0x2e, 0xc4, 0x8d, 0x05, 0x81, 0x01, +0x2e, 0x54, 0x80, 0x01, 0x2e, 0x56, 0x80, 0x7f, +0x89, 0xff, 0x2f, 0xca, 0x5a, 0x6c, 0xcf, 0x6d, +0xdf, 0x3f, 0x00, 0x6c, 0xaf, 0x6d, 0x26, 0x03, +0x54, 0x6d, 0xdf, 0x16, 0x82, 0x6d, 0xbf, 0xeb, +0x50, 0x6b, 0xcf, 0x08, 0x1e, 0x11, 0x5f, 0x6c, +0x24, 0x02, 0x53, 0xff, 0xef, 0x6c, 0xaf, 0x10, +0x50, 0x6c, 0x24, 0x02, 0x53, 0xff, 0xef, 0x6c, +0xaf, 0x0b, 0x50, 0x6b, 0xcf, 0x0a, 0x1e, 0x08, +0x55, 0x6c, 0x24, 0x02, 0x53 +}; + +static const unsigned char pkt176[] = { +0x42, 0xca, 0x00, +0xb1, 0x25, 0xff, 0xef, 0x6c, +0xaf, 0x03, 0x50, 0x6c, 0x24, 0x01, 0x53, 0xff, +0xef, 0x6c, 0xaf, 0x6b, 0xcf, 0xdf, 0x96, 0xb0, +0xef, 0x00, 0xff, 0x1d, 0x00, 0x00, 0x13, 0x1b, +0x27, 0x6c, 0xcf, 0x9f, 0x9d, 0x6b, 0xcf, 0x1f, +0x20, 0x6b, 0xaf, 0x0a, 0x1e, 0xbc, 0x5f, 0x05, +0x27, 0x0c, 0xef, 0x41, 0x2e, 0x76, 0xbf, 0x10, +0xef, 0x6d, 0xaf, 0xae, 0xcf, 0xe0, 0x1c, 0xae, +0xaf, 0x0b, 0x78, 0xcb, 0xcf, 0xcc, 0xdf, 0x0a, +0x1f, 0x07, 0x52, 0x01, 0x5e, 0x00, 0x1e, 0x04, +0x5f, 0xae, 0xcf, 0x6d, 0xdf, 0xbf, 0x01, 0xae, +0xaf, 0x03, 0x78, 0xae, 0xcf, 0x6d, 0xdf, 0x3f, +0x00, 0xae, 0xaf, 0x16, 0x82, 0x6d, 0xbf, 0x05, +0x81, 0x64, 0xef, 0xbf, 0x22, 0xbd, 0x80, 0x34, +0x81, 0x53, 0x81, 0x6d, 0x26, 0xe5, 0x55, 0xcb, +0xcf, 0xcc, 0xdf, 0x0a, 0x1f, 0x02, 0x5e, 0x04, +0x52, 0x00, 0x1e, 0x02, 0x5f, 0xae, 0xcf, 0x5f, +0x20, 0xae, 0xaf, 0x00, 0xef, 0x41, 0x2e, 0x76, +0xbf, 0x05, 0x27, 0x00, 0x2e, 0x6e, 0x8f, 0x02, +0x2e, 0x6b, 0x81, 0x00, 0x2e, 0xd1, 0x8d, 0x73, +0x23, 0x0a, 0xef, 0x10, 0xaf, 0x02, 0x2e, 0x02, +0x81, 0x80, 0xef, 0x00, 0x2e, 0xc4, 0x8d, 0x05, +0x81, 0x08, 0xef, 0x06, 0xaf, 0x01, 0x2e, 0x54, +0x80, 0x01, 0x2e, 0x56, 0x80, 0x06, 0x25, 0xf9, +0x55, 0xb3, 0x88, 0x40, 0xcf, 0xe0, 0xaf, 0x41, +0xdf, 0xe1, 0xbf, 0x41, 0x2e +}; + +static const unsigned char pkt180[] = { +0x42, 0xca, 0x00, +0x15, 0x26, 0x4e, 0xdf, 0xf7, +0x1c, 0x41, 0x2e, 0x4e, 0xbf, 0x01, 0x2e, 0x54, +0x80, 0x01, 0x2e, 0x56, 0x80, 0x4f, 0x82, 0x40, +0x2e, 0x8f, 0xdf, 0xdf, 0x22, 0xed, 0x55, 0x30, +0x88, 0x4e, 0x23, 0x4e, 0xcf, 0x31, 0x88, 0x37, +0x88, 0x3f, 0x9f, 0x4e, 0xcf, 0x2d, 0x88, 0x39, +0x88, 0x1f, 0x9f, 0x4e, 0x24, 0x4e, 0xcf, 0x04, +0x1e, 0xf3, 0x55, 0xf8, 0x0f, 0x08, 0xef, 0x06, +0xaf, 0xf6, 0x97, 0xbc, 0x03, 0x01, 0x5f, 0xff, +0x0f, 0xfc, 0x97, 0x06, 0x25, 0xf9, 0x55, 0xf8, +0x0f, 0x08, 0xff, 0x06, 0xbf, 0xf6, 0x9f, 0xdf, +0x01, 0xa1, 0x27, 0x7f, 0x21, 0x3f, 0x9f, 0x06, +0x25, 0xf8, 0x55, 0xf8, 0x0f, 0x04, 0xef, 0x06, +0xaf, 0xbb, 0xef, 0x00, 0xff, 0x1a, 0x27, 0xfc, +0x9f, 0xfc, 0x97, 0x09, 0x27, 0x5f, 0x02, 0x3f, +0x97, 0x06, 0x25, 0xf8, 0x55, 0x81, 0xcf, 0x24, +0xaf, 0x05, 0x27, 0x54, 0xef, 0x28, 0xff, 0x1b, +0x27, 0x05, 0x27, 0xdf, 0x96, 0x40, 0xcf, 0x41, +0xdf, 0x1d, 0x00, 0x00, 0x13, 0x19, 0x27, 0x05, +0x27, 0x0f, 0xff, 0x0b, 0x88, 0x40, 0x10, 0x00, +0x13, 0x8e, 0x81, 0x05, 0x27, 0xf0, 0xff, 0x05, +0x88, 0x04, 0x11, 0x3f, 0x22, 0xff, 0x97, 0x09, +0x27, 0x0f, 0x1c, 0x05, 0x27, 0xff, 0x96, 0x9b, +0x22, 0x9b, 0x22, 0x80, 0xef, 0x06, 0xaf, 0xe0, +0x97, 0x02, 0x03, 0xbf, 0x22, 0x00, 0x00, 0xc1, +0x00, 0x1f, 0x90, 0x7f, 0x90 +}; + +static const unsigned char pkt184[] = { +0x42, 0xca, 0x00, +0x79, 0x26, 0x04, 0x0d, 0x06, +0x25, 0xf5, 0x55, 0x03, 0x0c, 0x05, 0x27, 0x04, +0xef, 0x10, 0xaf, 0x02, 0x2e, 0x02, 0x81, 0x05, +0x81, 0xf7, 0xef, 0x16, 0x80, 0x6b, 0x81, 0x05, +0x27, 0x73, 0x23, 0x08, 0xef, 0x0b, 0xaf, 0x02, +0x2e, 0x6b, 0x81, 0x00, 0x2e, 0x6e, 0x8f, 0x00, +0x2e, 0xd1, 0x8d, 0x0a, 0xef, 0x10, 0xaf, 0x02, +0x2e, 0x02, 0x81, 0x88, 0x82, 0x02, 0x2e, 0x9f, +0x80, 0x80, 0xef, 0x00, 0x2e, 0xc4, 0x8d, 0x05, +0x81, 0x0b, 0xcf, 0x06, 0xaf, 0x01, 0x2e, 0x54, +0x80, 0x01, 0x2e, 0x56, 0x80, 0x06, 0x25, 0xf9, +0x55, 0x1f, 0x88, 0x20, 0x82, 0x02, 0x2e, 0x76, +0x81, 0xf7, 0xef, 0x16, 0x80, 0x81, 0xcf, 0x72, +0xaf, 0x02, 0x2e, 0x6b, 0x81, 0x02, 0x2e, 0xc0, +0x81, 0x08, 0xef, 0x02, 0x2e, 0x51, 0x80, 0x08, +0xef, 0x02, 0x2e, 0x7a, 0x80, 0x01, 0x2e, 0x89, +0x81, 0x2d, 0xcf, 0xdf, 0x96, 0x2c, 0xcf, 0xdf, +0x96, 0x2a, 0xcf, 0x2b, 0xdf, 0x9d, 0x01, 0x5d, +0x01, 0x83, 0xaf, 0x84, 0xbf, 0xc8, 0xef, 0x0b, +0xaf, 0x05, 0x27, 0x0a, 0xef, 0x73, 0x43, 0x02, +0x5b, 0x73, 0xcf, 0x09, 0x27, 0x0f, 0x1c, 0x81, +0xaf, 0x73, 0xcf, 0x09, 0x27, 0x30, 0x1c, 0xfc, +0xdf, 0xcf, 0x1d, 0x5f, 0x02, 0xfc, 0xbf, 0x81, +0xcf, 0x10, 0xaf, 0x02, 0x2e, 0x02, 0x81, 0x88, +0x82, 0x02, 0x2e, 0x9f, 0x80, 0x40, 0xef, 0x6b, +0xaf, 0x80, 0xef, 0x82, 0xaf +}; + +static const unsigned char pkt188[] = { +0x42, 0x9a, 0x00, +0xdd, 0x26, 0x00, 0x2e, 0xc4, +0x8d, 0x05, 0x81, 0x01, 0x2e, 0x54, 0x80, 0x01, +0x2e, 0x56, 0x80, 0x20, 0x82, 0x02, 0x2e, 0xe6, +0x80, 0x0a, 0x5b, 0x73, 0x43, 0x18, 0x5a, 0x81, +0xcf, 0x5e, 0xdf, 0xbf, 0x03, 0x14, 0x5f, 0x5f, +0x20, 0x81, 0xaf, 0xdf, 0x22, 0x10, 0x54, 0xde, +0x50, 0x40, 0x2e, 0x8f, 0xdf, 0x1f, 0x2c, 0x0c, +0x5a, 0x5f, 0x2c, 0x09, 0x5b, 0x82, 0xcf, 0x6b, +0xdf, 0x3f, 0x00, 0x82, 0xaf, 0x6b, 0x26, 0xe8, +0x54, 0x6b, 0xdf, 0x16, 0x82, 0x6b, 0xbf, 0xd9, +0x50, 0x05, 0x27, 0x82, 0xcf, 0x6b, 0xdf, 0xbf, +0x01, 0x82, 0xaf, 0x6b, 0x26, 0xf4, 0x55, 0xdc, +0x50, 0x88, 0x82, 0x8c, 0x82, 0x9f, 0x22, 0xbb, +0xaf, 0xbc, 0xaf, 0xbd, 0xaf, 0xbe, 0xaf, 0x05, +0x27, 0xf9, 0x44, 0x08, 0x5a, 0xc1, 0x2e, 0x81, +0xdf, 0x01, 0x1f, 0x0e, 0x52, 0x0c, 0x5e, 0xc1, +0x2e, 0x80, 0xdf, 0xfe, 0x1f, 0x09, 0x52, 0xc1, +0x2e, 0x81, 0xdf, 0x03, 0x1f, 0x05, 0x52, 0x03, +0x5e, 0xc1, 0x2e, 0x80, 0xdf, 0xfc, 0x1f, 0x00, +0x52, 0x0c, 0x27, 0x0d, 0x27 +}; + +static const unsigned char pkt192[] = { +0x42, 0x7e, 0x00, +0x29, 0x27, 0x53, 0x80, 0x01, +0x0d, 0xf5, 0x97, 0xff, 0x0d, 0x1f, 0x99, 0x49, +0xcf, 0x5f, 0x99, 0x08, 0x44, 0x00, 0x2e, 0x32, +0x5a, 0x0b, 0x0d, 0x44, 0xcf, 0x0c, 0x41, 0x00, +0x5b, 0x1f, 0x20, 0x44, 0xaf, 0x5f, 0x9f, 0x04, +0x0d, 0x11, 0xcf, 0x5f, 0x9f, 0x12, 0xcf, 0x5f, +0x9f, 0x1c, 0xcf, 0x5f, 0x9f, 0x1d, 0xcf, 0x5f, +0x9f, 0x4d, 0xcf, 0x5f, 0x9f, 0x49, 0xcf, 0x5f, +0x9f, 0x06, 0x0d, 0xe0, 0x97, 0x0f, 0x1c, 0x5f, +0x9f, 0x0a, 0xcf, 0x5f, 0x9f, 0x09, 0xcf, 0x5f, +0x9f, 0x78, 0xcf, 0x5f, 0x9f, 0x9f, 0xcf, 0x5f, +0x9f, 0x92, 0xcf, 0x5f, 0x9f, 0x19, 0xcf, 0x5f, +0x9f, 0x02, 0x0d, 0x85, 0xcf, 0x5f, 0x9f, 0x44, +0xdf, 0x02, 0x2e, 0x8c, 0x81, 0x5f, 0x9f, 0x4d, +0xcf, 0x5f, 0x9f, 0x01, 0x0d, 0x6a, 0xcf, 0x09, +0x27, 0x69, 0xdf, 0x3f, 0x02, 0x5f, 0x9f, 0x05, +0x27 +}; + +static const unsigned char pkt196[] = { +0x42, 0xca, 0x00, +0x67, 0x27, 0x00, 0x2e, 0xf5, +0x88, 0x39, 0x81, 0x84, 0x88, 0x05, 0xcf, 0xdf, +0x22, 0x33, 0x55, 0x04, 0xcf, 0x2a, 0x1e, 0x30, +0x55, 0xfe, 0xdf, 0xfe, 0xcf, 0x00, 0x1f, 0x1b, +0x55, 0x00, 0x1e, 0x0d, 0x54, 0xc6, 0x2e, 0x00, +0xdf, 0x3f, 0x20, 0xbf, 0x03, 0x14, 0x55, 0xc6, +0x2e, 0x01, 0xdf, 0x3f, 0x2c, 0x10, 0x5b, 0x46, +0x2e, 0x00, 0xbf, 0x00, 0x2e, 0xdb, 0x88, 0x09, +0x78, 0x00, 0xef, 0x46, 0x2e, 0x00, 0xbf, 0x46, +0x2e, 0x01, 0xdf, 0x1f, 0x28, 0x46, 0x2e, 0x01, +0xbf, 0x00, 0x2e, 0xbc, 0x88, 0x13, 0x88, 0x05, +0x27, 0x46, 0x2e, 0x01, 0xdf, 0x1f, 0x2a, 0x46, +0x2e, 0x01, 0xbf, 0x41, 0x2e, 0xb6, 0xdf, 0x01, +0xff, 0xab, 0xef, 0x19, 0x27, 0x42, 0xff, 0x7f, +0x98, 0x9f, 0x98, 0x24, 0x28, 0x2a, 0x85, 0x24, +0x2a, 0x05, 0x27, 0x2c, 0x85, 0x05, 0x27, 0xfd, +0x0c, 0x00, 0x2e, 0xab, 0x88, 0x14, 0xef, 0x00, +0x2e, 0xef, 0x88, 0x32, 0x88, 0x3a, 0x88, 0x34, +0x88, 0x38, 0x88, 0x32, 0x88, 0x36, 0x88, 0x30, +0x88, 0x34, 0x88, 0x2e, 0x88, 0x32, 0x88, 0x46, +0x2e, 0x00, 0xdf, 0x1f, 0x9f, 0xe2, 0xef, 0x1f, +0x90, 0xe0, 0xff, 0x7f, 0x90, 0x0e, 0xef, 0x00, +0x2e, 0xe7, 0x88, 0x80, 0xef, 0x1f, 0x9f, 0x9f, +0x22, 0x1f, 0x9f, 0x1f, 0x9f, 0x1f, 0x9f, 0x1f, +0x9f, 0x1f, 0x9f, 0x1f, 0x9f, 0x01, 0xef, 0x1f, +0x9f, 0xb8, 0xef, 0x1f, 0x9f +}; + +static const unsigned char pkt200[] = { +0x42, 0x66, 0x00, +0xcb, 0x27, 0x00, 0x2e, 0xab, +0x88, 0x40, 0xef, 0xfc, 0x9f, 0x5f, 0x20, 0xfc, +0x55, 0x03, 0x0c, 0x01, 0x2e, 0x6e, 0x86, 0x01, +0x2e, 0x05, 0x86, 0x00, 0x2e, 0xb5, 0x88, 0x00, +0x2e, 0xb1, 0x88, 0x14, 0xef, 0x00, 0x2e, 0xb7, +0x88, 0x05, 0x27, 0x40, 0xef, 0x28, 0xff, 0x1a, +0x27, 0x05, 0x27, 0x16, 0x27, 0x04, 0x10, 0x00, +0x13, 0x1a, 0x27, 0x05, 0x27, 0xd9, 0x9f, 0x3f, +0x9f, 0xd8, 0x9f, 0x3f, 0x9f, 0xd7, 0x9f, 0x3f, +0x9f, 0xd6, 0x9f, 0x3f, 0x9f, 0x05, 0x27, 0x7f, +0xef, 0x28, 0xff, 0x46, 0x2e, 0x1d, 0xbf, 0xc6, +0x2e, 0x1c, 0xbf, 0x93, 0xef, 0x28, 0xff, 0x46, +0x2e, 0x1f, 0xbf, 0xc6, 0x2e, 0x1e, 0xbf, 0x05, +0x27 +}; + +static const unsigned char pkt204[] = { +0x42, 0xca, 0x00, +0xfd, 0x27, 0xfd, 0x0c, 0x00, +0x2e, 0xf5, 0x88, 0x0d, 0x84, 0x05, 0xcf, 0xdf, +0x22, 0x00, 0x2e, 0x98, 0x55, 0x04, 0xcf, 0x14, +0x1e, 0x00, 0x2e, 0x94, 0x55, 0x00, 0x2e, 0xab, +0x88, 0xbb, 0xef, 0x1f, 0x90, 0x91, 0xff, 0x7f, +0x90, 0x14, 0xef, 0x00, 0x2e, 0xe7, 0x88, 0x14, +0xef, 0x00, 0x2e, 0xef, 0x88, 0x33, 0xef, 0x1f, +0x90, 0x71, 0xff, 0x7f, 0x90, 0x18, 0xef, 0x00, +0x2e, 0xe7, 0x88, 0x00, 0x2e, 0xab, 0x88, 0x40, +0xef, 0xfc, 0x9f, 0x5f, 0x20, 0xfc, 0x55, 0x01, +0x2e, 0x6e, 0x86, 0x01, 0x2e, 0x05, 0x86, 0x00, +0x2e, 0xab, 0x88, 0x7a, 0x88, 0x0a, 0xef, 0x00, +0x2e, 0xb7, 0x88, 0x76, 0x88, 0x00, 0xff, 0x80, +0xef, 0x19, 0x27, 0x0a, 0xef, 0xdc, 0x9f, 0x7f, +0x9f, 0x5f, 0x20, 0xfb, 0x55, 0x0d, 0x84, 0x6c, +0x88, 0x0a, 0xef, 0x00, 0x2e, 0xb7, 0x88, 0x68, +0x88, 0x0a, 0xef, 0xdc, 0x9f, 0x7f, 0x9f, 0x5f, +0x20, 0xfb, 0x55, 0x5e, 0x88, 0xa4, 0x8f, 0x9e, +0x8f, 0xa2, 0x8f, 0x9c, 0x8f, 0xa0, 0x8f, 0x9a, +0x8f, 0x9e, 0x8f, 0x98, 0x8f, 0x9c, 0x8f, 0x9d, +0xef, 0x1f, 0x90, 0xda, 0xff, 0x7f, 0x90, 0x0f, +0xef, 0x00, 0x2e, 0xe7, 0x88, 0x80, 0xef, 0x1f, +0x9f, 0x9f, 0x22, 0x1f, 0x9f, 0x1f, 0x9f, 0x1f, +0x9f, 0x1f, 0x9f, 0x1f, 0x9f, 0x1f, 0x9f, 0x03, +0xef, 0x1f, 0x9f, 0xb8, 0xef, 0x1f, 0x9f, 0x00, +0x2e, 0xab, 0x88, 0x40, 0xef +}; + +static const unsigned char pkt208[] = { +0x42, 0xca, 0x00, +0x61, 0x28, 0xfc, 0x9f, 0x5f, +0x20, 0xfc, 0x55, 0x01, 0x2e, 0x05, 0x86, 0x00, +0x2e, 0xb5, 0x88, 0x72, 0x88, 0x7c, 0x8f, 0x76, +0x8f, 0x7a, 0x8f, 0x74, 0x8f, 0x78, 0x8f, 0x72, +0x8f, 0x76, 0x8f, 0x70, 0x8f, 0x74, 0x8f, 0x68, +0x88, 0x14, 0xef, 0xfc, 0x9f, 0x5f, 0x20, 0xfc, +0x55, 0x01, 0xff, 0xab, 0xef, 0x19, 0x27, 0x60, +0x88, 0x11, 0xff, 0xbf, 0x90, 0x51, 0xff, 0xc2, +0x97, 0xdf, 0x01, 0x7f, 0x98, 0xfc, 0x9f, 0xbf, +0x98, 0x24, 0x28, 0xc2, 0x9f, 0x7f, 0x20, 0xbf, +0x90, 0xf4, 0x55, 0x24, 0x2a, 0x1d, 0x88, 0x72, +0xef, 0xff, 0xaf, 0x14, 0xef, 0xff, 0xaf, 0x00, +0xef, 0xff, 0xaf, 0x00, 0xff, 0x80, 0xef, 0x19, +0x27, 0x14, 0xff, 0xfd, 0x97, 0xff, 0xaf, 0x7f, +0x20, 0xfb, 0x55, 0x00, 0x2e, 0x5f, 0x89, 0x03, +0x0c, 0x02, 0x2e, 0xdd, 0x81, 0x05, 0x27, 0x2c, +0x85, 0x05, 0x27, 0x40, 0xef, 0x28, 0xff, 0x1a, +0x27, 0x05, 0x27, 0x02, 0xef, 0x06, 0xff, 0x1a, +0x27, 0x05, 0x27, 0x01, 0xff, 0xab, 0xef, 0x19, +0x27, 0x08, 0xef, 0x1f, 0x98, 0xe4, 0x29, 0x00, +0xff, 0xff, 0x96, 0x20, 0xff, 0xff, 0x96, 0x00, +0xff, 0xff, 0x96, 0x40, 0xff, 0xff, 0x96, 0x00, +0xff, 0xff, 0x96, 0x60, 0xff, 0xff, 0x96, 0x00, +0xff, 0xff, 0x96, 0x00, 0xff, 0xff, 0x96, 0x01, +0xff, 0xff, 0x96, 0x20, 0xff, 0xff, 0x96, 0x00, +0xff, 0xff, 0x96, 0x02, 0xff +}; + +static const unsigned char pkt212[] = { +0x42, 0x38, 0x00, +0xc5, 0x28, 0xff, 0x96, 0x02, +0xff, 0xff, 0x96, 0x82, 0xff, 0xff, 0x96, 0x02, +0xff, 0xff, 0x96, 0x05, 0x88, 0x46, 0x2e, 0x01, +0xdf, 0x9f, 0x28, 0x46, 0x2e, 0x01, 0xbf, 0x05, +0x27, 0x0f, 0xef, 0x5f, 0x98, 0xdd, 0x9f, 0xbf, +0x98, 0x24, 0x28, 0x5f, 0x20, 0xf9, 0x55, 0x24, +0x2a, 0x05, 0x27, 0x7f, 0xef, 0x28, 0xff, 0x1b, +0x27, 0x05, 0x27 +}; + +static const unsigned char pkt216[] = { +0x42, 0xca, 0x00, +0xe0, 0x28, 0xe1, 0x97, 0xe2, +0x9f, 0x46, 0x2e, 0x28, 0xbf, 0xc6, 0x2e, 0x29, +0xbf, 0xad, 0x88, 0x0a, 0x5b, 0xe9, 0x97, 0xea, +0x9f, 0x4f, 0xaf, 0x50, 0xbf, 0x46, 0x2e, 0x28, +0xdf, 0xc6, 0x2e, 0x29, 0xdf, 0x10, 0x10, 0x00, +0x13, 0x01, 0x78, 0x03, 0x10, 0x00, 0x13, 0xff, +0x96, 0xdf, 0x96, 0xd6, 0xcf, 0xd7, 0xdf, 0x0f, +0x1d, 0x01, 0x10, 0x00, 0x13, 0xff, 0x96, 0xdf, +0x96, 0xc8, 0xdf, 0xc7, 0xcf, 0x1f, 0x1d, 0xff, +0x96, 0xdf, 0x96, 0xc2, 0x97, 0xc3, 0x9f, 0x9d, +0x01, 0x5d, 0x01, 0xf5, 0x52, 0xc3, 0x03, 0x02, +0x5e, 0xf2, 0x52, 0x82, 0x03, 0xf0, 0x52, 0x02, +0x0c, 0xf8, 0x43, 0x03, 0x5b, 0x08, 0x44, 0x01, +0x5a, 0x00, 0x2e, 0xf3, 0x8f, 0x7f, 0x88, 0x6d, +0x5b, 0x41, 0x2e, 0xaf, 0xdf, 0xdf, 0x29, 0x41, +0x2e, 0xaf, 0xbf, 0x46, 0x2e, 0x28, 0xdf, 0xc6, +0x2e, 0x29, 0xdf, 0x03, 0x16, 0x00, 0x15, 0x46, +0x2e, 0x28, 0xbf, 0xc6, 0x2e, 0x29, 0xbf, 0x15, +0x27, 0xff, 0x96, 0xdf, 0x96, 0x8d, 0x88, 0x94, +0x88, 0xcd, 0x88, 0x01, 0xff, 0xab, 0xef, 0x19, +0x27, 0x6b, 0x88, 0xbf, 0x22, 0x3f, 0x98, 0x05, +0xff, 0x7f, 0x98, 0xdd, 0x9f, 0xbf, 0x98, 0x24, +0x28, 0x04, 0xff, 0x7f, 0x98, 0xdd, 0x9f, 0xbf, +0x98, 0x24, 0x28, 0x66, 0xff, 0xbf, 0x99, 0x12, +0xff, 0x7f, 0x99, 0xdd, 0x97, 0xdd, 0x9f, 0x19, +0x27, 0xe0, 0x97, 0xff, 0xaf +}; + +static const unsigned char pkt220[] = { +0x42, 0xca, 0x00, +0x44, 0x29, 0x46, 0x2e, 0x28, +0xdf, 0xc6, 0x2e, 0x29, 0xdf, 0x13, 0x10, 0x00, +0x13, 0xff, 0xaf, 0xff, 0xbf, 0xe3, 0x97, 0xff, +0xaf, 0xe4, 0x97, 0xff, 0xaf, 0xe5, 0x97, 0xff, +0xaf, 0xef, 0x88, 0x06, 0x0d, 0xdd, 0x97, 0xdd, +0x9f, 0x46, 0x2e, 0x28, 0xdf, 0xc6, 0x2e, 0x29, +0xdf, 0x06, 0xaf, 0x4e, 0xbf, 0xff, 0x22, 0x11, +0x54, 0x15, 0x27, 0x1a, 0x27, 0x01, 0xff, 0xab, +0xef, 0x19, 0x27, 0xdc, 0x97, 0xdf, 0x99, 0x28, +0x28, 0x0f, 0x27, 0x68, 0x2c, 0xfd, 0x5b, 0xe9, +0x97, 0xff, 0xaf, 0x6a, 0x28, 0x06, 0x25, 0xf4, +0x53, 0x4e, 0x25, 0xf2, 0x55, 0xdc, 0x97, 0xdf, +0x99, 0x28, 0x28, 0x0f, 0x27, 0x68, 0x2c, 0xfd, +0x5b, 0xe9, 0x97, 0xff, 0xaf, 0x6a, 0x28, 0x06, +0x25, 0xf4, 0x55, 0x41, 0x2e, 0xaf, 0xdf, 0xdf, +0x2b, 0x41, 0x2e, 0xaf, 0xbf, 0xbf, 0x22, 0xbf, +0x99, 0x7f, 0x99, 0x05, 0x27, 0xdd, 0x97, 0xdd, +0x9f, 0x06, 0xaf, 0x4e, 0xbf, 0xff, 0x22, 0x05, +0x54, 0xfd, 0x97, 0xff, 0xaf, 0x06, 0x25, 0xfb, +0x53, 0x4e, 0x25, 0xf9, 0x55, 0xfd, 0x97, 0xff, +0xaf, 0x06, 0x25, 0xfb, 0x55, 0x05, 0x27, 0xff, +0x96, 0xc6, 0x2e, 0x01, 0xdf, 0xbf, 0x2c, 0xdd, +0x9f, 0x05, 0x27, 0xc6, 0x2e, 0x28, 0xdf, 0x0f, +0x1d, 0x04, 0x55, 0x0b, 0x88, 0xff, 0x96, 0x10, +0xef, 0xdf, 0x96, 0x06, 0x50, 0x06, 0x88, 0x3f, +0x20, 0xff, 0x96, 0xc6, 0x2e +}; + +static const unsigned char pkt224[] = { +0x42, 0xca, 0x00, +0xa8, 0x29, 0x28, 0xdf, 0x0f, +0x1d, 0xff, 0x96, 0x05, 0x27, 0x46, 0x2e, 0x28, +0xdf, 0xf0, 0x1c, 0x09, 0x27, 0xdf, 0x9f, 0x46, +0x2e, 0x29, 0xdf, 0x0f, 0x1c, 0x09, 0x27, 0x5f, +0x02, 0x05, 0x27, 0x78, 0x88, 0x6f, 0x88, 0x0a, +0xef, 0xdc, 0x9f, 0x3f, 0x9f, 0x5f, 0x20, 0xfb, +0x55, 0x05, 0x27, 0x9f, 0x22, 0x41, 0x2e, 0xab, +0xbf, 0x50, 0xef, 0xdf, 0x96, 0x3a, 0xef, 0xdf, +0x96, 0x29, 0x88, 0x68, 0x88, 0x0a, 0xef, 0xfc, +0x9f, 0xc1, 0x2e, 0xad, 0xbf, 0xc1, 0x2e, 0xac, +0xdf, 0x3f, 0x20, 0xc1, 0x2e, 0xac, 0xbf, 0x6a, +0x88, 0x5f, 0x20, 0xf4, 0x55, 0x5b, 0xef, 0xdf, +0x96, 0x50, 0xcf, 0xdf, 0x96, 0x17, 0x88, 0x5c, +0xef, 0xdf, 0x96, 0x4f, 0xcf, 0xdf, 0x96, 0x12, +0x88, 0x5d, 0xef, 0xdf, 0x96, 0x9f, 0x22, 0xdf, +0x96, 0x0d, 0x88, 0x5e, 0xef, 0xdf, 0x96, 0x46, +0x2e, 0x29, 0xdf, 0xdf, 0x96, 0x07, 0x88, 0x5f, +0xef, 0xdf, 0x96, 0x46, 0x2e, 0x28, 0xdf, 0xdf, +0x96, 0x01, 0x88, 0x0f, 0x27, 0x05, 0x27, 0xdd, +0x97, 0x41, 0x2e, 0xad, 0xbf, 0xdd, 0x97, 0x41, +0x2e, 0xac, 0xbf, 0x44, 0x88, 0x05, 0x27, 0x9f, +0x22, 0x41, 0x2e, 0xab, 0xbf, 0x10, 0xef, 0xdf, +0x96, 0x02, 0xef, 0xdf, 0x96, 0xef, 0x8f, 0x2e, +0x88, 0x0a, 0xef, 0xfc, 0x9f, 0xc1, 0x2e, 0xad, +0xbf, 0xc1, 0x2e, 0xac, 0xdf, 0x3f, 0x20, 0xc1, +0x2e, 0xac, 0xbf, 0x30, 0x88 +}; + +static const unsigned char pkt228[] = { +0x42, 0x9a, 0x00, +0x0c, 0x2a, 0x5f, 0x20, 0xf4, +0x55, 0x1b, 0xef, 0xdf, 0x96, 0x50, 0xcf, 0xdf, +0x96, 0xdd, 0x8f, 0x1c, 0xef, 0xdf, 0x96, 0x4f, +0xcf, 0xdf, 0x96, 0xd8, 0x8f, 0x1d, 0xef, 0xdf, +0x96, 0x9f, 0x22, 0xdf, 0x96, 0xd3, 0x8f, 0x1e, +0xef, 0xdf, 0x96, 0x9f, 0x22, 0xdf, 0x96, 0xce, +0x8f, 0x1f, 0xef, 0xdf, 0x96, 0x01, 0xef, 0xdf, +0x96, 0xc9, 0x8f, 0x0f, 0x27, 0x05, 0x27, 0x02, +0xef, 0x06, 0xff, 0x1a, 0x27, 0x05, 0x27, 0x02, +0xef, 0x06, 0xff, 0x1a, 0x27, 0x05, 0x27, 0xdf, +0x96, 0xff, 0x96, 0x7b, 0xef, 0x00, 0xff, 0x1b, +0x27, 0xdd, 0x9f, 0xdd, 0x97, 0x05, 0x27, 0x01, +0xff, 0xab, 0xef, 0x1b, 0x27, 0x05, 0x27, 0xdf, +0x96, 0x81, 0xef, 0x41, 0x2e, 0xaf, 0xbf, 0xdd, +0x97, 0x05, 0x27, 0x3a, 0xef, 0xff, 0xaf, 0xea, +0x8f, 0x0a, 0xef, 0xfc, 0x9f, 0xff, 0xbf, 0x5f, +0x20, 0xfb, 0x55, 0x50, 0xcf, 0xff, 0xaf, 0x4f, +0xcf, 0xff, 0xaf, 0x9f, 0x22, 0xff, 0xaf, 0x46, +0x2e, 0x29, 0xdf, 0xff, 0xaf, 0x46, 0x2e, 0x28, +0xdf, 0xff, 0xaf, 0x05, 0x27 +}; + +static const unsigned char pkt232[] = { +0x42, 0x18, 0x00, +0x58, 0x2a, 0xd3, 0x45, 0x03, +0x5a, 0x0f, 0x27, 0xd3, 0x45, 0x00, 0x5a, 0x05, +0x27, 0xd0, 0x41, 0xf7, 0x5b, 0xc1, 0x83, 0xf5, +0x50, 0x05, 0x27 +}; + +static const unsigned char pkt236[] = { +0x42, 0x22, 0x00, +0x63, 0x2a, 0xc8, 0x46, 0x0c, +0x5b, 0xd3, 0x45, 0xfd, 0x5a, 0xd3, 0x45, 0xfb, +0x5a, 0xd3, 0x45, 0xf9, 0x5a, 0x41, 0x2e, 0xa1, +0xdf, 0x9f, 0x28, 0x41, 0x2e, 0xa1, 0xbf, 0x02, +0x2e, 0xdd, 0x81, 0x05, 0x27 +}; + +static const unsigned char pkt240[] = { +0x42, 0x50, 0x00, +0x73, 0x2a, 0x07, 0x3d, 0x02, +0x5b, 0x6c, 0x86, 0xc2, 0x23, 0xd3, 0x3c, 0x02, +0x44, 0xd8, 0x2f, 0x1d, 0x5a, 0x02, 0x45, 0xd8, +0x2f, 0x7e, 0x5b, 0x58, 0x23, 0x3c, 0x26, 0x02, +0x55, 0x02, 0x2e, 0x31, 0x84, 0x01, 0x50, 0x02, +0x2e, 0x80, 0x84, 0x07, 0x45, 0xea, 0x5a, 0x41, +0x2e, 0x53, 0xdf, 0xc1, 0x2e, 0x79, 0xdf, 0xff, +0x96, 0xdf, 0x96, 0x41, 0x2e, 0x55, 0xdf, 0xc1, +0x2e, 0x78, 0xdf, 0x9d, 0x01, 0x5d, 0x01, 0xff, +0x22, 0x00, 0x54, 0xff, 0xef, 0x2e, 0xaf, 0xd8, +0x2f, 0x62, 0x50 +}; + +static const unsigned char pkt244[] = { +0x67, 0x05, 0x00, 0x00, 0x02, 0x2e, 0x00, 0x70, +0x67, 0x05, 0x00, 0x01, 0x02, 0x2e, 0xe5, 0x71, +0x67, 0x05, 0x00, 0x02, 0x02, 0x2e, 0xa9, 0x72, +0x67, 0x05, 0x00, 0x08, 0x02, 0x2e, 0xb4, 0x73, +0x67, 0x05, 0x00, 0x07, 0x02, 0x2e, 0x29, 0x74, +0x67, 0x05, 0x00, 0x0d, 0x02, 0x2e, 0x26, 0x75, +0x67, 0x05, 0x00, 0x03, 0x02, 0x2e, 0x4d, 0x75, +0x67, 0x05, 0x00, 0x0e, 0x02, 0x2e, 0x29, 0x77, +0x5a, 0x05, 0x00, 0x00, 0xaa, 0x08, 0x67, 0x27, +0x5a, 0x05, 0x00, 0x01, 0xf4, 0x08, 0xfd, 0x27, +0x67, 0x05, 0x00, 0x09, 0x02, 0x2e, 0xe0, 0x78, +0x5a, 0x05, 0x00, 0x02, 0x82, 0x09, 0x58, 0x2a, +0x5a, 0x05, 0x00, 0x03, 0x78, 0x09, 0x63, 0x2a, +0x5a, 0x05, 0x00, 0x04, 0xe1, 0x02, 0x73, 0x2a, +0x0d, +0x42, 0x04, 0x00, 0x73, 0x2a, 0x07, 0x3d +}; + +struct aes1660_cmd aes1660_init_1[] = { + { .cmd = pkt107, .len = sizeof(pkt107) }, + { .cmd = pkt112, .len = sizeof(pkt112) }, + { .cmd = pkt116, .len = sizeof(pkt116) }, + { .cmd = pkt120, .len = sizeof(pkt120) }, + { .cmd = pkt124, .len = sizeof(pkt124) }, + { .cmd = pkt128, .len = sizeof(pkt128) }, + { .cmd = pkt133, .len = sizeof(pkt133) }, + { .cmd = pkt136, .len = sizeof(pkt136) }, + { .cmd = pkt140, .len = sizeof(pkt140) }, + { .cmd = pkt144, .len = sizeof(pkt144) }, + { .cmd = pkt148, .len = sizeof(pkt148) }, + { .cmd = pkt152, .len = sizeof(pkt152) }, + { .cmd = pkt156, .len = sizeof(pkt156) }, + { .cmd = pkt160, .len = sizeof(pkt160) }, + { .cmd = pkt164, .len = sizeof(pkt164) }, + { .cmd = pkt168, .len = sizeof(pkt168) }, + { .cmd = pkt172, .len = sizeof(pkt172) }, + { .cmd = pkt176, .len = sizeof(pkt176) }, + { .cmd = pkt180, .len = sizeof(pkt180) }, + { .cmd = pkt184, .len = sizeof(pkt184) }, + { .cmd = pkt188, .len = sizeof(pkt188) }, + { .cmd = pkt192, .len = sizeof(pkt192) }, + { .cmd = pkt196, .len = sizeof(pkt196) }, + { .cmd = pkt200, .len = sizeof(pkt200) }, + { .cmd = pkt204, .len = sizeof(pkt204) }, + { .cmd = pkt208, .len = sizeof(pkt208) }, + { .cmd = pkt212, .len = sizeof(pkt212) }, + { .cmd = pkt216, .len = sizeof(pkt216) }, + { .cmd = pkt220, .len = sizeof(pkt220) }, + { .cmd = pkt224, .len = sizeof(pkt224) }, + { .cmd = pkt228, .len = sizeof(pkt228) }, + { .cmd = pkt232, .len = sizeof(pkt232) }, + { .cmd = pkt236, .len = sizeof(pkt236) }, + { .cmd = pkt240, .len = sizeof(pkt240) }, + { .cmd = pkt244, .len = sizeof(pkt244) }, +}; + +/* INIT1 is over, 0x07 cmd returns + * { 0x07, 0x05, 0x00, 0x8f, 0x16, 0x25, 0x01, 0x23 } + */ + +/* Second init sequence + * INIT2 */ +static const unsigned char pkt433[] = { +0x0d, +0x23, +0x42, 0xca, 0x00, +0x00, 0x20, 0x23, +0xff, 0x3f, 0x1d, 0x40, 0x19, 0xc1, 0x2e, 0xa3, +0xbf, 0xc2, 0x2e, 0x00, 0xdf, 0xff, 0x2d, 0x02, +0x5a, 0xbf, 0x22, 0xc1, 0x2e, 0xa3, 0xbf, 0x02, +0xcf, 0x0f, 0x1c, 0x10, 0x18, 0x26, 0x83, 0xc8, +0x46, 0x00, 0x5b, 0x01, 0x0c, 0x57, 0x23, 0x3c, +0x23, 0xf9, 0x34, 0x6b, 0x81, 0x64, 0xef, 0x64, +0xaf, 0xdf, 0xef, 0x27, 0xff, 0xd6, 0xaf, 0xd7, +0xbf, 0x46, 0xef, 0x46, 0xaf, 0x2a, 0xef, 0x2a, +0xaf, 0x05, 0x81, 0x05, 0x27, 0x9c, 0xcf, 0xdf, +0x96, 0xfe, 0xef, 0x27, 0xff, 0x19, 0x27, 0x65, +0xdf, 0xe1, 0x22, 0x1c, 0x55, 0xe0, 0x97, 0xbf, +0x03, 0x19, 0x5e, 0xfe, 0x0c, 0x9f, 0x22, 0x0f, +0xff, 0xe1, 0x22, 0x10, 0x55, 0x20, 0x00, 0x0e, +0x52, 0x82, 0x03, 0x03, 0x53, 0xfe, 0x0d, 0x7f, +0x20, 0xf6, 0x55, 0x08, 0x50, 0x5f, 0x90, 0x82, +0x01, 0x1f, 0x90, 0xc1, 0x97, 0xa0, 0x01, 0x82, +0x01, 0xdf, 0x21, 0x80, 0x03, 0x00, 0x5e, 0x3f, +0x20, 0x29, 0xbf, 0x03, 0x0c, 0x05, 0x27, 0x01, +0x0c, 0x10, 0xff, 0x29, 0xbf, 0x05, 0x27, 0x9a, +0xcf, 0xdf, 0x96, 0xe0, 0xef, 0x27, 0xff, 0x19, +0x27, 0xfe, 0x0c, 0x9f, 0x22, 0x00, 0xff, 0xe1, +0x22, 0x10, 0x55, 0x20, 0x00, 0x0e, 0x52, 0x82, +0x03, 0x03, 0x53, 0x02, 0x0d, 0x3f, 0x20, 0x0f, +0x1f, 0xf5, 0x55, 0x5f, 0x90, 0x82, 0x01, 0x1f, +0x90, 0xc1, 0x97, 0xa0, 0x01, 0x82, 0x01 +}; + +static const unsigned char pkt440[] = { +0x42, 0xca, 0x00, +0x64, 0x20, 0xdf, 0x21, 0x80, +0x03, 0x02, 0x5e, 0x7f, 0x20, 0x00, 0x53, 0xbf, +0x22, 0x29, 0xcf, 0xbf, 0x03, 0x01, 0x5e, 0x5f, +0x20, 0xdf, 0x9f, 0x28, 0xbf, 0x03, 0x0c, 0x05, +0x27, 0x24, 0xcf, 0x10, 0xdf, 0xbf, 0x01, 0x06, +0x1e, 0xe2, 0x2f, 0x13, 0x5c, 0xdf, 0x2d, 0x00, +0x5b, 0x9f, 0x22, 0xdf, 0x96, 0x9b, 0xef, 0x20, +0xff, 0x1d, 0x00, 0x00, 0x13, 0x1a, 0x27, 0x07, +0x27, 0x9b, 0x22, 0xdf, 0x96, 0xbb, 0xcf, 0x1a, +0x88, 0xbb, 0xcf, 0x1b, 0x88, 0x01, 0x0f, 0xbc, +0xcf, 0x15, 0x88, 0xbc, 0xcf, 0x16, 0x88, 0x01, +0x0f, 0xbd, 0xcf, 0x10, 0x88, 0xbd, 0xcf, 0x11, +0x88, 0x01, 0x0f, 0xbe, 0xcf, 0x0b, 0x88, 0xbe, +0xcf, 0x0c, 0x88, 0x01, 0x0c, 0xdd, 0x97, 0x25, +0xaf, 0x05, 0x27, 0xff, 0x00, 0xab, 0x00, 0x72, +0x00, 0x4c, 0x00, 0x33, 0x00, 0x22, 0x00, 0x09, +0x88, 0xbf, 0x9d, 0x05, 0x27, 0x09, 0x27, 0x05, +0x88, 0xff, 0x97, 0x09, 0x27, 0xf6, 0x9f, 0x5f, +0x02, 0xbf, 0x9d, 0x05, 0x27, 0x0f, 0x1c, 0xc0, +0x9f, 0x8a, 0x80, 0x80, 0x10, 0x00, 0x13, 0x0f, +0x1d, 0xc1, 0x03, 0x00, 0x5f, 0x7f, 0x90, 0x05, +0x27, 0x53, 0x80, 0x2b, 0x0d, 0x05, 0x27, 0x9f, +0x22, 0x8f, 0xaf, 0x67, 0x2e, 0xe0, 0xdf, 0x04, +0x1e, 0x00, 0x52, 0x8f, 0x30, 0x67, 0x2e, 0xe1, +0xdf, 0xdf, 0x22, 0x00, 0x54, 0x8f, 0x30, 0x67, +0x2e, 0xfe, 0xdf, 0x04, 0x1e +}; + +static const unsigned char pkt444[] = { +0x42, 0xca, 0x00, +0xc8, 0x20, 0x00, 0x52, 0x8f, +0x31, 0x67, 0x2e, 0xff, 0xdf, 0xdf, 0x22, 0x00, +0x54, 0x8f, 0x31, 0x8f, 0xcf, 0x03, 0x1c, 0x03, +0x1e, 0x00, 0x55, 0x0c, 0x27, 0x0d, 0x27, 0x4a, +0xcf, 0xdf, 0x96, 0x10, 0xcf, 0x5f, 0xdf, 0xbf, +0x03, 0x02, 0x5f, 0x5f, 0xcf, 0x10, 0xaf, 0x04, +0x50, 0x5e, 0xdf, 0xbf, 0x03, 0x01, 0x53, 0x5e, +0xcf, 0x10, 0xaf, 0x46, 0x88, 0x01, 0x2e, 0x1e, +0x80, 0xdd, 0x97, 0x0a, 0x40, 0x1c, 0x5a, 0x37, +0x43, 0x0b, 0x5b, 0xe2, 0xcf, 0x0f, 0x1c, 0x06, +0x1e, 0x07, 0x52, 0x62, 0xdf, 0x18, 0x1f, 0x07, +0x53, 0x04, 0x16, 0xe2, 0xaf, 0x04, 0x11, 0x62, +0xbf, 0x02, 0x50, 0x62, 0xcf, 0xdf, 0x22, 0x0e, +0x54, 0x0e, 0x88, 0x62, 0xdf, 0xbf, 0x03, 0x04, +0x53, 0x62, 0xaf, 0xdf, 0x01, 0xe2, 0xcf, 0x3f, +0x00, 0xe2, 0xaf, 0x0e, 0x88, 0x4a, 0xdf, 0x3f, +0x00, 0x4a, 0xaf, 0x00, 0x2e, 0xc4, 0x8d, 0x05, +0x27, 0xff, 0xef, 0x4a, 0xdf, 0xbf, 0x01, 0x0a, +0x88, 0xa1, 0x27, 0x5f, 0x21, 0x7f, 0x20, 0xfb, +0x55, 0x05, 0x27, 0x62, 0xcf, 0x03, 0x88, 0x1f, +0x22, 0x7f, 0x20, 0xfc, 0x55, 0x05, 0x27, 0x10, +0xdf, 0x02, 0x1f, 0x02, 0x5e, 0x04, 0xff, 0x00, +0x2e, 0x0a, 0x50, 0x05, 0x1f, 0x02, 0x5e, 0x03, +0xff, 0x00, 0x2e, 0x05, 0x50, 0x06, 0x1f, 0x02, +0x5e, 0x02, 0xff, 0x00, 0x2e, 0x00, 0x50, 0x01, +0xff, 0x05, 0x27, 0x10, 0xcf +}; + +static const unsigned char pkt448[] = { +0x42, 0xca, 0x00, +0x2c, 0x21, 0x33, 0xff, 0x3f, +0x00, 0x21, 0xff, 0x00, 0x13, 0x1a, 0x27, 0x07, +0x27, 0x05, 0x27, 0x01, 0x00, 0x02, 0x57, 0x42, +0x87, 0x52, 0x80, 0x92, 0x81, 0xd2, 0x6c, 0xe2, +0x80, 0xf2, 0x80, 0xf6, 0x7b, 0xfa, 0x7e, 0xfe, +0x8b, 0xf9, 0x45, 0x04, 0x5a, 0x40, 0xef, 0xf9, +0x44, 0x03, 0x5b, 0x80, 0xef, 0x01, 0x50, 0x41, +0x2e, 0x7e, 0xdf, 0x4d, 0xaf, 0x05, 0x27, 0x28, +0xff, 0x54, 0xef, 0x19, 0x27, 0x4d, 0x26, 0xe1, +0x2f, 0x28, 0x54, 0x27, 0xff, 0xe0, 0xef, 0x1b, +0x27, 0x10, 0xef, 0x06, 0xaf, 0xfc, 0x97, 0xfc, +0x9f, 0x1c, 0x82, 0x1c, 0x82, 0x1a, 0x27, 0x4d, +0xdf, 0x6d, 0x80, 0x5f, 0x9f, 0x06, 0x25, 0xf5, +0x55, 0x05, 0x27, 0x26, 0x1f, 0x00, 0x5f, 0xbf, +0x22, 0xff, 0x96, 0x6c, 0xef, 0x21, 0xff, 0x1d, +0x00, 0x00, 0x13, 0x1a, 0x27, 0x07, 0x27, 0x1a, +0x27, 0xd6, 0x97, 0x05, 0x27, 0xa3, 0x01, 0xa4, +0x01, 0xa3, 0x01, 0x2e, 0x00, 0xb0, 0x00, 0xb1, +0x00, 0xb2, 0x00, 0xb3, 0x00, 0xb4, 0x00, 0xb5, +0x00, 0xb6, 0x00, 0xb7, 0x00, 0xb8, 0x00, 0xb9, +0x00, 0xba, 0x00, 0x56, 0x00, 0xae, 0x00, 0x54, +0x01, 0x44, 0x01, 0x55, 0x01, 0x44, 0x01, 0xbb, +0x00, 0xbc, 0x00, 0xbd, 0x00, 0xbe, 0x00, 0x83, +0x00, 0x84, 0x00, 0x81, 0x00, 0x82, 0x00, 0x24, +0x00, 0x44, 0x01, 0xdb, 0x00, 0xdc, 0x00, 0xdd, +0x00, 0xde, 0x00, 0x04, 0x00 +}; + +static const unsigned char pkt452[] = { +0x42, 0x52, 0x00, +0x90, 0x21, 0x9b, 0x00, 0x99, +0x00, 0x9e, 0x00, 0x10, 0xef, 0xe6, 0x81, 0x65, +0xaf, 0x10, 0xef, 0xe6, 0x81, 0x9c, 0xaf, 0x10, +0xef, 0xe6, 0x81, 0x9a, 0xaf, 0x05, 0x27, 0xe5, +0x31, 0x1d, 0x81, 0xe5, 0x39, 0x05, 0x27, 0xc8, +0x46, 0x0b, 0x5b, 0xd3, 0x45, 0xfd, 0x5a, 0xd3, +0x45, 0xfb, 0x5a, 0xd3, 0x45, 0xf9, 0x5a, 0x41, +0x2e, 0xa1, 0xdf, 0x9f, 0x28, 0x41, 0x2e, 0xa1, +0xbf, 0x00, 0x88, 0x05, 0x27, 0x9f, 0x22, 0xbf, +0x22, 0x1f, 0x20, 0xfd, 0x53, 0x3f, 0x20, 0x14, +0x1f, 0xfa, 0x55, 0x05, 0x27 +}; + +static const unsigned char pkt456[] = { +0x42, 0xca, 0x00, +0xb8, 0x21, 0x25, 0x85, 0x01, +0x1e, 0x17, 0x55, 0x1b, 0x8a, 0x41, 0x2e, 0x53, +0xdf, 0xc1, 0x2e, 0x79, 0xdf, 0xff, 0x96, 0xdf, +0x96, 0x41, 0x2e, 0x55, 0xdf, 0xc1, 0x2e, 0x78, +0xdf, 0x9d, 0x01, 0x5d, 0x01, 0xff, 0x22, 0x00, +0x54, 0xff, 0xef, 0x2e, 0xaf, 0x05, 0x27, 0x07, +0x80, 0x9f, 0x22, 0xff, 0xaf, 0x00, 0x2e, 0x5d, +0x89, 0x05, 0x27, 0x06, 0x1e, 0x01, 0x55, 0x0f, +0x27, 0x01, 0x70, 0x0a, 0x1e, 0x0a, 0x55, 0x00, +0x88, 0x66, 0x76, 0x02, 0x46, 0x00, 0x5b, 0x08, +0x3b, 0x3b, 0x30, 0x07, 0x35, 0xff, 0xff, 0xc2, +0xbf, 0x0d, 0x27, 0x0c, 0x27, 0x0d, 0x1e, 0x02, +0x55, 0x28, 0x85, 0xf2, 0x5b, 0x7b, 0x76, 0x12, +0x1e, 0x07, 0x55, 0xdc, 0xef, 0x05, 0xff, 0x1a, +0x27, 0x56, 0xdf, 0x3f, 0x20, 0x6d, 0x80, 0x3c, +0xaf, 0x05, 0x27, 0x13, 0x1e, 0x01, 0x55, 0x3c, +0x23, 0x05, 0x27, 0x1f, 0x1e, 0x06, 0x55, 0x37, +0x35, 0x08, 0xef, 0x40, 0x2e, 0xf0, 0xbf, 0x40, +0x2e, 0xf6, 0xbf, 0x05, 0x27, 0x20, 0x1e, 0x06, +0x55, 0x37, 0x3d, 0x16, 0xef, 0x40, 0x2e, 0xf0, +0xbf, 0x40, 0x2e, 0xf6, 0xbf, 0x05, 0x27, 0x22, +0x1e, 0x19, 0x55, 0x21, 0xef, 0x08, 0xaf, 0x09, +0x23, 0x01, 0xef, 0x0b, 0xaf, 0x31, 0xef, 0x0a, +0xaf, 0x81, 0xcf, 0x10, 0xaf, 0xbf, 0x8e, 0x82, +0xcf, 0x4a, 0xaf, 0x00, 0x2e, 0xc4, 0x8d, 0x08, +0xef, 0x9b, 0xaf, 0x99, 0xaf +}; + +static const unsigned char pkt460[] = { +0x42, 0x34, 0x00, +0x1c, 0x22, 0x02, 0xcf, 0x0f, +0x1c, 0x40, 0x18, 0x37, 0x31, 0x02, 0xaf, 0xe2, +0x23, 0x08, 0xef, 0xe3, 0xaf, 0x05, 0x27, 0x23, +0x1e, 0x0c, 0x55, 0x00, 0xef, 0x02, 0xff, 0x19, +0x27, 0xbf, 0x22, 0x20, 0xef, 0x7f, 0x9f, 0x5f, +0x20, 0xfc, 0x55, 0xf0, 0x81, 0x9f, 0x22, 0x41, +0x2e, 0xa3, 0xbf, 0x05, 0x27, 0xcb, 0x74 +}; + +static const unsigned char pkt464[] = { +0x42, 0xca, 0x00, +0x35, 0x22, 0x25, 0x85, 0x44, +0x1e, 0x01, 0x55, 0xe2, 0x2f, 0xf1, 0x50, 0x49, +0x1e, 0x0d, 0x55, 0x37, 0x39, 0x01, 0xef, 0x72, +0x88, 0x00, 0x2e, 0x45, 0x8d, 0x6b, 0x81, 0x08, +0x42, 0x03, 0x5b, 0x3d, 0x23, 0x9f, 0x22, 0x00, +0x2e, 0xb2, 0x8b, 0xd3, 0x3b, 0x05, 0x27, 0x4a, +0x1e, 0x01, 0x55, 0xe2, 0x2f, 0xdd, 0x50, 0x4e, +0x1e, 0x01, 0x55, 0x00, 0x2e, 0xbb, 0x79, 0x55, +0x1e, 0x16, 0x55, 0x28, 0x85, 0xe2, 0x2f, 0xd4, +0x5b, 0x07, 0xef, 0x20, 0x80, 0xe2, 0x2f, 0xd0, +0x5a, 0xfe, 0xcf, 0x0a, 0xaf, 0xfe, 0xcf, 0xfe, +0xcf, 0x41, 0x2e, 0x44, 0xbf, 0xfe, 0xcf, 0x41, +0x2e, 0x45, 0xbf, 0xfe, 0xcf, 0x52, 0xaf, 0xfe, +0xcf, 0x53, 0xaf, 0xfe, 0xcf, 0x5a, 0xaf, 0x05, +0x27, 0x58, 0x1e, 0x0d, 0x55, 0x02, 0x44, 0x01, +0x5a, 0x00, 0x2e, 0x07, 0x78, 0xfe, 0xcf, 0x75, +0xaf, 0xfe, 0xdf, 0x76, 0xbf, 0x41, 0x2e, 0xa4, +0xdf, 0xdf, 0x29, 0x41, 0x2e, 0xa4, 0xbf, 0x05, +0x27, 0x59, 0x1e, 0x02, 0x55, 0xfe, 0xcf, 0x10, +0xaf, 0x54, 0x7e, 0x63, 0x1e, 0x1a, 0x55, 0x28, +0x85, 0xe2, 0x2f, 0xa6, 0x5b, 0x0c, 0xef, 0x20, +0x80, 0xe2, 0x2f, 0xa2, 0x5a, 0xf0, 0xef, 0x00, +0xff, 0x19, 0x27, 0x08, 0xef, 0x06, 0xaf, 0xfe, +0xcf, 0x5f, 0x9f, 0x06, 0x25, 0xfb, 0x55, 0xfe, +0xcf, 0xfe, 0xcf, 0x41, 0x2e, 0x40, 0xbf, 0xfe, +0xcf, 0x41, 0x2e, 0x41, 0xbf +}; + +static const unsigned char pkt468[] = { +0x42, 0x46, 0x00, +0x99, 0x22, 0xfe, 0xcf, 0x41, +0x2e, 0x42, 0xbf, 0x05, 0x27, 0x66, 0x1e, 0x0b, +0x55, 0x33, 0xef, 0x21, 0xff, 0x1a, 0x27, 0x0b, +0xef, 0x06, 0xaf, 0xfe, 0xcf, 0xfe, 0xdf, 0x06, +0x27, 0x01, 0x0e, 0x06, 0x25, 0xf9, 0x55, 0x05, +0x27, 0x35, 0x74, 0xff, 0x96, 0xc6, 0x2e, 0x01, +0xdf, 0x3f, 0x2c, 0xdd, 0x9f, 0x05, 0x27, 0xf9, +0x35, 0xc1, 0x2e, 0x4e, 0xdf, 0x0f, 0x1d, 0x09, +0x27, 0x5f, 0x02, 0xc1, 0x2e, 0x4e, 0xbf, 0x05, +0x27 +}; + +static const unsigned char pkt472[] = { +0x42, 0xca, 0x00, +0xbb, 0x22, 0x09, 0x46, 0x0b, +0x5b, 0x08, 0x31, 0xf2, 0xcf, 0x0b, 0xaf, 0x15, +0xef, 0xf4, 0xaf, 0x30, 0xef, 0x0a, 0xaf, 0x44, +0xef, 0xfa, 0xaf, 0x10, 0xef, 0xf8, 0xaf, 0x5c, +0x88, 0x37, 0xcf, 0xdf, 0x96, 0x08, 0xcf, 0xdf, +0x96, 0x3d, 0xcf, 0xdf, 0x96, 0x00, 0x2e, 0xd4, +0x8d, 0xdd, 0x97, 0x3d, 0xaf, 0xdd, 0x97, 0x08, +0xaf, 0xdd, 0x97, 0x37, 0xaf, 0xa0, 0xcf, 0xbf, +0x1c, 0xa0, 0xaf, 0x05, 0x81, 0xfb, 0x39, 0x08, +0x45, 0x00, 0x5a, 0xfb, 0x31, 0x0a, 0x42, 0x00, +0x5b, 0xa2, 0x39, 0x02, 0xcf, 0x5c, 0xaf, 0xe1, +0xef, 0x40, 0x2e, 0x95, 0xbf, 0x9f, 0x22, 0x25, +0xaf, 0x69, 0xaf, 0x6a, 0xaf, 0x16, 0xaf, 0x40, +0x2e, 0x96, 0xbf, 0x29, 0xaf, 0x02, 0x47, 0x06, +0x5a, 0x0a, 0x41, 0x04, 0x5a, 0x0a, 0xdf, 0x30, +0x1d, 0x30, 0x1f, 0x00, 0x54, 0x01, 0xef, 0x44, +0xaf, 0x09, 0xef, 0x60, 0xaf, 0x08, 0x45, 0x0a, +0x40, 0x06, 0x5a, 0x10, 0xcf, 0x27, 0xaf, 0xe2, +0x23, 0x6e, 0x23, 0x08, 0xef, 0xe3, 0xaf, 0x6f, +0xaf, 0xce, 0x8d, 0x5d, 0xcf, 0x30, 0x1c, 0x00, +0x1e, 0x07, 0x55, 0xf8, 0xcf, 0x5f, 0x2b, 0x9f, +0x29, 0xf8, 0xaf, 0xa1, 0xcf, 0xc1, 0x1c, 0xa1, +0xaf, 0x09, 0x50, 0x10, 0x1e, 0x07, 0x55, 0xf8, +0xcf, 0x5f, 0x29, 0x9f, 0x2b, 0xf8, 0xaf, 0xa1, +0xcf, 0xc1, 0x1c, 0x08, 0x18, 0xa1, 0xaf, 0x41, +0x2e, 0xa4, 0xdf, 0xdf, 0x2d +}; + +static const unsigned char pkt476[] = { +0x42, 0x3a, 0x00, +0x1f, 0x23, 0x04, 0x5b, 0x75, +0xcf, 0xf4, 0xaf, 0x76, 0xcf, 0xf5, 0xaf, 0x00, +0x50, 0x0f, 0x88, 0xe2, 0x23, 0x08, 0xef, 0xe3, +0xaf, 0x81, 0x82, 0x4d, 0xaf, 0xdf, 0x96, 0x64, +0xdf, 0x93, 0x82, 0x93, 0xbf, 0xdd, 0x97, 0x77, +0xff, 0x93, 0x82, 0x94, 0xbf, 0x9e, 0x23, 0xe4, +0x23, 0x05, 0x27, 0x14, 0xef, 0xf4, 0xaf, 0x00, +0xef, 0xf5, 0xaf, 0x05, 0x27 +}; + +static const unsigned char pkt480[] = { +0x42, 0xca, 0x00, +0x3b, 0x23, 0xfe, 0xcf, 0x58, +0xaf, 0xfe, 0xcf, 0xfe, 0xdf, 0x00, 0x2e, 0xa9, +0x8b, 0xfe, 0xcf, 0x3c, 0xaf, 0x07, 0x3d, 0x58, +0x40, 0x4a, 0x5a, 0x3c, 0x26, 0x48, 0x55, 0x37, +0x45, 0x46, 0x5a, 0xe0, 0x88, 0x44, 0x5a, 0x77, +0x88, 0x00, 0x2e, 0xd1, 0x8b, 0xfe, 0xef, 0x16, +0x80, 0x02, 0xcf, 0xdf, 0x96, 0x61, 0xef, 0xc0, +0xaf, 0x04, 0x27, 0xc1, 0x46, 0x04, 0x5b, 0xc0, +0x3e, 0x40, 0xef, 0xc1, 0xaf, 0x01, 0x2e, 0x94, +0x84, 0xd0, 0x41, 0x06, 0x5b, 0x2d, 0x88, 0xf3, +0x5b, 0x6c, 0x86, 0xdd, 0x97, 0x1f, 0x2d, 0x05, +0x5b, 0x03, 0x50, 0x01, 0x0c, 0x02, 0xcf, 0xc0, +0x1c, 0x00, 0x55, 0x05, 0x88, 0xc0, 0x23, 0x20, +0xef, 0xc1, 0xaf, 0x00, 0x2e, 0xf0, 0x8b, 0x05, +0x27, 0x9b, 0x22, 0x37, 0x45, 0x05, 0x5a, 0x41, +0x2e, 0x52, 0xdf, 0xdf, 0x2d, 0x04, 0x5b, 0x00, +0x28, 0x02, 0x50, 0x3b, 0x43, 0x00, 0x5b, 0x00, +0x28, 0xd3, 0xdf, 0xc6, 0x2e, 0x15, 0xbf, 0xd3, +0x3c, 0x40, 0xef, 0x09, 0x80, 0xdd, 0x97, 0xff, +0xaf, 0x00, 0x2e, 0x5d, 0x89, 0xc6, 0x2e, 0x15, +0xdf, 0x10, 0x1d, 0xd3, 0xcf, 0x3f, 0x02, 0xd3, +0xaf, 0x05, 0x27, 0xc1, 0x83, 0x07, 0x45, 0x05, +0x27, 0x3d, 0x23, 0x07, 0x3d, 0x02, 0xcf, 0xdf, +0x96, 0x2e, 0x88, 0x26, 0x88, 0xfe, 0xef, 0x16, +0x80, 0x05, 0xef, 0xc0, 0xaf, 0x04, 0x27, 0xd0, +0x41, 0x02, 0x5b, 0xee, 0x8f +}; + +static const unsigned char pkt484[] = { +0x42, 0xca, 0x00, +0x9f, 0x23, 0xfa, 0x5b, 0xbf, +0x50, 0x31, 0x82, 0x04, 0xef, 0xc1, 0xaf, 0x9b, +0x22, 0x41, 0x88, 0xdd, 0x97, 0xdf, 0x22, 0x02, +0x55, 0x58, 0x40, 0x02, 0x5a, 0x09, 0x50, 0x58, +0x40, 0x07, 0x5a, 0xdd, 0x97, 0x1f, 0x2d, 0xb8, +0x5a, 0x7a, 0x88, 0xb7, 0x5b, 0x9b, 0x22, 0xc7, +0x8f, 0xb4, 0x50, 0x75, 0x88, 0xdc, 0x5b, 0xb7, +0x8f, 0x58, 0x41, 0x01, 0x5b, 0x01, 0x0c, 0xad, +0x7f, 0xd6, 0x50, 0x41, 0x2e, 0x52, 0xdf, 0xed, +0x1c, 0x04, 0x18, 0x41, 0x2e, 0x52, 0xbf, 0x05, +0x27, 0x00, 0x2e, 0xb9, 0x8b, 0xae, 0xdf, 0xe0, +0x19, 0xae, 0xbf, 0x57, 0x40, 0x00, 0x5b, 0xa1, +0x32, 0x57, 0x43, 0x00, 0x5b, 0xae, 0x3f, 0x05, +0x81, 0x05, 0x27, 0x41, 0x2e, 0x52, 0xdf, 0x03, +0x18, 0x41, 0x2e, 0x52, 0xbf, 0x05, 0x27, 0xd3, +0xdf, 0xff, 0x96, 0x9b, 0x22, 0x0b, 0x88, 0xd3, +0x3c, 0x07, 0x80, 0xdd, 0x97, 0xff, 0xaf, 0x00, +0x2e, 0x5d, 0x89, 0xdd, 0x9f, 0x10, 0x1d, 0xd3, +0xcf, 0x3f, 0x02, 0xd3, 0xaf, 0x05, 0x27, 0x37, +0x45, 0x0e, 0x5a, 0x40, 0x88, 0x0c, 0x5a, 0xd7, +0x8f, 0x00, 0x2e, 0xd7, 0x8b, 0x00, 0x2e, 0xeb, +0x8b, 0x41, 0x2e, 0x52, 0xdf, 0xdf, 0x2d, 0x00, +0x5b, 0x00, 0x28, 0x00, 0x2e, 0xf0, 0x8b, 0x05, +0x27, 0xf9, 0xcf, 0xdf, 0x96, 0xf9, 0x3d, 0x00, +0x2e, 0xd1, 0x8d, 0x28, 0xff, 0xa7, 0xef, 0xe1, +0xbf, 0xe0, 0xaf, 0x09, 0xef +}; + +static const unsigned char pkt488[] = { +0x42, 0x6c, 0x00, +0x03, 0x24, 0x10, 0xaf, 0xcf, +0x8c, 0x05, 0x81, 0x01, 0x2e, 0x54, 0x80, 0x01, +0x2e, 0x56, 0x80, 0x20, 0x82, 0x3c, 0x8d, 0x37, +0x82, 0x26, 0x37, 0x00, 0x5a, 0x0c, 0x50, 0xff, +0x96, 0xdf, 0x96, 0x79, 0xcf, 0x7a, 0xdf, 0xff, +0x96, 0xdf, 0x96, 0xc2, 0x97, 0xc3, 0x9f, 0x9d, +0x01, 0x5d, 0x01, 0x07, 0x53, 0xdd, 0x97, 0xdd, +0x9f, 0x79, 0xaf, 0x7a, 0xbf, 0x3b, 0x3b, 0xdd, +0x97, 0xf9, 0xaf, 0x05, 0x27, 0xff, 0x22, 0x01, +0x55, 0x32, 0x1e, 0xf3, 0x5f, 0x02, 0x0c, 0xf6, +0x8f, 0x3b, 0x33, 0x00, 0x28, 0x05, 0x27, 0x0d, +0x27, 0x3c, 0x26, 0x07, 0x54, 0x3c, 0xcf, 0x3d, +0xdf, 0x3f, 0x20, 0x3d, 0xbf, 0xdf, 0x03, 0x01, +0x52, 0x3d, 0x23, 0x0c, 0x27, 0x0d, 0x27 +}; + +static const unsigned char pkt492[] = { +0x42, 0x9c, 0x00, +0x38, 0x24, 0x08, 0x44, 0x12, +0x5a, 0x07, 0x40, 0x01, 0x5b, 0x4f, 0x80, 0x00, +0x50, 0x53, 0x80, 0x27, 0x0d, 0x25, 0xcf, 0x1f, +0x98, 0x29, 0xcf, 0x09, 0x27, 0x28, 0xdf, 0x3f, +0x02, 0x5f, 0x98, 0x62, 0xcf, 0xdf, 0x98, 0xd9, +0x0d, 0x02, 0x0d, 0x00, 0x2e, 0xd5, 0x7f, 0x05, +0x27, 0x08, 0x44, 0x22, 0x5a, 0x07, 0x40, 0x01, +0x5b, 0x4f, 0x80, 0x00, 0x50, 0x53, 0x80, 0x0b, +0x0d, 0x07, 0x40, 0x1b, 0x5a, 0x44, 0xcf, 0x1f, +0x20, 0x44, 0xaf, 0x5f, 0x9f, 0xc1, 0x2e, 0x57, +0xdf, 0xff, 0x96, 0x41, 0x2e, 0x56, 0xdf, 0xdf, +0x96, 0x41, 0x2e, 0x58, 0xdf, 0xc1, 0x2e, 0x59, +0xdf, 0x9d, 0x01, 0x5d, 0x01, 0xff, 0x96, 0xdf, +0x96, 0x40, 0x2e, 0x59, 0xdf, 0x5f, 0x9f, 0x50, +0xdf, 0x7f, 0x9f, 0x1d, 0x00, 0xdd, 0x00, 0x5f, +0x9f, 0x7f, 0x9f, 0x05, 0x27, 0x01, 0x0d, 0x41, +0x2e, 0x56, 0xdf, 0x5f, 0x9f, 0x41, 0x2e, 0x57, +0xdf, 0x5f, 0x9f, 0x41, 0x2e, 0x58, 0xdf, 0x5f, +0x9f, 0x41, 0x2e, 0x59, 0xdf, 0x5f, 0x9f, 0x06, +0x0d, 0x3b, 0xcf, 0x5f, 0x9f, 0x05, 0x27 +}; + +static const unsigned char pkt496[] = { +0x42, 0xca, 0x00, +0x85, 0x24, 0x02, 0x2e, 0x23, +0x80, 0x02, 0x2e, 0x4c, 0x80, 0x99, 0x88, 0x37, +0x41, 0xdd, 0x2f, 0xc1, 0x5a, 0x0a, 0x40, 0x11, +0x5a, 0x1f, 0x88, 0x41, 0x88, 0x4d, 0x88, 0x37, +0x42, 0x08, 0x5a, 0x09, 0x46, 0x0a, 0x5b, 0x23, +0x26, 0x08, 0x55, 0x22, 0xcf, 0xc6, 0x1e, 0x09, +0x52, 0x10, 0xcf, 0x27, 0xaf, 0x6e, 0x23, 0x08, +0xef, 0x6f, 0xaf, 0x62, 0x23, 0x6e, 0x26, 0x00, +0x55, 0x6e, 0x24, 0x05, 0x27, 0x67, 0x2e, 0xff, +0xdf, 0xdf, 0x22, 0x00, 0x2e, 0x25, 0x55, 0x67, +0x2e, 0xfe, 0xdf, 0xdf, 0x22, 0x00, 0x2e, 0x20, +0x55, 0x05, 0x27, 0x61, 0x23, 0x67, 0x2e, 0xff, +0xdf, 0xdf, 0x22, 0x00, 0x2e, 0x19, 0x55, 0x67, +0x2e, 0xfe, 0xdf, 0x65, 0xdf, 0xbf, 0x03, 0x00, +0x2e, 0x13, 0x5e, 0x3b, 0x43, 0x01, 0x5a, 0x3b, +0x41, 0x0e, 0x5a, 0x29, 0xdf, 0xff, 0x96, 0x25, +0xdf, 0x5d, 0x00, 0x10, 0x1f, 0x00, 0x2e, 0x08, +0x53, 0x07, 0x1f, 0x05, 0x53, 0x61, 0x24, 0x3b, +0x41, 0x02, 0x5a, 0x03, 0x1f, 0x00, 0x53, 0x61, +0x24, 0x05, 0x27, 0xff, 0xef, 0x61, 0xaf, 0x05, +0x27, 0x3b, 0x43, 0x09, 0x5b, 0x28, 0xdf, 0x6e, +0xbf, 0x70, 0xef, 0xbf, 0x22, 0x1a, 0x27, 0x29, +0xdf, 0x6e, 0xcf, 0xdf, 0x01, 0x6d, 0x80, 0x6f, +0xaf, 0x05, 0x27, 0x62, 0x26, 0x01, 0x54, 0x61, +0x47, 0x1d, 0x5b, 0x10, 0xdf, 0x27, 0xbf, 0x61, +0xcf, 0xdf, 0x22, 0x18, 0x54 +}; + +static const unsigned char pkt500[] = { +0x42, 0xca, 0x00, +0xe9, 0x24, 0x5f, 0x00, 0x00, +0x57, 0xbf, 0x22, 0x5f, 0xcf, 0xdf, 0x03, 0x00, +0x5f, 0x5f, 0xdf, 0x27, 0xbf, 0x61, 0xcf, 0xdf, +0x2d, 0x00, 0x2e, 0x19, 0x5a, 0x26, 0x88, 0xdf, +0x96, 0x6e, 0xdf, 0x09, 0x88, 0x6e, 0xbf, 0xc0, +0x97, 0x62, 0xdf, 0x05, 0x88, 0x62, 0xbf, 0x6f, +0xdf, 0xdd, 0x97, 0x06, 0x88, 0x6f, 0xaf, 0x05, +0x27, 0x8a, 0x80, 0x20, 0x10, 0x00, 0x13, 0x1c, +0x82, 0x05, 0x27, 0xdf, 0x96, 0x9f, 0x22, 0xd9, +0x81, 0x1a, 0x27, 0xdd, 0x9f, 0x6d, 0x80, 0x05, +0x27, 0x0c, 0x88, 0xdf, 0x96, 0x6f, 0xdf, 0xef, +0x8f, 0x6f, 0xbf, 0x6e, 0xdf, 0xc0, 0x97, 0xf0, +0x8f, 0x6e, 0xaf, 0x62, 0xdf, 0xdd, 0x97, 0xec, +0x8f, 0x62, 0xaf, 0x05, 0x27, 0x27, 0xcf, 0x61, +0x47, 0x00, 0x5b, 0x1f, 0x20, 0x09, 0x8c, 0xff, +0x97, 0x05, 0x27, 0x28, 0xdf, 0x06, 0x88, 0x2d, +0xbf, 0x2c, 0xaf, 0x29, 0xdf, 0x02, 0x88, 0x2b, +0xbf, 0x2a, 0xaf, 0x05, 0x27, 0xff, 0x96, 0x72, +0xcf, 0x01, 0x16, 0xdf, 0x96, 0x57, 0xef, 0x25, +0xff, 0x1d, 0x00, 0x00, 0x13, 0x1a, 0x27, 0x07, +0x27, 0xff, 0x96, 0xc1, 0x9f, 0x3f, 0x22, 0x01, +0x11, 0x8a, 0x80, 0xff, 0x96, 0xdf, 0x96, 0xc2, +0x97, 0xc3, 0x9f, 0x3f, 0x22, 0x01, 0x11, 0x8a, +0x80, 0x01, 0x00, 0xdf, 0x9f, 0xc0, 0x97, 0x04, +0x0c, 0xff, 0x96, 0xdf, 0x96, 0x72, 0xcf, 0x07, +0x1e, 0x04, 0x53, 0x03, 0x1e +}; + +static const unsigned char pkt504[] = { +0x42, 0x2a, 0x00, +0x4d, 0x25, 0x04, 0x53, 0xdd, +0x97, 0xdd, 0x9f, 0x05, 0x27, 0x00, 0x88, 0xd8, +0x71, 0xdd, 0x97, 0xdd, 0x9f, 0xd8, 0x81, 0x05, +0x27, 0x00, 0x04, 0x00, 0x02, 0x4e, 0x07, 0x8e, +0x03, 0x19, 0x02, 0x0c, 0x01, 0x32, 0x04, 0x1c, +0x02, 0x0e, 0x01, 0x87, 0x00 +}; + +static const unsigned char pkt508[] = { +0x42, 0x8c, 0x00, +0x61, 0x25, 0x53, 0x80, 0x01, +0x0d, 0xf5, 0x97, 0xff, 0x0d, 0x1f, 0x99, 0x49, +0xcf, 0x5f, 0x99, 0x08, 0x44, 0x00, 0x2e, 0x39, +0x5a, 0x0b, 0x0d, 0x44, 0xcf, 0x0c, 0x41, 0x00, +0x5b, 0x1f, 0x20, 0x44, 0xaf, 0x5f, 0x9f, 0x04, +0x0d, 0x47, 0xcf, 0x5f, 0x9f, 0x48, 0xcf, 0x5f, +0x9f, 0x1c, 0xcf, 0x5f, 0x9f, 0x1d, 0xcf, 0x5f, +0x9f, 0x1e, 0xcf, 0x5f, 0x9f, 0x49, 0xcf, 0x5f, +0x9f, 0x06, 0x0d, 0xe0, 0x97, 0x0f, 0x1c, 0x5f, +0x9f, 0x0a, 0xcf, 0x5f, 0x9f, 0x09, 0xcf, 0x5f, +0x9f, 0x2a, 0xcf, 0x5f, 0x9f, 0x2b, 0xcf, 0x5f, +0x9f, 0x2c, 0xcf, 0x5f, 0x9f, 0x2d, 0xcf, 0x5f, +0x9f, 0x02, 0x0d, 0x16, 0xcf, 0x5f, 0x9f, 0x44, +0xdf, 0x02, 0x2e, 0x5f, 0x81, 0x5f, 0x9f, 0x4d, +0xcf, 0x5f, 0x9f, 0x09, 0x46, 0x04, 0x5b, 0x90, +0xcf, 0x5f, 0x9f, 0x91, 0xcf, 0x5f, 0x9f, 0x05, +0x50, 0x01, 0x0d, 0x6a, 0xcf, 0x09, 0x27, 0x69, +0xdf, 0x3f, 0x02, 0x5f, 0x9f, 0x05, 0x27 +}; + +static const unsigned char pkt512[] = { +0x42, 0xca, 0x00, +0xa6, 0x25, 0x5c, 0x46, 0x00, +0x5b, 0xfb, 0x31, 0x2d, 0x8a, 0xa9, 0x89, 0xbe, +0x89, 0x06, 0x8a, 0x18, 0x89, 0x18, 0x89, 0x40, +0xcf, 0x41, 0xdf, 0x45, 0xaf, 0x46, 0xbf, 0x07, +0x38, 0x01, 0x5b, 0x01, 0x2e, 0xb7, 0x80, 0x3b, +0x40, 0x00, 0x2e, 0x42, 0x5b, 0x5c, 0x47, 0x00, +0x5a, 0xad, 0x89, 0x09, 0x46, 0x00, 0x5b, 0x75, +0x8d, 0xc9, 0x30, 0x41, 0x2e, 0x7a, 0xdf, 0x1f, +0x28, 0x41, 0x2e, 0x7a, 0xbf, 0xfb, 0x39, 0xfa, +0x33, 0xc8, 0x46, 0x10, 0x5b, 0xd0, 0x46, 0xfd, +0x5b, 0xd3, 0x45, 0xfd, 0x5a, 0xd3, 0x45, 0xfb, +0x5a, 0xd3, 0x45, 0xf9, 0x5a, 0xd3, 0x3c, 0x41, +0x2e, 0xa1, 0xdf, 0x9f, 0x28, 0x41, 0x2e, 0xa1, +0xbf, 0x02, 0x2e, 0xb0, 0x81, 0x0c, 0x78, 0x64, +0x81, 0xd3, 0x45, 0xe9, 0x5a, 0xd3, 0x3c, 0xc8, +0xcf, 0xdf, 0x22, 0x02, 0x55, 0xc7, 0xcf, 0xdf, +0x22, 0x02, 0x54, 0xd3, 0x33, 0xd3, 0x31, 0x64, +0x81, 0xf7, 0xef, 0x16, 0x80, 0xf8, 0xcf, 0x9f, +0x1c, 0xf8, 0xaf, 0xfb, 0x39, 0xfa, 0x33, 0x5c, +0x47, 0x03, 0x5a, 0x08, 0x43, 0xdc, 0x2f, 0xec, +0x5a, 0x02, 0x50, 0x3d, 0x23, 0xdc, 0x2f, 0xe8, +0x50, 0x02, 0xcf, 0x0f, 0x1c, 0x10, 0x18, 0x02, +0xaf, 0xe1, 0x72, 0x5c, 0x46, 0x01, 0x5a, 0x01, +0x2e, 0xcd, 0x80, 0xd0, 0x41, 0x00, 0x5b, 0xc1, +0x83, 0x52, 0x26, 0xe6, 0x2f, 0xbd, 0x55, 0x53, +0x26, 0xe6, 0x2f, 0xba, 0x55 +}; + +static const unsigned char pkt516[] = { +0x42, 0xca, 0x00, +0x0a, 0x26, 0x07, 0x3a, 0x00, +0x2e, 0x38, 0x7c, 0x02, 0x2e, 0x49, 0x81, 0x45, +0xcf, 0x46, 0xdf, 0x19, 0x27, 0xef, 0x88, 0x02, +0x89, 0x05, 0x27, 0x12, 0x82, 0x05, 0x27, 0x41, +0x8a, 0x10, 0x5b, 0x49, 0xef, 0xff, 0xaf, 0x05, +0xef, 0xff, 0xaf, 0x9f, 0x22, 0xff, 0xaf, 0x10, +0xef, 0xff, 0xaf, 0x22, 0xcf, 0xff, 0xaf, 0x23, +0xcf, 0xff, 0xaf, 0x9f, 0x22, 0xff, 0xaf, 0xff, +0xaf, 0x02, 0x2e, 0xa1, 0x81, 0x0c, 0x40, 0x29, +0x5b, 0x4a, 0x80, 0x0d, 0x34, 0x10, 0x5a, 0x49, +0xcf, 0x5f, 0x9d, 0x49, 0x38, 0x53, 0x80, 0x49, +0xcf, 0x5f, 0x9d, 0x4a, 0x80, 0x9f, 0x22, 0x1f, +0x9c, 0x5f, 0x9c, 0x1e, 0xcf, 0x1f, 0x9d, 0x48, +0xcf, 0x1d, 0xdf, 0xdf, 0x01, 0x9f, 0x22, 0x11, +0x50, 0xbb, 0x88, 0xf5, 0x97, 0x49, 0xaf, 0xd4, +0x89, 0x49, 0xcf, 0xf7, 0x1c, 0x5f, 0x9d, 0x44, +0xdf, 0x3f, 0x20, 0x44, 0xbf, 0xff, 0x9a, 0x02, +0x2e, 0x5f, 0x81, 0x20, 0x0d, 0x9f, 0x99, 0xe0, +0x0d, 0x1c, 0xcf, 0x1d, 0xdf, 0x9f, 0x9c, 0xff, +0x9c, 0x00, 0x2e, 0xe9, 0x8f, 0x0c, 0x41, 0x01, +0x5b, 0x00, 0x2e, 0xeb, 0x8f, 0x0c, 0x42, 0x04, +0x5b, 0xe4, 0x40, 0x01, 0x5a, 0xe4, 0x3a, 0x00, +0x50, 0xe4, 0x32, 0x0c, 0x43, 0x04, 0x5b, 0xe4, +0x42, 0x01, 0x5a, 0xe4, 0x30, 0x00, 0x50, 0xe4, +0x38, 0x0c, 0x44, 0x10, 0x5b, 0x18, 0x23, 0x1a, +0x23, 0x1b, 0x23, 0xe4, 0x42 +}; + +static const unsigned char pkt520[] = { +0x42, 0xca, 0x00, +0x6e, 0x26, 0x01, 0x5a, 0xe4, +0x38, 0x00, 0x50, 0xe4, 0x30, 0x4a, 0x80, 0x2b, +0x0d, 0x02, 0x2e, 0x9d, 0x81, 0xe4, 0x42, 0x01, +0x5a, 0xe4, 0x30, 0x00, 0x50, 0xe4, 0x38, 0x0c, +0x45, 0x00, 0x5b, 0x0f, 0x88, 0x0c, 0x46, 0x01, +0x5a, 0x01, 0x2e, 0xb7, 0x80, 0x0c, 0x43, 0x05, +0x5b, 0x0c, 0x45, 0x03, 0x5b, 0x0d, 0x45, 0x01, +0x5b, 0x0d, 0x37, 0x05, 0x27, 0x0c, 0x40, 0x00, +0x5b, 0x0d, 0x3f, 0x05, 0x27, 0x60, 0xcf, 0x0f, +0x1c, 0xdf, 0x9f, 0x0c, 0x1c, 0x12, 0x82, 0x03, +0x1d, 0x19, 0x82, 0x5f, 0x02, 0x60, 0xcf, 0xf0, +0x1c, 0x3f, 0x02, 0x60, 0xaf, 0x05, 0x27, 0x28, +0xff, 0x64, 0xef, 0x19, 0x27, 0x01, 0xff, 0x5a, +0xef, 0x1b, 0x27, 0x06, 0xef, 0x06, 0xaf, 0xfc, +0x97, 0x5f, 0x9f, 0x06, 0x25, 0xfb, 0x55, 0x05, +0x27, 0x10, 0xcf, 0x72, 0xaf, 0x0a, 0x40, 0x13, +0x5a, 0x27, 0xcf, 0x10, 0xaf, 0x07, 0x43, 0x08, +0x5b, 0x3b, 0x31, 0x02, 0x5b, 0x3b, 0x36, 0x3b, +0x43, 0x03, 0x5b, 0x6e, 0xcf, 0xe2, 0xaf, 0x6f, +0xcf, 0xe3, 0xaf, 0x02, 0x2e, 0xd5, 0x80, 0x07, +0x40, 0x02, 0x5a, 0x61, 0x26, 0x00, 0x55, 0x07, +0x33, 0x88, 0x82, 0x02, 0x43, 0xdb, 0x2f, 0xc7, +0x5b, 0x02, 0x2e, 0x72, 0x80, 0x05, 0x27, 0x05, +0x27, 0x05, 0x27, 0x0c, 0xcf, 0x03, 0x1c, 0x0b, +0x55, 0x0c, 0xcf, 0x0c, 0x1c, 0x0c, 0x1e, 0x07, +0x54, 0x08, 0x1e, 0x03, 0x55 +}; + +static const unsigned char pkt524[] = { +0x42, 0xca, 0x00, +0xd2, 0x26, 0x0c, 0x45, 0x01, +0x5b, 0x0d, 0x44, 0x01, 0x5b, 0x0e, 0x33, 0x05, +0x27, 0x0e, 0x3b, 0x05, 0x27, 0x0d, 0xcf, 0x06, +0x1c, 0x09, 0x55, 0x09, 0x46, 0x04, 0x5b, 0x15, +0x88, 0x02, 0x5a, 0xf2, 0xcf, 0x0b, 0xaf, 0x10, +0x50, 0x02, 0xef, 0x0c, 0xaf, 0x0d, 0x50, 0x0a, +0x41, 0x0b, 0x5b, 0x0c, 0x39, 0x0c, 0x46, 0x03, +0x5b, 0x4a, 0x80, 0x0e, 0x88, 0x29, 0x89, 0x00, +0x50, 0x0c, 0x31, 0x0c, 0x38, 0x01, 0x5b, 0x0d, +0x3f, 0x0d, 0x34, 0x05, 0x27, 0x23, 0x26, 0x02, +0x55, 0x22, 0xcf, 0xc8, 0x1e, 0x00, 0x5f, 0x0c, +0x27, 0x0d, 0x27, 0xf0, 0x97, 0x47, 0xaf, 0xf1, +0x97, 0x48, 0xaf, 0x05, 0x27, 0x46, 0x80, 0x08, +0x46, 0x0f, 0x5a, 0xde, 0xef, 0x5f, 0x9f, 0x10, +0xef, 0x5f, 0x9f, 0x00, 0xef, 0x5f, 0x9f, 0x28, +0xff, 0x54, 0xef, 0x1b, 0x27, 0x10, 0xef, 0x06, +0xaf, 0xfc, 0x97, 0x5f, 0x9f, 0x06, 0x25, 0xfb, +0x55, 0x62, 0x80, 0x05, 0x27, 0x46, 0x80, 0x08, +0x47, 0xfb, 0x5a, 0xdf, 0xef, 0x5f, 0x9f, 0x06, +0xef, 0x5f, 0x9f, 0x00, 0xef, 0x5f, 0x9f, 0x28, +0xff, 0x64, 0xef, 0x1b, 0x27, 0x06, 0xef, 0x06, +0xaf, 0xea, 0x50, 0x28, 0xff, 0x64, 0xef, 0x19, +0x27, 0x0f, 0xef, 0x6b, 0xdf, 0xff, 0x96, 0xbf, +0x22, 0xff, 0x96, 0x7b, 0x00, 0xc1, 0x03, 0x6b, +0xbf, 0x0c, 0x53, 0xdf, 0x96, 0xc2, 0x97, 0xbf, +0x01, 0x5f, 0x90, 0xdd, 0x97 +}; + +static const unsigned char pkt528[] = { +0x42, 0xca, 0x00, +0x36, 0x27, 0x5f, 0x20, 0x02, +0x1e, 0xf3, 0x53, 0x02, 0xef, 0x01, 0x0c, 0xdd, +0x9f, 0x6b, 0xbf, 0x15, 0x50, 0xdf, 0x96, 0xc2, +0x97, 0xdf, 0x01, 0xc1, 0x03, 0x05, 0x52, 0xdd, +0x97, 0x1f, 0x20, 0x6b, 0xdf, 0xe0, 0x01, 0x6b, +0xbf, 0x00, 0x50, 0xdd, 0x97, 0x02, 0x0c, 0x6b, +0xdf, 0x28, 0x1f, 0x01, 0x53, 0x28, 0xff, 0x6b, +0xbf, 0x68, 0x1f, 0x01, 0x5f, 0x68, 0xff, 0x6b, +0xbf, 0x05, 0x27, 0x01, 0x81, 0x50, 0x8f, 0xf1, +0x88, 0x05, 0x81, 0x00, 0x2e, 0x32, 0x8d, 0x01, +0x2e, 0x06, 0x80, 0x00, 0x2e, 0xd8, 0x8e, 0x5c, +0x47, 0x02, 0x5b, 0x00, 0x2e, 0x16, 0x8f, 0x01, +0x50, 0x00, 0x2e, 0x14, 0x8f, 0x08, 0xef, 0x0f, +0x80, 0x01, 0x2e, 0x54, 0x80, 0x05, 0x27, 0x07, +0x40, 0x01, 0x5b, 0x54, 0x23, 0x18, 0x50, 0x9c, +0x8e, 0x0d, 0xcf, 0x06, 0x1c, 0x08, 0x54, 0x14, +0x88, 0x02, 0x2e, 0x9d, 0x81, 0x01, 0x2e, 0x50, +0x82, 0x4f, 0x8f, 0x68, 0x88, 0x01, 0x2e, 0x44, +0x84, 0x5c, 0x8f, 0x54, 0x88, 0x09, 0x46, 0x02, +0x5b, 0x37, 0x82, 0x90, 0xaf, 0x91, 0xbf, 0x00, +0x2e, 0xe6, 0x8f, 0x90, 0x8e, 0x0c, 0x3e, 0xed, +0x5a, 0x05, 0x27, 0x37, 0x82, 0x4a, 0x82, 0x1c, +0x82, 0x1c, 0x82, 0x9d, 0xbf, 0xff, 0x97, 0x08, +0x10, 0x09, 0x27, 0x0f, 0x1c, 0x5c, 0x46, 0x03, +0x5b, 0x02, 0x1e, 0x04, 0x53, 0x02, 0xef, 0x02, +0x50, 0x03, 0x1e, 0x00, 0x53 +}; + +static const unsigned char pkt532[] = { +0x42, 0xca, 0x00, +0x9a, 0x27, 0x03, 0xef, 0x69, +0xaf, 0x53, 0x80, 0x1b, 0x0d, 0xe1, 0x97, 0x0f, +0x1c, 0x69, 0xdf, 0xdf, 0x01, 0x00, 0x53, 0x00, +0xff, 0xe0, 0x97, 0x8a, 0x80, 0x04, 0x10, 0x11, +0x82, 0x0f, 0x1e, 0x00, 0x5f, 0x0f, 0xef, 0x6a, +0xaf, 0xc1, 0x2e, 0x47, 0xdf, 0xf0, 0x1d, 0x5f, +0x02, 0xc1, 0x2e, 0x47, 0xbf, 0x10, 0x0d, 0x05, +0x27, 0x01, 0x2e, 0x56, 0x80, 0xf7, 0xef, 0x16, +0x80, 0x66, 0x80, 0x20, 0x82, 0xdf, 0x8e, 0x02, +0x2e, 0x3e, 0x81, 0x02, 0x2e, 0x93, 0x81, 0x00, +0x2e, 0xb4, 0x8e, 0x5c, 0x47, 0x09, 0x5b, 0x6c, +0x38, 0x3b, 0x43, 0x00, 0x5b, 0x6c, 0x30, 0x41, +0x2e, 0x71, 0xdf, 0xc1, 0x2e, 0x72, 0xdf, 0xbf, +0x03, 0x01, 0x55, 0x00, 0x2e, 0xc7, 0x8e, 0x67, +0x8c, 0x01, 0x2e, 0xcd, 0x80, 0x05, 0x27, 0x3b, +0x40, 0x01, 0x5b, 0x02, 0xef, 0x0c, 0xaf, 0x05, +0x27, 0x52, 0xcf, 0xcb, 0xaf, 0x53, 0xdf, 0xcc, +0xbf, 0xdf, 0x22, 0x01, 0x55, 0xff, 0x22, 0x01, +0x54, 0x0e, 0xef, 0xc9, 0xaf, 0x05, 0x27, 0x0e, +0xcf, 0x6e, 0x1c, 0x49, 0xdf, 0x10, 0x1d, 0x3f, +0x02, 0x49, 0xaf, 0x0d, 0x44, 0x06, 0x5a, 0x0a, +0x41, 0x03, 0x5b, 0x49, 0x43, 0x02, 0x5a, 0x48, +0x26, 0x00, 0x55, 0x49, 0x30, 0x9f, 0x2c, 0x05, +0x5a, 0xdf, 0x2c, 0x4c, 0x5a, 0x0e, 0x41, 0x15, +0x5b, 0x0c, 0x46, 0x13, 0x5a, 0x9f, 0x22, 0x1c, +0xaf, 0x21, 0xaf, 0x45, 0x88 +}; + +static const unsigned char pkt536[] = { +0x42, 0xca, 0x00, +0xfe, 0x27, 0x03, 0x5a, 0x9f, +0x2c, 0x05, 0x5a, 0x9f, 0x22, 0x04, 0x50, 0x9f, +0x22, 0x0e, 0x3e, 0x0e, 0x3d, 0x00, 0x5b, 0x5f, +0xef, 0x1d, 0xaf, 0x49, 0xcf, 0x87, 0x1c, 0x01, +0x18, 0x49, 0xaf, 0x34, 0x50, 0x20, 0x26, 0x08, +0x55, 0x1f, 0xcf, 0x48, 0xdf, 0xff, 0x2d, 0x00, +0x5b, 0xff, 0x21, 0x3f, 0x00, 0x00, 0x53, 0xff, +0xef, 0x1f, 0xaf, 0x47, 0xdf, 0x1c, 0xcf, 0x3f, +0x00, 0x1c, 0xaf, 0x1d, 0xcf, 0x48, 0xdf, 0x3f, +0x00, 0x1d, 0xaf, 0xff, 0x22, 0x1f, 0x54, 0xff, +0x2d, 0x03, 0x5b, 0xff, 0x1e, 0x19, 0x5b, 0x60, +0x10, 0x02, 0x50, 0x60, 0x1e, 0x0a, 0x52, 0x60, +0x16, 0x1d, 0xaf, 0x49, 0x30, 0x49, 0x3c, 0x12, +0x5b, 0x21, 0xcf, 0x47, 0xdf, 0x3f, 0x00, 0x1c, +0xaf, 0x21, 0x23, 0x0c, 0x50, 0x59, 0x1e, 0x0a, +0x52, 0x49, 0x34, 0x01, 0x5a, 0x21, 0x23, 0x06, +0x50, 0x21, 0xcf, 0x47, 0xdf, 0x3f, 0x00, 0x21, +0xaf, 0x01, 0x50, 0x06, 0x1e, 0xf4, 0x5f, 0x05, +0x27, 0x0d, 0xcf, 0x06, 0x1c, 0x06, 0x1e, 0x00, +0x54, 0x0d, 0x27, 0x0c, 0x27, 0x09, 0x46, 0x0c, +0x5b, 0xa8, 0x8e, 0x07, 0x52, 0x0f, 0xcf, 0x01, +0x16, 0x02, 0x53, 0x02, 0x2e, 0x36, 0x83, 0x04, +0x50, 0xf4, 0xaf, 0x02, 0x50, 0xf2, 0xcf, 0x02, +0x10, 0x0f, 0xaf, 0x05, 0x27, 0x5a, 0xcf, 0xdf, +0x22, 0x10, 0x54, 0x3e, 0xdf, 0x3f, 0x20, 0x3f, +0x1f, 0x0a, 0x52, 0xbf, 0x22 +}; + +static const unsigned char pkt540[] = { +0x42, 0x50, 0x00, +0x62, 0x28, 0x3e, 0xbf, 0x3d, +0xdf, 0x3f, 0x20, 0xdf, 0x03, 0x02, 0x52, 0xbf, +0x22, 0x3d, 0xbf, 0x0c, 0x27, 0x3d, 0xbf, 0x0d, +0x27, 0x3e, 0xbf, 0x0d, 0x27, 0x0d, 0x27, 0x0f, +0x1c, 0x69, 0xdf, 0xdf, 0x01, 0x00, 0x53, 0x00, +0xff, 0x05, 0x27, 0x37, 0x82, 0x4a, 0x82, 0x1c, +0x82, 0x1c, 0x82, 0x9d, 0xbf, 0xff, 0x97, 0x08, +0x10, 0x09, 0x27, 0x0f, 0x1c, 0x5c, 0x46, 0x03, +0x5b, 0x02, 0x1e, 0x04, 0x53, 0x02, 0xef, 0x02, +0x50, 0x03, 0x1e, 0x00, 0x53, 0x03, 0xef, 0x69, +0xaf, 0x05, 0x27 +}; + +static const unsigned char pkt544[] = { +0x42, 0xca, 0x00, +0x89, 0x28, 0x0c, 0x42, 0x00, +0x5b, 0x18, 0x23, 0x0c, 0x23, 0x0e, 0xcf, 0xe0, +0x1c, 0x0e, 0xaf, 0x0a, 0x40, 0x02, 0x5a, 0x3b, +0x46, 0x00, 0x5a, 0x05, 0x27, 0x37, 0x43, 0xfc, +0x5b, 0x08, 0xef, 0x0c, 0xaf, 0x0d, 0x40, 0x0a, +0x5a, 0xee, 0xcf, 0x64, 0x1e, 0x01, 0x5e, 0x0c, +0x3b, 0x05, 0x27, 0x0d, 0x30, 0x0c, 0x35, 0xbf, +0x22, 0xc0, 0x2e, 0x96, 0xbf, 0x05, 0x27, 0x0e, +0x45, 0x01, 0x5b, 0x07, 0x88, 0x00, 0x50, 0x0e, +0x88, 0x0d, 0x41, 0x1f, 0x5a, 0x0d, 0x42, 0x11, +0x5a, 0xd6, 0x78, 0x51, 0x88, 0x19, 0xcf, 0xfe, +0x1e, 0x03, 0x5c, 0x0e, 0x3d, 0x0d, 0x39, 0x0d, +0x3b, 0x0c, 0x27, 0x0d, 0x27, 0x64, 0x88, 0x19, +0xcf, 0x02, 0x1e, 0xfa, 0x5a, 0x0e, 0x3e, 0x0d, +0x3a, 0x0d, 0x33, 0x0c, 0x27, 0xe4, 0x37, 0x04, +0x89, 0xe4, 0x3f, 0x01, 0x2e, 0xef, 0x82, 0x0d, +0x45, 0x54, 0x5b, 0x18, 0xcf, 0xdf, 0x22, 0x67, +0x54, 0x0d, 0x3b, 0x4f, 0x78, 0xf9, 0x88, 0x01, +0x2e, 0xef, 0x82, 0x0d, 0x42, 0x06, 0x5a, 0x0d, +0x45, 0x48, 0x5b, 0x18, 0xcf, 0xdf, 0x22, 0x5b, +0x54, 0x0d, 0x33, 0x43, 0x78, 0x15, 0xcf, 0x1a, +0xaf, 0xe4, 0x37, 0xea, 0x88, 0x15, 0xcf, 0x1b, +0xaf, 0xe4, 0x3f, 0x0d, 0xcf, 0x60, 0x1c, 0xdf, +0x22, 0x00, 0x55, 0x63, 0x78, 0x16, 0xcf, 0x13, +0xdf, 0x2a, 0x1e, 0x02, 0x5f, 0x2a, 0x1f, 0x00, +0x5f, 0x5c, 0x78, 0xbf, 0x03 +}; + +static const unsigned char pkt548[] = { +0x42, 0xca, 0x00, +0xed, 0x28, 0x44, 0x54, 0x1d, +0x52, 0x01, 0x2e, 0xef, 0x82, 0x9f, 0x22, 0x1a, +0xaf, 0x18, 0xcf, 0x12, 0xdf, 0xbf, 0x03, 0x00, +0x53, 0x24, 0x50, 0x09, 0x88, 0x01, 0x2e, 0xe3, +0x82, 0x9f, 0x22, 0x1b, 0xaf, 0xb1, 0x8f, 0x1d, +0x78, 0x0e, 0xcf, 0x9f, 0x1c, 0x0e, 0xaf, 0x05, +0x27, 0x0e, 0xcf, 0x5f, 0x2d, 0x05, 0x5a, 0x9f, +0x2b, 0x5f, 0x29, 0x0e, 0xaf, 0x5f, 0xff, 0x1d, +0xbf, 0x1c, 0x23, 0x05, 0x27, 0x9f, 0x22, 0x1b, +0xaf, 0x18, 0xcf, 0xdf, 0x22, 0x0a, 0x54, 0x18, +0xcf, 0x12, 0xdf, 0xbf, 0x03, 0x00, 0x53, 0x05, +0x50, 0x06, 0x88, 0x01, 0x2e, 0xe9, 0x82, 0x9f, +0x22, 0x1a, 0xaf, 0x9b, 0x8f, 0x09, 0x88, 0x05, +0x27, 0x0e, 0xcf, 0x9f, 0x2d, 0x04, 0x5a, 0x9f, +0x29, 0x5f, 0x2b, 0x0e, 0xaf, 0x1d, 0x23, 0x1c, +0x23, 0x05, 0x27, 0x0d, 0x45, 0x1e, 0x5b, 0x8e, +0x88, 0x18, 0xcf, 0x12, 0xdf, 0xbf, 0x03, 0x57, +0x53, 0x0d, 0x44, 0x02, 0x5b, 0x0c, 0x35, 0x0c, +0x78, 0x85, 0x88, 0x17, 0xcf, 0xdf, 0x22, 0x08, +0x55, 0x18, 0xcf, 0xdf, 0x22, 0x05, 0x55, 0x0a, +0x88, 0x0e, 0x3b, 0x0c, 0xdf, 0x24, 0x19, 0x0c, +0xbf, 0x05, 0x27, 0x11, 0xcf, 0xff, 0x1e, 0x01, +0x54, 0x1f, 0x20, 0x11, 0xaf, 0x05, 0x27, 0x1a, +0x23, 0x1b, 0x23, 0x05, 0x27, 0xfb, 0x8f, 0x0b, +0x88, 0x6d, 0x88, 0xf6, 0x8e, 0x34, 0x5a, 0x0a, +0xcf, 0xc0, 0x1c, 0xc0, 0x1e +}; + +static const unsigned char pkt552[] = { +0x42, 0xca, 0x00, +0x51, 0x29, 0x0d, 0x55, 0x9f, +0x22, 0x1f, 0xaf, 0x20, 0xaf, 0x19, 0xaf, 0x1b, +0x78, 0x0e, 0xcf, 0x05, 0x18, 0x0e, 0xaf, 0x9f, +0x22, 0x47, 0xaf, 0x48, 0xaf, 0x17, 0xaf, 0x18, +0xaf, 0x05, 0x27, 0x20, 0xcf, 0xdf, 0x22, 0x05, +0x54, 0x05, 0x1e, 0x19, 0x55, 0x1f, 0xdf, 0x80, +0x1f, 0x16, 0x5e, 0x02, 0x78, 0x1f, 0xdf, 0x10, +0x1f, 0x12, 0x5e, 0x9f, 0x22, 0x20, 0xaf, 0x1f, +0xaf, 0x0a, 0xcf, 0xc0, 0x1c, 0x80, 0x1e, 0x0a, +0x55, 0x0d, 0x41, 0x01, 0x5a, 0x0e, 0x35, 0x00, +0x50, 0x0e, 0x36, 0x0d, 0xcf, 0x06, 0x18, 0x0d, +0xaf, 0x0e, 0x31, 0x9f, 0x22, 0x19, 0xaf, 0x03, +0x78, 0x1f, 0x20, 0x06, 0x1e, 0x00, 0x5e, 0x20, +0xaf, 0x0d, 0x47, 0x01, 0x5b, 0x01, 0x2e, 0xa2, +0x73, 0x0d, 0x44, 0x0b, 0x5a, 0x0d, 0xcf, 0x06, +0x1c, 0x08, 0x54, 0x0c, 0x30, 0x48, 0xcf, 0xdf, +0x2d, 0x02, 0x5a, 0x9f, 0x22, 0x1d, 0xaf, 0x01, +0x50, 0x5f, 0xef, 0x1d, 0xaf, 0x0c, 0x31, 0x0d, +0x45, 0x11, 0x5b, 0x0a, 0xcf, 0x30, 0x1c, 0x0c, +0x55, 0x0d, 0xcf, 0x06, 0x1c, 0x06, 0x1e, 0x0b, +0x54, 0x11, 0xcf, 0x07, 0x1e, 0x02, 0x53, 0x04, +0xef, 0x12, 0xaf, 0x04, 0x78, 0x05, 0xef, 0x12, +0xaf, 0x01, 0x78, 0x01, 0xef, 0x12, 0xaf, 0x18, +0x23, 0x9f, 0x22, 0x11, 0xaf, 0x0d, 0xcf, 0x1f, +0x1c, 0x0d, 0xaf, 0x0c, 0xdf, 0x24, 0x19, 0x0c, +0xbf, 0x0a, 0xdf, 0x30, 0x1d +}; + +static const unsigned char pkt556[] = { +0x42, 0x46, 0x00, +0xb5, 0x29, 0x20, 0x1f, 0x01, +0x55, 0xf9, 0x1c, 0x0d, 0xaf, 0x05, 0x27, 0x17, +0xdf, 0xff, 0x21, 0x47, 0xbf, 0x18, 0xdf, 0x84, +0x8e, 0x02, 0x5b, 0x0e, 0x46, 0x03, 0x5a, 0x01, +0x78, 0x0d, 0x43, 0x00, 0x5a, 0xff, 0x21, 0x48, +0xbf, 0x05, 0x27, 0x14, 0x23, 0x15, 0x23, 0xff, +0xef, 0x13, 0xaf, 0x01, 0x2e, 0x00, 0x83, 0x0d, +0x3e, 0x13, 0xcf, 0x46, 0xff, 0xbf, 0x03, 0x00, +0x53, 0x0d, 0x36, 0x05, 0x27, 0x05, 0x27, 0x05, +0x27 +}; + +static const unsigned char pkt560[] = { +0x42, 0xca, 0x00, +0xd7, 0x29, 0xe1, 0x97, 0xe2, +0x9f, 0x46, 0x2e, 0x28, 0xbf, 0xc6, 0x2e, 0x29, +0xbf, 0xad, 0x88, 0x0a, 0x5b, 0xe9, 0x97, 0xea, +0x9f, 0x4f, 0xaf, 0x50, 0xbf, 0x46, 0x2e, 0x28, +0xdf, 0xc6, 0x2e, 0x29, 0xdf, 0x10, 0x10, 0x00, +0x13, 0x01, 0x78, 0x03, 0x10, 0x00, 0x13, 0xff, +0x96, 0xdf, 0x96, 0xd6, 0xcf, 0xd7, 0xdf, 0x0f, +0x1d, 0x01, 0x10, 0x00, 0x13, 0xff, 0x96, 0xdf, +0x96, 0xc8, 0xdf, 0xc7, 0xcf, 0x1f, 0x1d, 0xff, +0x96, 0xdf, 0x96, 0xc2, 0x97, 0xc3, 0x9f, 0x9d, +0x01, 0x5d, 0x01, 0xf5, 0x52, 0xc3, 0x03, 0x02, +0x5e, 0xf2, 0x52, 0x82, 0x03, 0xf0, 0x52, 0x02, +0x0c, 0xf8, 0x43, 0x03, 0x5b, 0x08, 0x44, 0x01, +0x5a, 0x00, 0x2e, 0xf3, 0x8f, 0x7f, 0x88, 0x6d, +0x5b, 0x41, 0x2e, 0xaf, 0xdf, 0xdf, 0x29, 0x41, +0x2e, 0xaf, 0xbf, 0x46, 0x2e, 0x28, 0xdf, 0xc6, +0x2e, 0x29, 0xdf, 0x03, 0x16, 0x00, 0x15, 0x46, +0x2e, 0x28, 0xbf, 0xc6, 0x2e, 0x29, 0xbf, 0x15, +0x27, 0xff, 0x96, 0xdf, 0x96, 0x8d, 0x88, 0x94, +0x88, 0xcd, 0x88, 0x01, 0xff, 0xab, 0xef, 0x19, +0x27, 0x6b, 0x88, 0xbf, 0x22, 0x3f, 0x98, 0x05, +0xff, 0x7f, 0x98, 0xdd, 0x9f, 0xbf, 0x98, 0x24, +0x28, 0x04, 0xff, 0x7f, 0x98, 0xdd, 0x9f, 0xbf, +0x98, 0x24, 0x28, 0x66, 0xff, 0xbf, 0x99, 0x12, +0xff, 0x7f, 0x99, 0xdd, 0x97, 0xdd, 0x9f, 0x19, +0x27, 0xe0, 0x97, 0xff, 0xaf +}; + +static const unsigned char pkt564[] = { +0x42, 0xca, 0x00, +0x3b, 0x2a, 0x46, 0x2e, 0x28, +0xdf, 0xc6, 0x2e, 0x29, 0xdf, 0x13, 0x10, 0x00, +0x13, 0xff, 0xaf, 0xff, 0xbf, 0xe3, 0x97, 0xff, +0xaf, 0xe4, 0x97, 0xff, 0xaf, 0xe5, 0x97, 0xff, +0xaf, 0xef, 0x88, 0x06, 0x0d, 0xdd, 0x97, 0xdd, +0x9f, 0x46, 0x2e, 0x28, 0xdf, 0xc6, 0x2e, 0x29, +0xdf, 0x06, 0xaf, 0x4e, 0xbf, 0xff, 0x22, 0x11, +0x54, 0x15, 0x27, 0x1a, 0x27, 0x01, 0xff, 0xab, +0xef, 0x19, 0x27, 0xdc, 0x97, 0xdf, 0x99, 0x28, +0x28, 0x0f, 0x27, 0x68, 0x2c, 0xfd, 0x5b, 0xe9, +0x97, 0xff, 0xaf, 0x6a, 0x28, 0x06, 0x25, 0xf4, +0x53, 0x4e, 0x25, 0xf2, 0x55, 0xdc, 0x97, 0xdf, +0x99, 0x28, 0x28, 0x0f, 0x27, 0x68, 0x2c, 0xfd, +0x5b, 0xe9, 0x97, 0xff, 0xaf, 0x6a, 0x28, 0x06, +0x25, 0xf4, 0x55, 0x41, 0x2e, 0xaf, 0xdf, 0xdf, +0x2b, 0x41, 0x2e, 0xaf, 0xbf, 0xbf, 0x22, 0xbf, +0x99, 0x7f, 0x99, 0x05, 0x27, 0xdd, 0x97, 0xdd, +0x9f, 0x06, 0xaf, 0x4e, 0xbf, 0xff, 0x22, 0x05, +0x54, 0xfd, 0x97, 0xff, 0xaf, 0x06, 0x25, 0xfb, +0x53, 0x4e, 0x25, 0xf9, 0x55, 0xfd, 0x97, 0xff, +0xaf, 0x06, 0x25, 0xfb, 0x55, 0x05, 0x27, 0xff, +0x96, 0xc6, 0x2e, 0x01, 0xdf, 0xbf, 0x2c, 0xdd, +0x9f, 0x05, 0x27, 0xc6, 0x2e, 0x28, 0xdf, 0x0f, +0x1d, 0x04, 0x55, 0x0b, 0x88, 0xff, 0x96, 0x10, +0xef, 0xdf, 0x96, 0x06, 0x50, 0x06, 0x88, 0x3f, +0x20, 0xff, 0x96, 0xc6, 0x2e +}; + +static const unsigned char pkt568[] = { +0x42, 0xca, 0x00, +0x9f, 0x2a, 0x28, 0xdf, 0x0f, +0x1d, 0xff, 0x96, 0x05, 0x27, 0x46, 0x2e, 0x28, +0xdf, 0xf0, 0x1c, 0x09, 0x27, 0xdf, 0x9f, 0x46, +0x2e, 0x29, 0xdf, 0x0f, 0x1c, 0x09, 0x27, 0x5f, +0x02, 0x05, 0x27, 0x78, 0x88, 0x6f, 0x88, 0x0a, +0xef, 0xdc, 0x9f, 0x3f, 0x9f, 0x5f, 0x20, 0xfb, +0x55, 0x05, 0x27, 0x9f, 0x22, 0x41, 0x2e, 0xab, +0xbf, 0x50, 0xef, 0xdf, 0x96, 0x3a, 0xef, 0xdf, +0x96, 0x29, 0x88, 0x68, 0x88, 0x0a, 0xef, 0xfc, +0x9f, 0xc1, 0x2e, 0xad, 0xbf, 0xc1, 0x2e, 0xac, +0xdf, 0x3f, 0x20, 0xc1, 0x2e, 0xac, 0xbf, 0x6a, +0x88, 0x5f, 0x20, 0xf4, 0x55, 0x5b, 0xef, 0xdf, +0x96, 0x50, 0xcf, 0xdf, 0x96, 0x17, 0x88, 0x5c, +0xef, 0xdf, 0x96, 0x4f, 0xcf, 0xdf, 0x96, 0x12, +0x88, 0x5d, 0xef, 0xdf, 0x96, 0x9f, 0x22, 0xdf, +0x96, 0x0d, 0x88, 0x5e, 0xef, 0xdf, 0x96, 0x46, +0x2e, 0x29, 0xdf, 0xdf, 0x96, 0x07, 0x88, 0x5f, +0xef, 0xdf, 0x96, 0x46, 0x2e, 0x28, 0xdf, 0xdf, +0x96, 0x01, 0x88, 0x0f, 0x27, 0x05, 0x27, 0xdd, +0x97, 0x41, 0x2e, 0xad, 0xbf, 0xdd, 0x97, 0x41, +0x2e, 0xac, 0xbf, 0x44, 0x88, 0x05, 0x27, 0x9f, +0x22, 0x41, 0x2e, 0xab, 0xbf, 0x10, 0xef, 0xdf, +0x96, 0x02, 0xef, 0xdf, 0x96, 0xef, 0x8f, 0x2e, +0x88, 0x0a, 0xef, 0xfc, 0x9f, 0xc1, 0x2e, 0xad, +0xbf, 0xc1, 0x2e, 0xac, 0xdf, 0x3f, 0x20, 0xc1, +0x2e, 0xac, 0xbf, 0x30, 0x88 +}; + +static const unsigned char pkt572[] = { +0x42, 0x9a, 0x00, +0x03, 0x2b, 0x5f, 0x20, 0xf4, +0x55, 0x1b, 0xef, 0xdf, 0x96, 0x50, 0xcf, 0xdf, +0x96, 0xdd, 0x8f, 0x1c, 0xef, 0xdf, 0x96, 0x4f, +0xcf, 0xdf, 0x96, 0xd8, 0x8f, 0x1d, 0xef, 0xdf, +0x96, 0x9f, 0x22, 0xdf, 0x96, 0xd3, 0x8f, 0x1e, +0xef, 0xdf, 0x96, 0x9f, 0x22, 0xdf, 0x96, 0xce, +0x8f, 0x1f, 0xef, 0xdf, 0x96, 0x01, 0xef, 0xdf, +0x96, 0xc9, 0x8f, 0x0f, 0x27, 0x05, 0x27, 0x02, +0xef, 0x06, 0xff, 0x1a, 0x27, 0x05, 0x27, 0x02, +0xef, 0x06, 0xff, 0x1a, 0x27, 0x05, 0x27, 0xdf, +0x96, 0xff, 0x96, 0x7b, 0xef, 0x00, 0xff, 0x1b, +0x27, 0xdd, 0x9f, 0xdd, 0x97, 0x05, 0x27, 0x01, +0xff, 0xab, 0xef, 0x1b, 0x27, 0x05, 0x27, 0xdf, +0x96, 0x81, 0xef, 0x41, 0x2e, 0xaf, 0xbf, 0xdd, +0x97, 0x05, 0x27, 0x3a, 0xef, 0xff, 0xaf, 0xea, +0x8f, 0x0a, 0xef, 0xfc, 0x9f, 0xff, 0xbf, 0x5f, +0x20, 0xfb, 0x55, 0x50, 0xcf, 0xff, 0xaf, 0x4f, +0xcf, 0xff, 0xaf, 0x9f, 0x22, 0xff, 0xaf, 0x46, +0x2e, 0x29, 0xdf, 0xff, 0xaf, 0x46, 0x2e, 0x28, +0xdf, 0xff, 0xaf, 0x05, 0x27 +}; + +static const unsigned char pkt576[] = { +0x42, 0x1a, 0x00, +0x4f, 0x2b, 0x09, 0x43, 0x04, +0x5b, 0x00, 0xef, 0xf8, 0xaf, 0x32, 0xef, 0xfa, +0xaf, 0x03, 0x50, 0x01, 0xef, 0xf8, 0xaf, 0x42, +0xef, 0xfa, 0xaf, 0x05, 0x27 +}; + +static const unsigned char pkt580[] = { +0x42, 0x18, 0x00, +0x5b, 0x2b, 0xd3, 0x45, 0x03, +0x5a, 0x0f, 0x27, 0xd3, 0x45, 0x00, 0x5a, 0x05, +0x27, 0xd0, 0x41, 0xf7, 0x5b, 0xc1, 0x83, 0xf5, +0x50, 0x05, 0x27 +}; + +static const unsigned char pkt584[] = { +0x42, 0x22, 0x00, +0x66, 0x2b, 0xc8, 0x46, 0x0c, +0x5b, 0xd3, 0x45, 0xfd, 0x5a, 0xd3, 0x45, 0xfb, +0x5a, 0xd3, 0x45, 0xf9, 0x5a, 0x41, 0x2e, 0xa1, +0xdf, 0x9f, 0x28, 0x41, 0x2e, 0xa1, 0xbf, 0x02, +0x2e, 0xb0, 0x81, 0x05, 0x27 +}; + +static const unsigned char pkt588[] = { +0x42, 0x0e, 0x00, +0x76, 0x2b, 0x00, 0x19, 0xe9, +0x2f, 0xe3, 0x55, 0xdf, 0x2d, 0xe9, 0x2f, 0xd0, +0x50 +}; + +static const unsigned char pkt592[] = { +0x42, 0x0e, 0x00, +0x7c, 0x2b, 0x00, 0x19, 0xe9, +0x2f, 0xb5, 0x55, 0xdf, 0x2d, 0xe9, 0x2f, 0xa2, +0x50 +}; + +static const unsigned char pkt596[] = { +0x42, 0x0e, 0x00, +0x82, 0x2b, 0xbf, 0x03, 0xe7, +0x2f, 0xb2, 0x53, 0xec, 0xcf, 0x01, 0x2e, 0x2d, +0x73 +}; + +static const unsigned char pkt600[] = { +0x42, 0x50, 0x00, +0x88, 0x2b, 0x07, 0x3d, 0x02, +0x5b, 0x6c, 0x86, 0xc2, 0x23, 0xd3, 0x3c, 0x02, +0x44, 0xd7, 0x2f, 0x08, 0x5a, 0x02, 0x45, 0xd7, +0x2f, 0x69, 0x5b, 0x58, 0x23, 0x3c, 0x26, 0x02, +0x55, 0x02, 0x2e, 0x43, 0x83, 0x01, 0x50, 0x02, +0x2e, 0x92, 0x83, 0x07, 0x45, 0xea, 0x5a, 0x41, +0x2e, 0x53, 0xdf, 0xc1, 0x2e, 0x79, 0xdf, 0xff, +0x96, 0xdf, 0x96, 0x41, 0x2e, 0x55, 0xdf, 0xc1, +0x2e, 0x78, 0xdf, 0x9d, 0x01, 0x5d, 0x01, 0xff, +0x22, 0x00, 0x54, 0xff, 0xef, 0x2e, 0xaf, 0xd7, +0x2f, 0x4d, 0x50 +}; + +static const unsigned char pkt604[] = { +0x67, 0x05, 0x00, 0x00, 0x02, 0x2e, 0x00, 0x70, +0x67, 0x05, 0x00, 0x01, 0x02, 0x2e, 0xb8, 0x71, +0x67, 0x05, 0x00, 0x02, 0x02, 0x2e, 0x35, 0x72, +0x67, 0x05, 0x00, 0x08, 0x02, 0x2e, 0xbb, 0x72, +0x67, 0x05, 0x00, 0x07, 0x02, 0x2e, 0x3b, 0x73, +0x67, 0x05, 0x00, 0x0d, 0x02, 0x2e, 0x38, 0x74, +0x67, 0x05, 0x00, 0x0b, 0x02, 0x2e, 0x85, 0x74, +0x67, 0x05, 0x00, 0x0e, 0x02, 0x2e, 0x61, 0x75, +0x67, 0x05, 0x00, 0x05, 0x02, 0x2e, 0xa6, 0x75, +0x67, 0x05, 0x00, 0x0c, 0x02, 0x2e, 0x89, 0x78, +0x67, 0x05, 0x00, 0x09, 0x02, 0x2e, 0xd7, 0x79, +0x5a, 0x05, 0x00, 0x00, 0x6b, 0x01, 0x4f, 0x2b, +0x5a, 0x05, 0x00, 0x01, 0x82, 0x09, 0x5b, 0x2b, +0x5a, 0x05, 0x00, 0x02, 0x78, 0x09, 0x66, 0x2b, +0x5a, 0x05, 0x00, 0x03, 0x4c, 0x15, 0x76, 0x2b, +0x5a, 0x05, 0x00, 0x04, 0x24, 0x15, 0x7c, 0x2b, +0x5a, 0x05, 0x00, 0x05, 0x50, 0x13, 0x82, 0x2b, +0x5a, 0x05, 0x00, 0x06, 0xe1, 0x02, 0x88, 0x2b, +0x0d, +0x42, 0x04, 0x00, 0x88, 0x2b, 0x07, 0x3d +}; + +struct aes1660_cmd aes1660_init_2[] = { + { .cmd = pkt433, .len = sizeof(pkt433) }, + { .cmd = pkt440, .len = sizeof(pkt440) }, + { .cmd = pkt444, .len = sizeof(pkt444) }, + { .cmd = pkt448, .len = sizeof(pkt448) }, + { .cmd = pkt452, .len = sizeof(pkt452) }, + { .cmd = pkt456, .len = sizeof(pkt456) }, + { .cmd = pkt460, .len = sizeof(pkt460) }, + { .cmd = pkt464, .len = sizeof(pkt464) }, + { .cmd = pkt468, .len = sizeof(pkt468) }, + { .cmd = pkt472, .len = sizeof(pkt472) }, + { .cmd = pkt476, .len = sizeof(pkt476) }, + { .cmd = pkt480, .len = sizeof(pkt480) }, + { .cmd = pkt484, .len = sizeof(pkt484) }, + { .cmd = pkt488, .len = sizeof(pkt488) }, + { .cmd = pkt492, .len = sizeof(pkt492) }, + { .cmd = pkt496, .len = sizeof(pkt496) }, + { .cmd = pkt500, .len = sizeof(pkt500) }, + { .cmd = pkt504, .len = sizeof(pkt504) }, + { .cmd = pkt508, .len = sizeof(pkt508) }, + { .cmd = pkt512, .len = sizeof(pkt512) }, + { .cmd = pkt516, .len = sizeof(pkt516) }, + { .cmd = pkt520, .len = sizeof(pkt520) }, + { .cmd = pkt524, .len = sizeof(pkt524) }, + { .cmd = pkt528, .len = sizeof(pkt528) }, + { .cmd = pkt532, .len = sizeof(pkt532) }, + { .cmd = pkt536, .len = sizeof(pkt536) }, + { .cmd = pkt540, .len = sizeof(pkt540) }, + { .cmd = pkt544, .len = sizeof(pkt544) }, + { .cmd = pkt548, .len = sizeof(pkt548) }, + { .cmd = pkt552, .len = sizeof(pkt552) }, + { .cmd = pkt556, .len = sizeof(pkt556) }, + { .cmd = pkt560, .len = sizeof(pkt560) }, + { .cmd = pkt564, .len = sizeof(pkt564) }, + { .cmd = pkt568, .len = sizeof(pkt568) }, + { .cmd = pkt572, .len = sizeof(pkt572) }, + { .cmd = pkt576, .len = sizeof(pkt576) }, + { .cmd = pkt580, .len = sizeof(pkt580) }, + { .cmd = pkt584, .len = sizeof(pkt584) }, + { .cmd = pkt588, .len = sizeof(pkt588) }, + { .cmd = pkt592, .len = sizeof(pkt592) }, + { .cmd = pkt596, .len = sizeof(pkt596) }, + { .cmd = pkt600, .len = sizeof(pkt600) }, + { .cmd = pkt604, .len = sizeof(pkt604) }, +}; +/* INIT2 is over, 0x07 cmd returns + * { 0x07, 0x05, 0x00, 0x8f, 0x16, 0x25, 0x01, 0x63 } + */ + +/* 0x77 cmd seems to control LED, this sequence + * makes LED blink + */ +static const unsigned char led_blink_cmd[] = { +0x77, 0x18, 0x00, +0x00, 0x3f, 0x00, 0xff, 0x00, +0x01, 0x01, 0x00, 0x00, 0x00, 0xf3, 0x01, 0x00, +0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0xf3, +0x01, 0x00, 0x7f +}; + +/* This sequence (out-of-order num) makes LED light solid + */ +static const unsigned char led_solid_cmd[] = { +0x77, 0x18, 0x00, 0x00, 0x3f, 0x00, 0xff, 0x00, +0x01, 0x01, 0x00, 0x00, 0x00, 0xe7, 0x03, 0x00, +0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x7f +}; + +/* What does 0x40 cmd does? */ +static const unsigned char wait_for_finger_cmd[] = { +0x20, +0x40, 0x04, 0x00, 0x02, 0x1e, 0x00, 0x32 +}; + +/* 0x40 cmd response + * +static const unsigned char pkt1371[] = { +0x40, 0x01, 0x00, 0x01 +}; +*/ + +/* This command sequence starts imaging */ +static const unsigned char start_imaging_cmd[] = { +0x13, +0x20, +0x4c, 0x01, 0x00, 0x00, +0x4b, 0x04, 0x00, 0x78, 0x56, 0x34, 0x12, +0x55, 0x07, 0x00, 0x80, 0x42, 0x00, 0x7f, 0x00, 0x00, 0x14, +0x49, 0x03, 0x00, 0x20, 0x00, 0xc8 +}; + +/* This is a header of image packet: +static const unsigned char pkt1383[] = { +0x49, 0x54, 0x02, +0x0d, 0x0a, 0x01, 0x3a, 0xe4, +*/ + +static const unsigned char set_idle_cmd[] = { + 0x0d, /* Reset or "set idle"? */ +}; + +static const unsigned char read_id_cmd[] = { + 0x44, 0x02, 0x00, 0x08, 0x00, /* Max transfer size is 8 */ + 0x07, /* Read ID? */ +}; + +static const unsigned char calibrate_cmd[] = { + 0x44, 0x02, 0x00, 0x04, 0x00, + 0x06, +}; + +#endif diff --git a/libfprint/drivers/driver_ids.h b/libfprint/drivers/driver_ids.h index f5f22b0..fabce64 100644 --- a/libfprint/drivers/driver_ids.h +++ b/libfprint/drivers/driver_ids.h @@ -34,6 +34,7 @@ enum { VFS301_ID = 11, AES2550_ID = 12, UPEKE2_ID = 13, + AES1660_ID = 14, }; #endif diff --git a/libfprint/fp_internal.h b/libfprint/fp_internal.h index eaa11d4..7b8cd14 100644 --- a/libfprint/fp_internal.h +++ b/libfprint/fp_internal.h @@ -255,6 +255,9 @@ extern struct fp_img_driver uru4000_driver; #ifdef ENABLE_AES1610 extern struct fp_img_driver aes1610_driver; #endif +#ifdef ENABLE_AES1660 +extern struct fp_img_driver aes1660_driver; +#endif #ifdef ENABLE_AES2501 extern struct fp_img_driver aes2501_driver; #endif -- 1.8.0