Procházet zdrojové kódy

Updated corresponding to - NFC_AR_00_E000_12.02.01_OpnSrc

nxf35421 před 4 roky
rodič
revize
0d82b80e37
10 změnil soubory, kde provedl 1941 přidání a 1881 odebrání
  1. 5 3
      nfc/Makefile
  2. 291 219
      nfc/common.c
  3. 44 39
      nfc/common.h
  4. 74 71
      nfc/common_ese.c
  5. 21 21
      nfc/common_ese.h
  6. 110 101
      nfc/i2c_drv.c
  7. 3 2
      nfc/i2c_drv.h
  8. 1326 1325
      nfc/recovery_fw.c
  9. 52 84
      nfc/recovery_seq.c
  10. 15 16
      nfc/recovery_seq.h

+ 5 - 3
nfc/Makefile

@@ -1,6 +1,8 @@
 #
 # Makefile for nfc devices
 #
-obj-$(CONFIG_NXP_NFC_I2C)	+= pn553_i2c.o
-pn553_i2c-objs			:= common.o common_ese.o i2c_drv.o recovery_seq.o recovery_fw.o
-ccflags-y 			+= -DRECOVERY_ENABLE -UDEBUG
+obj-$(CONFIG_NXP_NFC_I2C)		+= pn553_i2c.o
+pn553_i2c-objs				:= common.o common_ese.o i2c_drv.o
+pn553_i2c-$(CONFIG_NXP_NFC_RECOVERY)	+= recovery_seq.o recovery_fw.o
+#ccflags-y                      += -DDEBUG
+

+ 291 - 219
nfc/common.c

@@ -1,4 +1,5 @@
 /******************************************************************************
+ *  Copyright (C) 2015, The Linux Foundation. All rights reserved.
  *  Copyright (C) 2019-2021 NXP
  *   *
  * This program is free software; you can redistribute it and/or modify
@@ -22,16 +23,13 @@
 #include <linux/version.h>
 #include "common.h"
 #include "common_ese.h"
-
-#if defined(RECOVERY_ENABLE)
 #include "recovery_seq.h"
-#endif
 
-int nfc_parse_dt(struct device *dev, platform_configs_t *nfc_configs,
+int nfc_parse_dt(struct device *dev, struct platform_configs *nfc_configs,
 		 uint8_t interface)
 {
 	struct device_node *np = dev->of_node;
-	platform_gpio_t *nfc_gpio = &nfc_configs->gpio;
+	struct platform_gpio *nfc_gpio = &nfc_configs->gpio;
 
 	if (!np) {
 		pr_err("nfc of_node NULL\n");
@@ -58,9 +56,8 @@ int nfc_parse_dt(struct device *dev, platform_configs_t *nfc_configs,
 	}
 
 	nfc_gpio->dwl_req = of_get_named_gpio(np, DTS_FWDN_GPIO_STR, 0);
-	if ((!gpio_is_valid(nfc_gpio->dwl_req))) {
+	if ((!gpio_is_valid(nfc_gpio->dwl_req)))
 		pr_warn("nfc dwl_req gpio invalid %d\n", nfc_gpio->dwl_req);
-	}
 
 	pr_info("%s: %d, %d, %d, %d\n", __func__, nfc_gpio->irq, nfc_gpio->ven,
 		nfc_gpio->dwl_req);
@@ -80,7 +77,8 @@ void set_valid_gpio(int gpio, int value)
 
 int get_valid_gpio(int gpio)
 {
-	int value = -1;
+	int value = -EINVAL;
+
 	if (gpio_is_valid(gpio)) {
 		value = gpio_get_value(gpio);
 		pr_debug("%s gpio %d value %d\n", __func__, gpio, value);
@@ -90,13 +88,14 @@ int get_valid_gpio(int gpio)
 
 void gpio_set_ven(struct nfc_dev *nfc_dev, int value)
 {
-	platform_gpio_t *nfc_gpio = &nfc_dev->configs.gpio;
+	struct platform_gpio *nfc_gpio = &nfc_dev->configs.gpio;
+
 	if (gpio_get_value(nfc_gpio->ven) != value) {
-		pr_debug("%s: gpio_set_ven %d\n", __func__, value);
+		pr_debug("%s: value %d\n", __func__, value);
 		/*reset on change in level from high to low */
-		if (value) {
-			common_ese_on_hard_reset(nfc_dev);
-		}
+		if (value)
+			ese_cold_reset_release(nfc_dev);
+
 		gpio_set_value(nfc_gpio->ven, value);
 		// hardware dependent delay
 		usleep_range(NFC_GPIO_SET_WAIT_TIME_USEC,
@@ -107,6 +106,7 @@ void gpio_set_ven(struct nfc_dev *nfc_dev, int value)
 int configure_gpio(unsigned int gpio, int flag)
 {
 	int ret;
+
 	pr_debug("%s: nfc gpio [%d] flag [%01x]\n", __func__, gpio, flag);
 	if (gpio_is_valid(gpio)) {
 		ret = gpio_request(gpio, "nfc_gpio");
@@ -146,21 +146,21 @@ int configure_gpio(unsigned int gpio, int flag)
 	return ret;
 }
 
-void gpio_free_all(nfc_dev_t *nfc_dev)
+void gpio_free_all(struct nfc_dev *nfc_dev)
 {
-	platform_gpio_t *nfc_gpio = &nfc_dev->configs.gpio;
-	if (gpio_is_valid(nfc_gpio->dwl_req)) {
+	struct platform_gpio *nfc_gpio = &nfc_dev->configs.gpio;
+
+	if (gpio_is_valid(nfc_gpio->dwl_req))
 		gpio_free(nfc_gpio->dwl_req);
-	}
-	if (gpio_is_valid(nfc_gpio->irq)) {
+
+	if (gpio_is_valid(nfc_gpio->irq))
 		gpio_free(nfc_gpio->irq);
-	}
-	if (gpio_is_valid(nfc_gpio->ven)) {
+
+	if (gpio_is_valid(nfc_gpio->ven))
 		gpio_free(nfc_gpio->ven);
-	}
 }
 
-void nfc_misc_unregister(nfc_dev_t *nfc_dev, int count)
+void nfc_misc_unregister(struct nfc_dev *nfc_dev, int count)
 {
 	pr_debug("%s: entry\n", __func__);
 	device_destroy(nfc_dev->nfc_class, nfc_dev->devno);
@@ -169,11 +169,12 @@ void nfc_misc_unregister(nfc_dev_t *nfc_dev, int count)
 	unregister_chrdev_region(nfc_dev->devno, count);
 }
 
-int nfc_misc_register(nfc_dev_t *nfc_dev,
+int nfc_misc_register(struct nfc_dev *nfc_dev,
 		      const struct file_operations *nfc_fops,
 		      int count, char *devname, char *classname)
 {
 	int ret = 0;
+
 	ret = alloc_chrdev_region(&nfc_dev->devno, 0, count, devname);
 	if (ret < 0) {
 		pr_err("%s: failed to alloc chrdev region ret %d\n", __func__, ret);
@@ -217,10 +218,11 @@ int nfc_misc_register(nfc_dev_t *nfc_dev,
  *
  * Return: -ENOIOCTLCMD if arg is not supported, 0 in any other case
  */
-static int nfc_ioctl_power_states(nfc_dev_t *nfc_dev, unsigned long arg)
+static int nfc_ioctl_power_states(struct nfc_dev *nfc_dev, unsigned long arg)
 {
 	int ret = 0;
-	platform_gpio_t *nfc_gpio = &nfc_dev->configs.gpio;
+	struct platform_gpio *nfc_gpio = &nfc_dev->configs.gpio;
+
 	if (arg == NFC_POWER_OFF) {
 		/*
 		 * We are attempting a hardware reset so let us disable
@@ -287,6 +289,7 @@ long nfc_dev_ioctl(struct file *pfile, unsigned int cmd, unsigned long arg)
 {
 	int ret = 0;
 	struct nfc_dev *nfc_dev = pfile->private_data;
+
 	if (!nfc_dev)
 		return -ENODEV;
 
@@ -301,13 +304,6 @@ long nfc_dev_ioctl(struct file *pfile, unsigned int cmd, unsigned long arg)
 	case ESE_GET_PWR:
 		ret = nfc_ese_pwr(nfc_dev, ESE_POWER_STATE);
 		break;
-	case NFC_GET_PLATFORM_TYPE:
-		ret = nfc_dev->interface;
-		break;
-	case NFC_GET_NFC_STATE:
-		ret = nfc_dev->nfc_state;
-		pr_debug("nfc get state %d\n", ret);
-		break;
 	case NFC_GET_IRQ_STATE:
 		ret = gpio_get_value(nfc_dev->configs.gpio.irq);
 		break;
@@ -320,7 +316,8 @@ long nfc_dev_ioctl(struct file *pfile, unsigned int cmd, unsigned long arg)
 
 int nfc_dev_open(struct inode *inode, struct file *filp)
 {
-	nfc_dev_t *nfc_dev = container_of(inode->i_cdev, nfc_dev_t, c_dev);
+	struct nfc_dev *nfc_dev = container_of(inode->i_cdev, struct nfc_dev, c_dev);
+
 	pr_debug("%s: %d, %d\n", __func__, imajor(inode), iminor(inode));
 
 	mutex_lock(&nfc_dev->dev_ref_mutex);
@@ -339,7 +336,8 @@ int nfc_dev_open(struct inode *inode, struct file *filp)
 
 int nfc_dev_close(struct inode *inode, struct file *filp)
 {
-	nfc_dev_t *nfc_dev = container_of(inode->i_cdev, nfc_dev_t, c_dev);
+	struct nfc_dev *nfc_dev = container_of(inode->i_cdev, struct nfc_dev, c_dev);
+
 	pr_debug("%s: %d, %d\n", __func__, imajor(inode), iminor(inode));
 	mutex_lock(&nfc_dev->dev_ref_mutex);
 	if (nfc_dev->dev_ref_count == 1) {
@@ -351,7 +349,8 @@ int nfc_dev_close(struct inode *inode, struct file *filp)
 	else {
 		nfc_ese_pwr(nfc_dev, ESE_RST_PROT_DIS_NFC);
 		/* Uncomment below line incase of eSE calls flow is via NFC driver
-		 * i.e. direct calls from SPI HAL to NFC driver*/
+		 * i.e. direct calls from SPI HAL to NFC driver
+		 */
 		//nfc_ese_pwr(nfc_dev, ESE_RST_PROT_DIS);
 	}
 	filp->private_data = NULL;
@@ -360,248 +359,321 @@ int nfc_dev_close(struct inode *inode, struct file *filp)
 	return 0;
 }
 
-static int get_nfcc_boot_state(struct nfc_dev *nfc_dev)
+/**
+ * get_nfcc_chip_type_dl() - get chip type in fw download command;
+ * @nfc_dev:    nfc device data structure
+ *
+ * Perform get version command and determine chip
+ * type from response.
+ *
+ * @Return:  enum chip_types value
+ *
+ */
+static enum chip_types get_nfcc_chip_type_dl(struct nfc_dev *nfc_dev)
 {
 	int ret = 0;
-	char get_version_cmd[] = { 0x00, 0x04, 0xF1, 0x00, 0x00, 0x00, 0x6E, 0xEF };
-	char get_session_state_cmd[] = { 0x00, 0x04, 0xF2, 0x00, 0x00, 0x00, 0xF5, 0x33 };
-	char rsp_buf[MAX_BUFFER_SIZE];
-
-	pr_debug("%s:Sending GET_VERSION cmd\n", __func__);
-	ret = nfc_dev->nfc_write(nfc_dev, get_version_cmd,
-				 sizeof(get_version_cmd), MAX_RETRY_COUNT);
+	int cmd_length = 0;
+	uint8_t *cmd = nfc_dev->write_kbuf;
+	uint8_t *rsp = nfc_dev->read_kbuf;
+	enum chip_types chip_type = CHIP_UNKNOWN;
+
+	*cmd++ = 0x00;
+	*cmd++ = 0x04;
+	*cmd++ = 0xF1;
+	*cmd++ = 0x00;
+	*cmd++ = 0x00;
+	*cmd++ = 0x00;
+	*cmd++ = 0x6E;
+	*cmd++ = 0xEF;
+	cmd_length = cmd - nfc_dev->write_kbuf;
+
+	pr_debug("%s:Sending GET_VERSION cmd of size=%d\n", __func__, cmd_length);
+	ret = nfc_dev->nfc_write(nfc_dev, nfc_dev->write_kbuf, cmd_length, MAX_RETRY_COUNT);
 	if (ret <= 0) {
 		pr_err("%s: - nfc get version cmd error ret %d\n", __func__, ret);
 		goto err;
 	}
-	memset(rsp_buf, 0x00, MAX_BUFFER_SIZE);
+	memset(rsp, 0x00, DL_GET_VERSION_RSP_LEN_2);
 	pr_debug("%s:Reading response of GET_VERSION cmd\n", __func__);
-	ret = nfc_dev->nfc_read(nfc_dev, rsp_buf, DL_GET_VERSION_RSP_LEN_2, NCI_CMD_RSP_TIMEOUT);
+	ret = nfc_dev->nfc_read(nfc_dev, rsp, DL_GET_VERSION_RSP_LEN_2, NCI_CMD_RSP_TIMEOUT);
 	if (ret <= 0) {
 		pr_err("%s: - nfc get version rsp error ret %d\n", __func__, ret);
 		goto err;
-	} else if (rsp_buf[0] == FW_MSG_CMD_RSP
-		   && ret >= DL_GET_VERSION_RSP_LEN_2) {
-#if defined(RECOVERY_ENABLE)
-		nfc_dev->fw_major_version = rsp_buf[FW_MAJOR_VER_OFFSET];
-		/* recvoery  neeeded only for SN1xx */
-		if(rsp_buf[FW_ROM_CODE_VER_OFFSET] == RECOVERY_FW_SUPPORTED_ROM_VER &&
-			nfc_dev->fw_major_version == RECOVERY_FW_SUPPORTED_MAJOR_VER)
-			nfc_dev->recovery_required = true;
-#endif
-		pr_info("%s:NFC chip_type 0x%02x rom_version 0x%02x fw_minor 0x%02x fw_major 0x%02x\n",
-			__func__, rsp_buf[3], rsp_buf[4], rsp_buf[6], rsp_buf[7]);
-	} else if (rsp_buf[0] != FW_MSG_CMD_RSP
-		   && ret >= (NCI_HDR_LEN + rsp_buf[NCI_PAYLOAD_LEN_IDX])) {
-		pr_info("%s:NFC response bytes 0x%02x 0x%02x 0x%02x 0x%02x 0x%02x\n", __func__,
-			rsp_buf[0], rsp_buf[1], rsp_buf[2], rsp_buf[3], rsp_buf[3]);
-		pr_debug("%s NFCC booted in NCI mode %d\n", __func__, __LINE__);
-		return NFC_STATE_NCI;
-	}
-
-	pr_debug("%s:Sending GET_SESSION_STATE cmd \n", __func__);
-	ret = nfc_dev->nfc_write(nfc_dev, get_session_state_cmd,
-				 sizeof(get_session_state_cmd),
-				 MAX_RETRY_COUNT);
+	}
+	if (rsp[0] == FW_MSG_CMD_RSP && ret >= DL_GET_VERSION_RSP_LEN_2) {
+
+		nfc_dev->fw_major_version = rsp[FW_MAJOR_VER_OFFSET];
+
+		if (rsp[FW_ROM_CODE_VER_OFFSET] == SN1XX_ROM_VER &&
+			rsp[FW_MAJOR_VER_OFFSET] == SN1xx_MAJOR_VER)
+			chip_type = CHIP_SN1XX;
+		else if (rsp[FW_ROM_CODE_VER_OFFSET] == SN220_ROM_VER &&
+			rsp[FW_MAJOR_VER_OFFSET] == SN220_MAJOR_VER)
+			chip_type = CHIP_SN220;
+		pr_info("%s:NFC Chip Type 0x%02x Rom Version 0x%02x FW Minor 0x%02x Major 0x%02x\n",
+			__func__, rsp[3], rsp[4], rsp[6], rsp[7]);
+	}
+err:
+	return chip_type;
+}
+
+/**
+ * get_nfcc_session_state_dl() - gets the session state
+ * @nfc_dev:    nfc device data structure
+ *
+ * Performs get session command and determine
+ * the nfcc state based on session status.
+ *
+ * @Return     nfcc state based on session status.
+ *             NFC_STATE_FW_TEARED if sessionis not closed
+ *             NFC_STATE_FW_DWL if session closed
+ *             NFC_STATE_UNKNOWN in error cases.
+ */
+enum nfc_state_flags get_nfcc_session_state_dl(struct nfc_dev *nfc_dev)
+{
+	int ret = 0;
+	int cmd_length = 0;
+	uint8_t *cmd = nfc_dev->write_kbuf;
+	uint8_t *rsp = nfc_dev->read_kbuf;
+	enum nfc_state_flags nfc_state = NFC_STATE_UNKNOWN;
+
+	*cmd++ = 0x00;
+	*cmd++ = 0x04;
+	*cmd++ = 0xF2;
+	*cmd++ = 0x00;
+	*cmd++ = 0x00;
+	*cmd++ = 0x00;
+	*cmd++ = 0xF5;
+	*cmd++ = 0x33;
+	cmd_length = cmd - nfc_dev->write_kbuf;
+
+	pr_debug("%s:Sending GET_SESSION_STATE cmd of size=%d\n", __func__, cmd_length);
+	ret = nfc_dev->nfc_write(nfc_dev, nfc_dev->write_kbuf, cmd_length, MAX_RETRY_COUNT);
 	if (ret <= 0) {
-		pr_err("%s: - nfc get session state cmd err ret %d\n", __func__, ret);
+		pr_err("%s: - nfc get session cmd error ret %d\n", __func__, ret);
 		goto err;
 	}
-	memset(rsp_buf, 0x00, DL_GET_SESSION_STATE_RSP_LEN);
+	memset(rsp, 0x00, DL_GET_SESSION_STATE_RSP_LEN);
 	pr_debug("%s:Reading response of GET_SESSION_STATE cmd\n", __func__);
-	ret = nfc_dev->nfc_read(nfc_dev, rsp_buf, DL_GET_SESSION_STATE_RSP_LEN, NCI_CMD_RSP_TIMEOUT);
+	ret = nfc_dev->nfc_read(nfc_dev, rsp, DL_GET_SESSION_STATE_RSP_LEN, NCI_CMD_RSP_TIMEOUT);
 	if (ret <= 0) {
-		pr_err("%s: - nfc get session state rsp err %d\n", __func__, ret);
+		pr_err("%s: - nfc get session rsp error ret %d\n", __func__, ret);
 		goto err;
 	}
-	pr_debug("Response bytes are %02x,%02x,%02x,%02x,%02x,%02x,%02x,%02x",
-		 rsp_buf[0], rsp_buf[1], rsp_buf[2], rsp_buf[3], rsp_buf[4], rsp_buf[5],
-		 rsp_buf[6], rsp_buf[7]);
-	/*verify fw in non-teared state */
-	if (rsp_buf[GET_SESSION_STS_OFF] != NFCC_SESSION_STS_CLOSED) {
-		pr_debug("%s NFCC  booted in teared fw state %d\n", __func__, __LINE__);
-		return NFC_STATE_FW_TEARED;
+	if (rsp[0] != FW_MSG_CMD_RSP) {
+		pr_err("%s: - nfc invalid get session state rsp\n", __func__);
+		goto err;
 	}
-	pr_debug("%s NFCC booted in FW DN mode %d\n", __func__, __LINE__);
-	return NFC_STATE_FW_DWL;
-err:
-	pr_err("%s Unlikely NFCC not booted in FW DN mode %d\n", __func__, __LINE__);
-	return NFC_STATE_UNKNOWN;
-}
-
-int validate_nfc_state_nci(nfc_dev_t *nfc_dev)
-{
-	platform_gpio_t *nfc_gpio = &nfc_dev->configs.gpio;
-	if (!gpio_get_value(nfc_gpio->ven)) {
-		pr_err("VEN LOW - NFCC powered off\n");
-		return -ENODEV;
+	pr_debug("Response bytes are %02x%02x%02x%02x%02x%02x%02x%02x",
+		rsp[0], rsp[1], rsp[2], rsp[3], rsp[4], rsp[5], rsp[6], rsp[7]);
+	/*verify fw in non-teared state */
+	if (rsp[GET_SESSION_STS_OFF] != NFCC_SESSION_STS_CLOSED) {
+		pr_err("%s NFCC booted in FW teared state\n", __func__);
+		nfc_state = NFC_STATE_FW_TEARED;
 	} else {
-		if (get_valid_gpio(nfc_gpio->dwl_req) == 1) {
-			pr_err("FW download in-progress\n");
-			return -EBUSY;
-		} else if (nfc_dev->nfc_state == NFC_STATE_FW_DWL) {
-			pr_err("FW download state \n");
-			return -EBUSY;
-		}
+		pr_info("%s NFCC booted in FW DN mode\n", __func__);
+		nfc_state = NFC_STATE_FW_DWL;
 	}
-	return 0;
+err:
+	return nfc_state;
 }
 
-static int set_nfcc_nci_state(struct nfc_dev *nfc_dev)
+/**
+ * get_nfcc_chip_type() - get nfcc chip type in nci mode.
+ * @nfc_dev:   nfc device data structure.
+ *
+ * Function to perform nci core reset and extract
+ * chip type from the response.
+ *
+ * @Return:  enum chip_types value
+ *
+ */
+static enum chip_types get_nfcc_chip_type(struct nfc_dev *nfc_dev)
 {
 	int ret = 0;
-	char dl_reset_cmd[] = { 0x00, 0x04, 0xF0, 0x00, 0x00, 0x00, 0x18, 0x5B };
-
-	pr_debug("%s:Sending DL_RESET to boot in NCI mode\n", __func__);
-	ret = nfc_dev->nfc_write(nfc_dev, dl_reset_cmd,
-				 sizeof(dl_reset_cmd), MAX_RETRY_COUNT);
+	int cmd_length = 0;
+	uint8_t major_version = 0;
+	uint8_t rom_version = 0;
+	uint8_t *cmd = nfc_dev->write_kbuf;
+	uint8_t *rsp = nfc_dev->read_kbuf;
+	enum chip_types chip_type = CHIP_UNKNOWN;
+
+	*cmd++ = 0x20;
+	*cmd++ = 0x00;
+	*cmd++ = 0x01;
+	*cmd++ = 0x00;
+	cmd_length = cmd - nfc_dev->write_kbuf;
+
+	pr_debug("%s:Sending NCI Core Reset cmd of size=%d\n", __func__, cmd_length);
+	ret = nfc_dev->nfc_write(nfc_dev, nfc_dev->write_kbuf, cmd_length, NO_RETRY);
 	if (ret <= 0) {
-		pr_err("%s: nfc dl reset cmd err ret %d\n", __func__, ret);
+		pr_err("%s: - nfc nci core reset cmd error ret %d\n", __func__, ret);
 		goto err;
 	}
-	usleep_range(NFC_SOFT_RESET_WAIT_TIME_USEC,
-		     NFC_SOFT_RESET_WAIT_TIME_USEC + 100);
-	pr_debug("%s NFCC booted in NCI mode %d\n", __func__, __LINE__);
-	return 0;
-
-err:
-	pr_err("%s Unlikely NFCC not booted in NCI mode %d\n", __func__, __LINE__);
-	return -1;
-}
-
-static bool do_nci_reset(nfc_dev_t *nfc_dev) {
-	const uint8_t cmd_reset_nci[] = {0x20, 0x00, 0x01, 0x00};
-	char rsp_buf[MAX_BUFFER_SIZE];
-	int status = 0;
-
-	if (NULL == nfc_dev) {
-		pr_err("%s invalid params ", __func__);
-		return false;
-	}
-	pr_debug("%s Entry \n", __func__);
-	gpio_set_ven(nfc_dev, 0);
-	gpio_set_ven(nfc_dev, 1);
-	pr_debug(" %s send core reset cmd \n", __func__);
-	status = nfc_dev->nfc_write(nfc_dev, cmd_reset_nci,
-		sizeof(cmd_reset_nci), NO_RETRY);
-	if (status <= 0) {
-		pr_err(" %s: nfc nci core reset cmd err status %d\n", __func__, status);
-		return false;
-	}
 	usleep_range(NCI_RESET_RESP_READ_DELAY, NCI_RESET_RESP_READ_DELAY + 100);
 	nfc_dev->nfc_enable_intr(nfc_dev);
-	pr_debug(" %s Reading response of NCI reset \n", __func__);
-	memset(rsp_buf, 0x00, MAX_BUFFER_SIZE);
-	status = nfc_dev->nfc_read(nfc_dev, rsp_buf, MAX_BUFFER_SIZE, NCI_RESET_RESP_TIMEOUT);
-	if (status <= 0) {
-		pr_err(" %s - nfc nci rest rsp error status %d\n", __func__, status);
-		nfc_dev->nfc_disable_intr(nfc_dev);
-		return false;
+
+	memset(rsp, 0x00, NCI_RESET_RSP_LEN);
+	pr_debug("%s:Reading NCI Core Reset rsp\n", __func__);
+	ret = nfc_dev->nfc_read(nfc_dev, rsp, NCI_RESET_RSP_LEN, NCI_CMD_RSP_TIMEOUT);
+	if (ret <= 0) {
+		pr_err("%s: - nfc nci core reset rsp error ret %d\n", __func__, ret);
+		goto err_disable_intr;
 	}
-	pr_debug(" %s: nci core reset response 0x%02x  0x%02x 0x%02x 0x%02x \n",
-		__func__, rsp_buf[0], rsp_buf[1],rsp_buf[2], rsp_buf[3]);
-	if(rsp_buf[0] != NCI_MSG_RSP) {
+
+	pr_debug(" %s: nci core reset response 0x%02x%02x%02x%02x\n",
+		__func__, rsp[0], rsp[1], rsp[2], rsp[3]);
+	if (rsp[0] != NCI_MSG_RSP) {
 		/* reset response failed response*/
-		pr_err("%s invalid nci core reset response");
-		nfc_dev->nfc_disable_intr(nfc_dev);
-		return false;
+		pr_err("%s invalid nci core reset response", __func__);
+		goto err_disable_intr;
 	}
-	memset(rsp_buf, 0x00, MAX_BUFFER_SIZE);
+
+	memset(rsp, 0x00, NCI_RESET_NTF_LEN);
 	/* read nci rest response ntf */
-	status = nfc_dev->nfc_read(nfc_dev, rsp_buf, MAX_BUFFER_SIZE, NCI_CMD_RSP_TIMEOUT);
-	if (status <= 0) {
-		pr_err("%s - nfc nci rest rsp ntf error status %d\n"
-			, __func__, status);
-	}
-	pr_debug(" %s:NFC NCI  Reset Response ntf 0x%02x  0x%02x 0x%02x 0x%02x \n",
-		__func__, rsp_buf[0], rsp_buf[1],rsp_buf[2], rsp_buf[3]);
+	ret = nfc_dev->nfc_read(nfc_dev, rsp, NCI_RESET_NTF_LEN, NCI_CMD_RSP_TIMEOUT);
+	if (ret <= 0) {
+		pr_err("%s - nfc nci rest rsp ntf error status %d\n", __func__, ret);
+		goto err_disable_intr;
+	}
+	if (rsp[0] == NCI_MSG_NTF) {
+		/* read version info from NCI Reset Notification */
+		rom_version = rsp[NCI_HDR_LEN + rsp[NCI_PAYLOAD_LEN_IDX] - 3];
+		major_version = rsp[NCI_HDR_LEN + rsp[NCI_PAYLOAD_LEN_IDX] - 2];
+		/* determine chip type based on version info */
+		if (rom_version == SN1XX_ROM_VER && major_version == SN1xx_MAJOR_VER)
+			chip_type = CHIP_SN1XX;
+		else if (rom_version == SN220_ROM_VER && major_version == SN220_MAJOR_VER)
+			chip_type = CHIP_SN220;
+		pr_debug(" %s:NCI  Core Reset ntf 0x%02x%02x%02x%02x\n",
+			__func__, rsp[0], rsp[1], rsp[2], rsp[3]);
+	}
+err_disable_intr:
 	nfc_dev->nfc_disable_intr(nfc_dev);
-	gpio_set_ven(nfc_dev, 0);
-	gpio_set_ven(nfc_dev, 1);
-	return true;
+err:
+	return chip_type;
+}
+
+/**
+ * validate_download_gpio() - validate download gpio.
+ * @nfc_dev: nfc_dev device data structure.
+ * @chip_type: chip type of the platform.
+ *
+ * Validates dwnld gpio should configured for supported and
+ * should not be configured for unsupported platform.
+ *
+ * @Return:  true if gpio validation successful ortherwise
+ *           false if validation fails.
+ */
+static bool validate_download_gpio(struct nfc_dev *nfc_dev, enum chip_types chip_type)
+{
+	bool status = false;
+	struct platform_gpio *nfc_gpio;
+
+	if (nfc_dev == NULL) {
+		pr_err("%s nfc devices structure is null\n");
+		return status;
+	}
+	nfc_gpio = &nfc_dev->configs.gpio;
+	if (chip_type == CHIP_SN1XX) {
+		/* gpio should be configured for SN1xx */
+		status = gpio_is_valid(nfc_gpio->dwl_req);
+	} else if (chip_type == CHIP_SN220) {
+		/* gpio should not be configured for SN220 */
+		set_valid_gpio(nfc_gpio->dwl_req, 0);
+		gpio_free(nfc_gpio->dwl_req);
+		nfc_gpio->dwl_req = -EINVAL;
+		status = true;
+	}
+	return status;
 }
 
 /* Check for availability of NFC controller hardware */
 int nfcc_hw_check(struct nfc_dev *nfc_dev)
 {
 	int ret = 0;
-	uint8_t nfc_state = NFC_STATE_UNKNOWN;
-	if(do_nci_reset(nfc_dev)) {
-	  pr_info("%s recovery not required", __func__);
-	  return ret;
+	enum nfc_state_flags nfc_state = NFC_STATE_UNKNOWN;
+	enum chip_types chip_type = CHIP_UNKNOWN;
+	struct platform_gpio *nfc_gpio = &nfc_dev->configs.gpio;
+
+	/*get fw version in nci mode*/
+	gpio_set_ven(nfc_dev, 0);
+	gpio_set_ven(nfc_dev, 1);
+	chip_type = get_nfcc_chip_type(nfc_dev);
+
+	/*get fw version in fw dwl mode*/
+	if (chip_type == CHIP_UNKNOWN) {
+		nfc_dev->nfc_enable_intr(nfc_dev);
+		/*Chip is unknown, initially assume with fw dwl pin enabled*/
+		set_valid_gpio(nfc_gpio->dwl_req, 1);
+		gpio_set_ven(nfc_dev, 0);
+		gpio_set_ven(nfc_dev, 1);
+		chip_type = get_nfcc_chip_type_dl(nfc_dev);
+		/*get the state of nfcc normal/teared in fw dwl mode*/
+	} else {
+		nfc_state = NFC_STATE_NCI;
+	}
+
+	/*validate gpio config required as per the chip*/
+	if (!validate_download_gpio(nfc_dev, chip_type)) {
+		pr_info("%s gpio validation fail", __func__);
+		ret = -ENXIO;
+		goto err;
 	}
-	nfc_dev->nfc_enable_intr(nfc_dev);
 
-	/*set download mode for i2c products with dwl pin */
-	enable_dwnld_mode(nfc_dev, true);
+	/*check whether the NFCC is in FW DN or Teared state*/
+	if (nfc_state != NFC_STATE_NCI)
+		nfc_state = get_nfcc_session_state_dl(nfc_dev);
 
-	nfc_state = get_nfcc_boot_state(nfc_dev);
+	/*nfcc state specific operations */
 	switch (nfc_state) {
-	case NFC_STATE_FW_DWL:
-		usleep_range(NFC_GPIO_SET_WAIT_TIME_USEC,
-			     NFC_GPIO_SET_WAIT_TIME_USEC + 100);
-		if (set_nfcc_nci_state(nfc_dev)) {
-			pr_debug("%s: - NFCC DL Reset Fails\n", __func__);
-		} else {
-			nfc_state = NFC_STATE_NCI;
-			/*set NCI mode for i2c products with dwl pin */
-			enable_dwnld_mode(nfc_dev, false);
-		}
-	/* fall-through */
-	case NFC_STATE_NCI:
-		nfc_dev->nfc_ven_enabled = true;
-		pr_debug("%s: - NFCC HW detected\n", __func__);
-		break;
 	case NFC_STATE_FW_TEARED:
 		pr_warn("%s: - NFCC FW Teared State\n", __func__);
-#if defined(RECOVERY_ENABLE)
-		if(nfc_dev->recovery_required &&
-			(do_recovery(nfc_dev) == STATUS_SUCCESS)) {
-			pr_debug("%s: - NFCC HW detected\n", __func__);
+#if IS_ENABLED(CONFIG_NXP_NFC_RECOVERY)
+		/* recovery neeeded only for SN1xx */
+		if (chip_type == CHIP_SN1XX) {
+			if (do_recovery(nfc_dev) == STATUS_FAILED)
+				pr_debug("%s: - nfcc recoverey failed\n", __func__);
+			else
+				pr_debug("%s: - nfcc recovered successfully\n", __func__);
+			nfc_state = get_nfcc_session_state_dl(nfc_dev);
 		}
 #endif
-		nfc_dev->nfc_ven_enabled = true;
+		/*fallthrough*/
+	case NFC_STATE_FW_DWL:
+	case NFC_STATE_NCI:
 		break;
 	case NFC_STATE_UNKNOWN:
 	default:
 		ret = -ENXIO;
-		pr_debug("%s: - NFCC HW not available\n", __func__);
+		pr_err("%s: - NFCC HW not available\n", __func__);
+		goto err;
 	};
-
-	nfc_dev->nfc_disable_intr(nfc_dev);
-	if (nfc_state == NFC_STATE_FW_TEARED) {
-		nfc_state = NFC_STATE_FW_DWL;
-	}
 	nfc_dev->nfc_state = nfc_state;
+	nfc_dev->nfc_ven_enabled = true;
+err:
+	nfc_dev->nfc_disable_intr(nfc_dev);
+	set_valid_gpio(nfc_gpio->dwl_req, 0);
+	gpio_set_ven(nfc_dev, 0);
+	gpio_set_ven(nfc_dev, 1);
 	return ret;
 }
 
-void enable_dwnld_mode(nfc_dev_t* nfc_dev, bool value) {
-	if(nfc_dev != NULL) {
-		platform_gpio_t *nfc_gpio = &nfc_dev->configs.gpio;
-		if (get_valid_gpio(nfc_gpio->dwl_req) != -1) {
-			set_valid_gpio(nfc_gpio->dwl_req, value);
-			gpio_set_ven(nfc_dev, 0);
-			gpio_set_ven(nfc_dev, 1);
-		}
-	}
-}
-
-void set_nfcc_state_from_rsp(struct nfc_dev *dev, const char *buf,
-			     const int count)
+int validate_nfc_state_nci(struct nfc_dev *nfc_dev)
 {
-	int packet_size = 0;
-	if (buf[0] == FW_MSG_CMD_RSP && buf[1] >= FW_MIN_PAYLOAD_LEN) {
-		packet_size = FW_HDR_LEN + buf[FW_PAYLOAD_LEN_IDX] + FW_CRC_LEN;
-		if (packet_size == count && dev->nfc_state == NFC_STATE_NCI)
-			dev->nfc_state = NFC_STATE_FW_DWL;
-	} else {
-		packet_size = NCI_HDR_LEN + buf[NCI_PAYLOAD_LEN_IDX];
-		if (packet_size == count && dev->nfc_state == NFC_STATE_FW_DWL)
-			dev->nfc_state = NFC_STATE_NCI;
+	struct platform_gpio *nfc_gpio = &nfc_dev->configs.gpio;
+
+	if (!gpio_get_value(nfc_gpio->ven)) {
+		pr_err("VEN LOW - NFCC powered off\n");
+		return -ENODEV;
 	}
-	if (count != packet_size) {
-		pr_err("%s: Unlikely mismatch in packet size received (%d/%d)/\n", __func__,
-		       packet_size, count);
+	if (get_valid_gpio(nfc_gpio->dwl_req) == 1) {
+		pr_err("FW download in-progress\n");
+		return -EBUSY;
 	}
+	if (nfc_dev->nfc_state != NFC_STATE_NCI) {
+		pr_err("FW download state\n");
+		return -EBUSY;
+	}
+	return 0;
 }

+ 44 - 39
nfc/common.h

@@ -1,4 +1,5 @@
 /******************************************************************************
+ *  Copyright (C) 2015, The Linux Foundation. All rights reserved.
  *  Copyright (C) 2019-2021 NXP
  *   *
  * This program is free software; you can redistribute it and/or modify
@@ -38,6 +39,7 @@
 // NCI packet details
 #define NCI_MSG_CMD                 0x20
 #define NCI_MSG_RSP                 0x40
+#define NCI_MSG_NTF                 0x60
 #define NCI_HDR_LEN                 3
 #define NCI_PAYLOAD_IDX             3
 #define NCI_PAYLOAD_LEN_IDX         2
@@ -57,6 +59,13 @@
 #define NCI_RESET_RSP_LEN           (4)
 #define NCI_RESET_NTF_LEN           (13)
 
+#define SN1XX_ROM_VER               0x01
+#define SN1xx_MAJOR_VER             0x10
+#define SN220_ROM_VER               0x01
+#define SN220_MAJOR_VER             0x01
+#define FW_ROM_CODE_VER_OFFSET      4
+#define FW_MAJOR_VER_OFFSET         7
+
 #define DL_GET_VERSION_CMD_LEN      (8)
 #define DL_GET_VERSION_RSP_LEN_1    (12)
 #define DL_GET_VERSION_RSP_LEN_2    (20)
@@ -77,14 +86,13 @@
 #define MAX_IRQ_WAIT_TIME               (90)
 #define WAKEUP_SRC_TIMEOUT              (2000)
 
-#define NCI_MAX_CMD_RSP_TIMEOUT         (5000)	//5s
 /*command response timeout*/
 #define NCI_CMD_RSP_TIMEOUT             (2000)	//2s
 /*Time to wait for NFCC to be ready again after any change in the GPIO*/
 #define NFC_GPIO_SET_WAIT_TIME_USEC     (10000)
 /*Time to wait after soft reset via any NCI/DL cmd*/
 #define NFC_SOFT_RESET_WAIT_TIME_USEC   (5000)
-/*Time to wait before retrying i2c writes*/
+/*Time to wait before retrying i2c/I3C writes*/
 #define WRITE_RETRY_WAIT_TIME_USEC      (1000)
 /*Time to wait before retrying read for some specific usecases*/
 #define READ_RETRY_WAIT_TIME_USEC       (3500)
@@ -95,8 +103,6 @@
 #define NFC_SET_PWR            _IOW(NFC_MAGIC, 0x01, long)
 #define ESE_SET_PWR            _IOW(NFC_MAGIC, 0x02, long)
 #define ESE_GET_PWR            _IOR(NFC_MAGIC, 0x03, long)
-#define NFC_GET_PLATFORM_TYPE  _IO(NFC_MAGIC, 0x04)
-#define NFC_GET_NFC_STATE      _IO(NFC_MAGIC, 0x05)
 /* NFC HAL can call this ioctl to get the current IRQ state */
 #define NFC_GET_IRQ_STATE      _IO(NFC_MAGIC, 0x06)
 
@@ -158,34 +164,41 @@ enum gpio_values {
 };
 
 // NFC GPIO variables
-typedef struct platform_gpio {
+struct platform_gpio {
 	unsigned int irq;
 	unsigned int ven;
 	unsigned int dwl_req;
-} platform_gpio_t;
+};
 
-// NFC Struct to get all the required configs from DTS*/
-typedef struct platform_configs {
-	platform_gpio_t gpio;
-} platform_configs_t;
+// NFC Struct to get all the required configs from DTS
+struct platform_configs {
+	struct platform_gpio gpio;
+};
 
 //cold reset Features specific Parameters
-typedef struct cold_reset {
+struct cold_reset {
 	bool rsp_pending;	/*cmd rsp pending status */
 	bool in_progress;	/*for cold reset when gurad timer in progress */
 	bool reset_protection;	/*reset protection enabled/disabled */
 	uint8_t status;		/*status from response buffer */
 	uint8_t rst_prot_src;	/*reset protection source (SPI, NFC) */
-	struct mutex sync_mutex;
 	struct timer_list timer;
 	wait_queue_head_t read_wq;
-} cold_reset_t;
+};
+
+enum chip_types {
+	CHIP_SN1XX = 0x01,
+	CHIP_SN220 = 0x02,
+	CHIP_UNKNOWN = 0xFF,
+};
 
 /* Device specific structure */
-typedef struct nfc_dev {
+struct nfc_dev {
 	wait_queue_head_t read_wq;
 	struct mutex read_mutex;
-	struct mutex ese_access_mutex;
+	struct mutex write_mutex;
+	uint8_t *read_kbuf;
+	uint8_t *write_kbuf;
 	struct mutex dev_ref_mutex;
 	unsigned int dev_ref_count;
 	struct class *nfc_class;
@@ -198,42 +211,34 @@ typedef struct nfc_dev {
 	uint8_t nfc_state;
 	/* NFC VEN pin state */
 	bool nfc_ven_enabled;
-#if defined(RECOVERY_ENABLE)
 	/* current firmware major version */
 	uint8_t fw_major_version;
-	/* NFC recovery Required */
-	bool recovery_required;
-#endif
 	union {
-		i2c_dev_t i2c_dev;
+		struct i2c_dev i2c_dev;
 	};
-	platform_configs_t configs;
-	cold_reset_t cold_reset;
+	struct platform_configs configs;
+	struct cold_reset cold_reset;
 
-	/*funtion pointers for the common i2c functionality */
-	int (*nfc_read) (struct nfc_dev *dev, char *buf, size_t count, int timeout);
-	int (*nfc_write) (struct nfc_dev *dev, const char *buf, const size_t count,
+	/*function pointers for the common i2c functionality */
+	int (*nfc_read)(struct nfc_dev *dev, char *buf, size_t count, int timeout);
+	int (*nfc_write)(struct nfc_dev *dev, const char *buf, const size_t count,
 			  int max_retry_cnt);
-	int (*nfc_enable_intr) (struct nfc_dev *dev);
-	int (*nfc_disable_intr) (struct nfc_dev *dev);
-	int (*nfc_flush_readq) (struct nfc_dev *dev);
-} nfc_dev_t;
+	int (*nfc_enable_intr)(struct nfc_dev *dev);
+	int (*nfc_disable_intr)(struct nfc_dev *dev);
+};
 
 int nfc_dev_open(struct inode *inode, struct file *filp);
 int nfc_dev_close(struct inode *inode, struct file *filp);
 long nfc_dev_ioctl(struct file *pfile, unsigned int cmd, unsigned long arg);
-int nfc_parse_dt(struct device *dev, platform_configs_t *nfc_configs,
+int nfc_parse_dt(struct device *dev, struct platform_configs *nfc_configs,
 		 uint8_t interface);
-int nfc_misc_register(nfc_dev_t *nfc_dev,
+int nfc_misc_register(struct nfc_dev *nfc_dev,
 		      const struct file_operations *nfc_fops, int count, char *devname,
 		      char *classname);
-void nfc_misc_unregister(nfc_dev_t *nfc_dev, int count);
+void nfc_misc_unregister(struct nfc_dev *nfc_dev, int count);
 int configure_gpio(unsigned int gpio, int flag);
-void gpio_set_ven(nfc_dev_t *nfc_dev, int value);
-void gpio_free_all(nfc_dev_t *nfc_dev);
-int validate_nfc_state_nci(nfc_dev_t *nfc_dev);
-int nfcc_hw_check(nfc_dev_t *nfc_dev);
-void set_nfcc_state_from_rsp(nfc_dev_t *dev, const char *buf,
-			     const int count);
-void enable_dwnld_mode(nfc_dev_t* nfc_dev, bool value);
+void gpio_set_ven(struct nfc_dev *nfc_dev, int value);
+void gpio_free_all(struct nfc_dev *nfc_dev);
+int validate_nfc_state_nci(struct nfc_dev *nfc_dev);
+int nfcc_hw_check(struct nfc_dev *nfc_dev);
 #endif //_COMMON_H_

+ 74 - 71
nfc/common_ese.c

@@ -30,17 +30,18 @@
 
 static void cold_reset_gaurd_timer_callback(struct timer_list *t)
 {
-	cold_reset_t *cold_reset = from_timer(cold_reset, t, timer);
+	struct cold_reset *cold_reset = from_timer(cold_reset, t, timer);
+
 	pr_debug("%s: Enter\n", __func__);
 	cold_reset->in_progress = false;
-	return;
 }
 
-static long start_cold_reset_guard_timer(cold_reset_t *cold_reset)
+static long start_cold_reset_guard_timer(struct cold_reset *cold_reset)
 {
 	long ret = -EINVAL;
+
 	if (timer_pending(&cold_reset->timer) == 1) {
-		pr_debug("ese_cold_reset_guard_timer: delete pending timer \n");
+		pr_debug("ese_cold_reset_guard_timer: delete pending timer\n");
 		/* delete timer if already pending */
 		del_timer(&cold_reset->timer);
 	}
@@ -51,34 +52,33 @@ static long start_cold_reset_guard_timer(cold_reset_t *cold_reset)
 	return ret;
 }
 
-static int send_cold_reset_protection_cmd(nfc_dev_t *nfc_dev, bool requestType)
+static int send_cold_reset_protection_cmd(struct nfc_dev *nfc_dev, bool requestType)
 {
 	int ret = 0;
-	int length = 0;
-	uint8_t *cmd = NULL;
-	uint8_t cld_rst_cmd[] = { NCI_PROP_MSG_CMD, CLD_RST_OID,
-				  CLD_RST_PAYLOAD_SIZE
-				};
-	uint8_t rst_prot_cmd[] = { NCI_PROP_MSG_CMD, RST_PROT_OID,
-				   RST_PROT_PAYLOAD_SIZE, 0x00
-				 };
-
-	cold_reset_t *cold_reset = &nfc_dev->cold_reset;
-	if (requestType) {
-		length = sizeof(rst_prot_cmd);
-		rst_prot_cmd[NCI_PAYLOAD_IDX] = (!cold_reset->reset_protection) ? 1 : 0;
-		cmd = rst_prot_cmd;
-	} else {
-		length = sizeof(cld_rst_cmd);
-		cmd = cld_rst_cmd;
+	int cmd_length = 0;
+	uint8_t *cmd = nfc_dev->write_kbuf;
+	struct cold_reset *cold_reset = &nfc_dev->cold_reset;
+
+	mutex_lock(&nfc_dev->write_mutex);
+	*cmd++ = NCI_PROP_MSG_CMD;
+
+	if (requestType) {	/*reset protection*/
+		*cmd++ = RST_PROT_OID;
+		*cmd++ = RST_PROT_PAYLOAD_SIZE;
+		*cmd++ = (!cold_reset->reset_protection) ? 1 : 0;
+	} else {	/*cold reset*/
+		*cmd++ = CLD_RST_OID;
+		*cmd++ = CLD_RST_PAYLOAD_SIZE;
 	}
+	cmd_length = cmd - nfc_dev->write_kbuf;
 
-	ret = nfc_dev->nfc_write(nfc_dev, cmd, length, MAX_RETRY_COUNT);
-	if (ret != length) {
+	ret = nfc_dev->nfc_write(nfc_dev, nfc_dev->write_kbuf, cmd_length, MAX_RETRY_COUNT);
+	if (ret != cmd_length) {
+		ret = -EIO;
 		pr_err("%s : nfc_write returned %d\n", __func__, ret);
-		return -EIO;
+		goto  exit;
 	}
-
+	cmd = nfc_dev->write_kbuf;
 	if (requestType) {
 		pr_debug("%s: NxpNciX: %d > %02X%02X%02X%02X\n", __func__, ret, cmd[0], cmd[1],
 			 cmd[2], cmd[3]);
@@ -86,19 +86,21 @@ static int send_cold_reset_protection_cmd(nfc_dev_t *nfc_dev, bool requestType)
 		pr_debug("%s: NxpNciX: %d > %02X%02X%02X\n", __func__, ret, cmd[0], cmd[1],
 			 cmd[2]);
 	}
+exit:
+	mutex_unlock(&nfc_dev->write_mutex);
 	return ret;
 }
 
-void wakeup_on_prop_rsp(nfc_dev_t *nfc_dev, uint8_t *buf)
+void wakeup_on_prop_rsp(struct nfc_dev *nfc_dev, uint8_t *buf)
 {
-	cold_reset_t *cold_reset = &nfc_dev->cold_reset;
-	cold_reset->status = -EIO;
+	struct cold_reset *cold_reset = &nfc_dev->cold_reset;
 
-	if ((NCI_HDR_LEN + buf[NCI_PAYLOAD_LEN_IDX]) != NCI_PROP_MSG_RSP_LEN) {
-		pr_err("%s: - invalid response for cold_reset/protection \n", __func__);
-	} else {
+	cold_reset->status = -EIO;
+	if ((NCI_HDR_LEN + buf[NCI_PAYLOAD_LEN_IDX]) != NCI_PROP_MSG_RSP_LEN)
+		pr_err("%s: - invalid response for cold_reset/protection\n", __func__);
+	else
 		cold_reset->status = buf[NCI_PAYLOAD_IDX];
-	}
+
 	pr_debug("%s NxpNciR : len = 4 > %02X%02X%02X%02X\n", __func__, buf[0], buf[1],
 		buf[2], buf[3]);
 
@@ -106,9 +108,11 @@ void wakeup_on_prop_rsp(nfc_dev_t *nfc_dev, uint8_t *buf)
 	wake_up_interruptible(&cold_reset->read_wq);
 }
 
-static int validate_cold_reset_protection_request(cold_reset_t *cold_reset,
+static int validate_cold_reset_protection_request(struct cold_reset *cold_reset,
 		unsigned long arg)
 {
+	int ret = 0;
+
 	if (!cold_reset->reset_protection) {
 		if (IS_RST_PROT_EN_REQ(arg) && IS_SRC_VALID_PROT(arg)) {
 			pr_debug("%s:req - reset protection enable\n", __func__);
@@ -116,10 +120,10 @@ static int validate_cold_reset_protection_request(cold_reset_t *cold_reset,
 			pr_debug("%s:req - cold reset\n", __func__);
 		} else if (IS_RST_PROT_DIS_REQ(arg) && IS_SRC_VALID_PROT(arg)) {
 			pr_debug("%s:req - reset protection already disable\n", __func__);
-			return -EINVAL;
+			ret = -EINVAL;
 		} else {
-			pr_err("%s:Operation not permitted \n", __func__);
-			return -EPERM;
+			pr_err("%s:Operation not permitted\n", __func__);
+			ret = -EPERM;
 		}
 	} else {
 		if (IS_RST_PROT_DIS_REQ(arg)
@@ -130,21 +134,21 @@ static int validate_cold_reset_protection_request(cold_reset_t *cold_reset,
 			pr_debug("%s:req - cold reset from same source\n", __func__);
 		} else if (IS_RST_PROT_EN_REQ(arg)
 			   && IS_SRC(arg, cold_reset->rst_prot_src)) {
-			pr_debug("%s:request - enable reset protection from same source\n", __func__);
+			pr_debug("%s:req - enable reset protection from same src\n", __func__);
 		} else {
-			pr_err("%s: Operation not permitted \n", __func__);
-			return -EPERM;
+			pr_err("%s: Operation not permitted\n", __func__);
+			ret = -EPERM;
 		}
 	}
-	return 0;
+	return ret;
 }
 
-static int perform_cold_reset_protection(nfc_dev_t *nfc_dev, unsigned long arg)
+static int perform_cold_reset_protection(struct nfc_dev *nfc_dev, unsigned long arg)
 {
 	int ret = 0;
 	struct file filp;
-	uint8_t cld_rst_rsp[MAX_BUFFER_SIZE];
-	cold_reset_t *cold_reset = &nfc_dev->cold_reset;
+	char *rsp = nfc_dev->read_kbuf;
+	struct cold_reset *cold_reset = &nfc_dev->cold_reset;
 	bool nfc_dev_opened = false;
 
 	/*check if NFCC not in the FW download or hard reset state */
@@ -157,9 +161,7 @@ static int perform_cold_reset_protection(nfc_dev_t *nfc_dev, unsigned long arg)
 	/* check if NFC is enabled */
 	mutex_lock(&nfc_dev->dev_ref_mutex);
 	nfc_dev_opened = (nfc_dev->dev_ref_count > 0) ? true : false;
-	mutex_unlock(&nfc_dev->dev_ref_mutex);
 
-	mutex_lock(&cold_reset->sync_mutex);
 	/*check if NFCC not in the FW download or hard reset state */
 	ret = validate_cold_reset_protection_request(cold_reset, arg);
 	if (ret < 0) {
@@ -191,7 +193,7 @@ static int perform_cold_reset_protection(nfc_dev_t *nfc_dev, unsigned long arg)
 	/*start the cold reset guard timer */
 	if (IS_CLD_RST_REQ(arg)) {
 		/*Guard timer not needed when OSU over NFC*/
-		if(!(cold_reset->reset_protection && IS_SRC_NFC(arg))) {
+		if (!(cold_reset->reset_protection && IS_SRC_NFC(arg))) {
 			ret = start_cold_reset_guard_timer(cold_reset);
 			if (ret) {
 				pr_err("%s: Error in mod_timer\n", __func__);
@@ -213,12 +215,14 @@ static int perform_cold_reset_protection(nfc_dev_t *nfc_dev, unsigned long arg)
 		} else {
 			/* Read data as NFC thread is not active */
 			filp.private_data = nfc_dev;
-			filp.f_flags &= ~O_NONBLOCK;
-			ret = nfc_dev->nfc_read(nfc_dev, cld_rst_rsp, 3, NCI_CMD_RSP_TIMEOUT);
-			if (!ret)
-				break;
-			usleep_range(READ_RETRY_WAIT_TIME_USEC,
-					 READ_RETRY_WAIT_TIME_USEC + 500);
+			if (nfc_dev->interface == PLATFORM_IF_I2C) {
+				filp.f_flags &= ~O_NONBLOCK;
+				ret = nfc_dev->nfc_read(nfc_dev, rsp, 3, NCI_CMD_RSP_TIMEOUT);
+				if (!ret)
+					break;
+				usleep_range(READ_RETRY_WAIT_TIME_USEC,
+					     READ_RETRY_WAIT_TIME_USEC + 500);
+			}
 		}
 	} while (ret == -ERESTARTSYS || ret == -EFAULT);
 
@@ -237,7 +241,7 @@ static int perform_cold_reset_protection(nfc_dev_t *nfc_dev, unsigned long arg)
 		}
 	}
 err:
-	mutex_unlock(&cold_reset->sync_mutex);
+	mutex_unlock(&nfc_dev->dev_ref_mutex);
 	return ret;
 }
 
@@ -247,10 +251,11 @@ err:
  * VEN HIGH - eSE and NFCC both are powered on
  * VEN LOW - eSE and NFCC both are power down
  */
-int nfc_ese_pwr(nfc_dev_t *nfc_dev, unsigned long arg)
+int nfc_ese_pwr(struct nfc_dev *nfc_dev, unsigned long arg)
 {
 	int ret = 0;
-	platform_gpio_t *nfc_gpio = &nfc_dev->configs.gpio;
+	struct platform_gpio *nfc_gpio = &nfc_dev->configs.gpio;
+
 	if (arg == ESE_POWER_ON) {
 		/**
 		 * Let's store the NFC VEN pin state
@@ -284,64 +289,62 @@ int nfc_ese_pwr(nfc_dev_t *nfc_dev, unsigned long arg)
 	}
 	return ret;
 }
-
 EXPORT_SYMBOL(nfc_ese_pwr);
 
 #define ESE_LEGACY_INTERFACE
 #ifdef ESE_LEGACY_INTERFACE
-static nfc_dev_t *nfc_dev_legacy = NULL;
+static struct nfc_dev *nfc_dev_legacy;
 
 /******************************************************************************
  * perform_ese_cold_reset() - It shall be called by others driver(not nfc/ese)
  * to perform cold reset only
  * @arg: request of cold reset from other drivers should be ESE_CLD_RST_OTHER
  *
- * Returns:- 0 in case of sucess and negative values in case of failure
+ * Returns:- 0 in case of success and negative values in case of failure
  *****************************************************************************/
 int perform_ese_cold_reset(unsigned long arg)
 {
 	int ret = 0;
+
 	if (nfc_dev_legacy) {
 		if (IS_CLD_RST_REQ(arg) && IS_SRC_OTHER(arg)) {
 			ret = nfc_ese_pwr(nfc_dev_legacy, arg);
 		} else {
-			pr_err("%s :  Operation not permitted \n", __func__);
+			pr_err("%s :  Operation not permitted\n", __func__);
 			return -EPERM;
 		}
 	}
 	pr_debug("%s:%d exit, status:%lu", __func__, arg, ret);
 	return ret;
 }
-
 EXPORT_SYMBOL(perform_ese_cold_reset);
 #endif //ESE_LEGACY_INTERFACE
 
-void common_ese_on_hard_reset(nfc_dev_t *nfc_dev)
+void ese_cold_reset_release(struct nfc_dev *nfc_dev)
 {
-	cold_reset_t *cold_reset = &nfc_dev->cold_reset;
+	struct cold_reset *cold_reset = &nfc_dev->cold_reset;
+
 	cold_reset->rsp_pending = false;
 	cold_reset->in_progress = false;
-	if (timer_pending(&cold_reset->timer) == 1) {
+	if (timer_pending(&cold_reset->timer) == 1)
 		del_timer(&cold_reset->timer);
-	}
 }
 
-void common_ese_init(nfc_dev_t *nfc_dev)
+void common_ese_init(struct nfc_dev *nfc_dev)
 {
-	cold_reset_t *cold_reset = &nfc_dev->cold_reset;
+	struct cold_reset *cold_reset = &nfc_dev->cold_reset;
+
 	cold_reset->reset_protection = false;
 	cold_reset->rst_prot_src = SRC_NONE;
 	init_waitqueue_head(&cold_reset->read_wq);
-	mutex_init(&cold_reset->sync_mutex);
-	common_ese_on_hard_reset(nfc_dev);
+	ese_cold_reset_release(nfc_dev);
 #ifdef ESE_LEGACY_INTERFACE
 	nfc_dev_legacy = nfc_dev;
 #endif //ESE_LEGACY_INTERFACE
 }
 
-void common_ese_exit(nfc_dev_t *nfc_dev)
+void common_ese_exit(struct nfc_dev *nfc_dev)
 {
-	mutex_destroy(&nfc_dev->cold_reset.sync_mutex);
 #ifdef ESE_LEGACY_INTERFACE
 	nfc_dev_legacy = NULL;
 #endif //ESE_LEGACY_INTERFACE

+ 21 - 21
nfc/common_ese.h

@@ -23,32 +23,32 @@
 #include "common.h"
 
 /*nci prop msg 1st byte*/
-#define NCI_PROP_MSG_GID                    0x0F
-#define NCI_PROP_MSG_CMD                    (NCI_MSG_CMD | NCI_PROP_MSG_GID)
-#define NCI_PROP_MSG_RSP                    (NCI_MSG_RSP | NCI_PROP_MSG_GID)
+#define NCI_PROP_MSG_GID					0x0F
+#define NCI_PROP_MSG_CMD					(NCI_MSG_CMD | NCI_PROP_MSG_GID)
+#define NCI_PROP_MSG_RSP					(NCI_MSG_RSP | NCI_PROP_MSG_GID)
 
 /*nci prop msg 2nd byte*/
-#define CLD_RST_OID                         0x1E
-#define RST_PROT_OID                        0x1F
+#define CLD_RST_OID						0x1E
+#define RST_PROT_OID						0x1F
 
 /*nci prop msg 3rd byte*/
-#define CLD_RST_PAYLOAD_SIZE                0x00
-#define RST_PROT_PAYLOAD_SIZE               0x01
+#define CLD_RST_PAYLOAD_SIZE				0x00
+#define RST_PROT_PAYLOAD_SIZE				0x01
 
 /*nci prop msg response length*/
-#define NCI_PROP_MSG_RSP_LEN                0x04
+#define NCI_PROP_MSG_RSP_LEN				0x04
 
 /*cold reset guard time to allow back to back cold reset after some time*/
-#define ESE_CLD_RST_GUARD_TIME              (3000)	//3s
+#define ESE_CLD_RST_GUARD_TIME			  (3000)	//3s
 /*guard time to reboot after reset*/
-#define ESE_CLD_RST_REBOOT_GUARD_TIME       (50)	//50ms
+#define ESE_CLD_RST_REBOOT_GUARD_TIME	   (50)	//50ms
 /*sources of reset protection and cold reset*/
-typedef enum reset_source {
+enum reset_source {
 	SRC_SPI = 0,
 	SRC_NFC = 0x10,
 	SRC_OTHER = 0x20,
 	SRC_NONE = 0x80,
-} reset_source_t;
+};
 
 enum ese_ioctl_request {
 	ESE_POWER_ON = 0,	/* eSE POWER ON */
@@ -75,7 +75,7 @@ enum ese_ioctl_request {
 #define IS_SRC_NFC(arg) IS_SRC(arg, SRC_NFC)
 #define IS_SRC_OTHER(arg) IS_SRC(arg, SRC_OTHER)
 #define IS_SRC_VALID(arg) (IS_SRC_SPI(arg) || IS_SRC_NFC(arg) ||  \
-                           IS_SRC_OTHER(arg))
+							IS_SRC_OTHER(arg))
 #define IS_SRC_VALID_PROT(arg) (IS_SRC_SPI(arg) || IS_SRC_NFC(arg))
 
 #define IS_RST(arg, type) ((arg & 0xF) == type)
@@ -84,14 +84,14 @@ enum ese_ioctl_request {
 #define IS_RST_PROT_DIS_REQ(arg) IS_RST(arg, ESE_RST_PROT_DIS)
 #define IS_RST_PROT_REQ(arg) (IS_RST_PROT_EN_REQ(arg) || IS_RST_PROT_DIS_REQ(arg))
 /* This macro evaluates to 1 if prop cmd response is received */
-#define IS_PROP_CMD_RSP(buf)                                                                          \
-                ((NCI_PROP_MSG_RSP == buf[0]) && ((CLD_RST_OID == buf[1]) ||     \
-                 (RST_PROT_OID == buf[1])))
+#define IS_PROP_CMD_RSP(buf)	\
+				((buf[0] == NCI_PROP_MSG_RSP) && ((buf[1] == CLD_RST_OID) || \
+				 (buf[1] == RST_PROT_OID)))
 
-void wakeup_on_prop_rsp(nfc_dev_t *nfc_dev, uint8_t *buf);
-int nfc_ese_pwr(nfc_dev_t *nfc_dev, unsigned long arg);
-void common_ese_on_hard_reset(nfc_dev_t *nfc_dev);
-void common_ese_init(nfc_dev_t *nfc_dev);
-void common_ese_exit(nfc_dev_t *nfc_dev);
+void wakeup_on_prop_rsp(struct nfc_dev *nfc_dev, uint8_t *buf);
+int nfc_ese_pwr(struct nfc_dev *nfc_dev, unsigned long arg);
+void ese_cold_reset_release(struct nfc_dev *nfc_dev);
+void common_ese_init(struct nfc_dev *nfc_dev);
+void common_ese_exit(struct nfc_dev *nfc_dev);
 
 #endif /* _COMMON_ESE_H_ */

+ 110 - 101
nfc/i2c_drv.c

@@ -1,4 +1,5 @@
 /******************************************************************************
+ *  Copyright (C) 2015, The Linux Foundation. All rights reserved.
  *  Copyright (C) 2013-2021 NXP
  *   *
  * This program is free software; you can redistribute it and/or modify
@@ -44,7 +45,6 @@
 #include "common.h"
 #include "common_ese.h"
 
-static ssize_t i2c_read_internal(struct nfc_dev *dev, char *buf, size_t count, int timeout);
 /**
  * i2c_disable_irq()
  *
@@ -91,8 +91,9 @@ int i2c_enable_irq(struct nfc_dev *dev)
 
 static irqreturn_t i2c_irq_handler(int irq, void *dev_id)
 {
-	nfc_dev_t *nfc_dev = dev_id;
-	i2c_dev_t *i2c_dev = &nfc_dev->i2c_dev;
+	struct nfc_dev *nfc_dev = dev_id;
+	struct i2c_dev *i2c_dev = &nfc_dev->i2c_dev;
+
 	if (device_may_wakeup(&i2c_dev->client->dev))
 		pm_wakeup_event(&i2c_dev->client->dev, WAKEUP_SRC_TIMEOUT);
 
@@ -102,52 +103,22 @@ static irqreturn_t i2c_irq_handler(int irq, void *dev_id)
 	return IRQ_HANDLED;
 }
 
-int i2c_read(struct nfc_dev *dev, char *buf, size_t count, int timeout){
-
-	pr_debug("%s : reading   %zu bytes.\n", __func__, count);
-
-	if(timeout > NCI_MAX_CMD_RSP_TIMEOUT)
-		timeout = NCI_MAX_CMD_RSP_TIMEOUT;
-
-	return i2c_read_internal(dev, buf, count, timeout);
-}
 
-int i2c_write(struct nfc_dev *dev, const char *buf, size_t count,
-	      int max_retry_cnt)
+int i2c_read(struct nfc_dev *nfc_dev, char *buf, size_t count, int timeout)
 {
-	int ret = -EINVAL;
-	int retry_cnt;
-
-	pr_debug("%s : writing %zu bytes.\n", __func__, count);
+	int ret;
+	struct i2c_dev *i2c_dev = &nfc_dev->i2c_dev;
+	struct platform_gpio *nfc_gpio = &nfc_dev->configs.gpio;
 
-	for (retry_cnt = 1; retry_cnt <= max_retry_cnt; retry_cnt++) {
-		ret = i2c_master_send(dev->i2c_dev.client, buf, count);
-		if (ret <= 0) {
-			pr_warn("%s: write failed, Maybe in Standby Mode - Retry(%d)\n", __func__,
-				retry_cnt);
-			usleep_range(WRITE_RETRY_WAIT_TIME_USEC,
-				     WRITE_RETRY_WAIT_TIME_USEC + 100);
-		} else if (ret == count)
-			break;
-	}
-	return ret;
-}
+	pr_debug("%s : reading   %zu bytes.\n", __func__, count);
 
-static ssize_t i2c_read_internal(struct nfc_dev *dev, char *buf, size_t count, int timeout)
-{
-	int ret;
-	char tmp[MAX_BUFFER_SIZE];
-	nfc_dev_t *nfc_dev = dev;
-	i2c_dev_t *i2c_dev = &nfc_dev->i2c_dev;
-	platform_gpio_t *nfc_gpio = &nfc_dev->configs.gpio;
+	if (timeout > NCI_CMD_RSP_TIMEOUT)
+		timeout = NCI_CMD_RSP_TIMEOUT;
 
 	if (count > MAX_BUFFER_SIZE)
 		count = MAX_BUFFER_SIZE;
 
-	pr_debug("%s : reading   %zu bytes.\n", __func__, count);
-	mutex_lock(&nfc_dev->read_mutex);
 	if (!gpio_get_value(nfc_gpio->irq)) {
-
 		while (1) {
 			ret = 0;
 			if (!i2c_dev->irq_enabled) {
@@ -155,9 +126,9 @@ static ssize_t i2c_read_internal(struct nfc_dev *dev, char *buf, size_t count, i
 				enable_irq(i2c_dev->client->irq);
 			}
 			if (!gpio_get_value(nfc_gpio->irq)) {
-				if(timeout) {
+				if (timeout) {
 					ret = wait_event_interruptible_timeout(nfc_dev->read_wq,
-						 !i2c_dev-> irq_enabled, msecs_to_jiffies(timeout));
+						 !i2c_dev->irq_enabled, msecs_to_jiffies(timeout));
 
 					if (ret <= 0) {
 						pr_err("%s timeout/error in read\n", __func__);
@@ -185,11 +156,11 @@ static ssize_t i2c_read_internal(struct nfc_dev *dev, char *buf, size_t count, i
 		}
 	}
 
-	memset(tmp, 0x00, count);
+	memset(buf, 0x00, count);
 	/* Read data */
-	ret = i2c_master_recv(nfc_dev->i2c_dev.client, tmp, count);
+	ret = i2c_master_recv(nfc_dev->i2c_dev.client, buf, count);
 	if (ret <= 0) {
-		pr_err("%s: i2c_read returned %d\n", __func__, ret);
+		pr_err("%s: returned %d\n", __func__, ret);
 		goto err;
 	}
 	/* check if it's response of cold reset command
@@ -197,16 +168,15 @@ static ssize_t i2c_read_internal(struct nfc_dev *dev, char *buf, size_t count, i
 	 * command was sent by driver
 	 */
 	if (nfc_dev->cold_reset.rsp_pending) {
-		if (IS_PROP_CMD_RSP(tmp)) {
+		if (IS_PROP_CMD_RSP(buf)) {
 			/* Read data */
-			ret = i2c_master_recv(nfc_dev->i2c_dev.client, &tmp[NCI_PAYLOAD_IDX],
-					 tmp[NCI_PAYLOAD_LEN_IDX]);
+			ret = i2c_master_recv(nfc_dev->i2c_dev.client, &buf[NCI_PAYLOAD_IDX],
+					 buf[NCI_PAYLOAD_LEN_IDX]);
 			if (ret <= 0) {
-				pr_err("%s: failure to read prop cold reset/protection rsp header\n", __func__);
+				pr_err("%s: error reading cold reset/prot rsp header\n", __func__);
 				goto err;
 			}
-			wakeup_on_prop_rsp(nfc_dev, tmp);
-			mutex_unlock(&nfc_dev->read_mutex);
+			wakeup_on_prop_rsp(nfc_dev, buf);
 			/*
 			 * NFC process doesn't know about cold reset command
 			 * being sent as it was initiated by eSE process
@@ -215,47 +185,76 @@ static ssize_t i2c_read_internal(struct nfc_dev *dev, char *buf, size_t count, i
 			return 0;
 		}
 	}
-	if (copy_to_user(buf, tmp, ret)) {
-		pr_warn("%s : failed to copy to user space\n", __func__);
-		ret = -EFAULT;
-	}
-
 err:
-	mutex_unlock(&nfc_dev->read_mutex);
 	return ret;
 }
 
-ssize_t nfc_i2c_dev_read(struct file * filp, char __user *buf,
-			 size_t count, loff_t * offset)
+int i2c_write(struct nfc_dev *nfc_dev, const char *buf, size_t count,
+	      int max_retry_cnt)
 {
-	pr_debug("%s : reading   %zu bytes.\n", __func__, count);
+	int ret = -EINVAL;
+	int retry_cnt;
+
+	if (count > MAX_DL_BUFFER_SIZE)
+		count = MAX_DL_BUFFER_SIZE;
+
+	pr_debug("%s : writing %zu bytes.\n", __func__, count);
+
+	for (retry_cnt = 1; retry_cnt <= max_retry_cnt; retry_cnt++) {
+		ret = i2c_master_send(nfc_dev->i2c_dev.client, buf, count);
+		if (ret <= 0) {
+			pr_warn("%s: failed to write ret(%d), Maybe in Standby Mode - Retry(%d)\n", __func__,
+				ret, retry_cnt);
+			usleep_range(WRITE_RETRY_WAIT_TIME_USEC,
+				     WRITE_RETRY_WAIT_TIME_USEC + 100);
+		} else if (ret != count) {
+			pr_err("%s: failed to write %d\n", __func__, ret);
+			ret = -EIO;
+		} else if (ret == count)
+			break;
+	}
+	return ret;
+}
+
+ssize_t nfc_i2c_dev_read(struct file *filp, char __user *buf,
+			 size_t count, loff_t *offset)
+{
+	int ret = 0;
+	struct nfc_dev *nfc_dev = (struct nfc_dev *)filp->private_data;
+
 	if (filp->f_flags & O_NONBLOCK) {
 		pr_err(":f_falg has O_NONBLOCK. EAGAIN\n");
 		return -EAGAIN;
 	}
-	return i2c_read_internal((nfc_dev_t *)filp->private_data, buf, count, 0);
+	mutex_lock(&nfc_dev->read_mutex);
+	ret = i2c_read(nfc_dev, nfc_dev->read_kbuf, count, 0);
+	if (ret > 0) {
+		if (copy_to_user(buf, nfc_dev->read_kbuf, ret)) {
+			pr_warn("%s : failed to copy to user space\n", __func__);
+			ret = -EFAULT;
+		}
+	}
+	mutex_unlock(&nfc_dev->read_mutex);
+	return ret;
 }
 
-ssize_t nfc_i2c_dev_write(struct file * filp, const char __user *buf,
-			  size_t count, loff_t * offset)
+ssize_t nfc_i2c_dev_write(struct file *filp, const char __user *buf,
+			 size_t count, loff_t *offset)
 {
-	int ret;
-	char tmp[MAX_DL_BUFFER_SIZE];
-	nfc_dev_t *nfc_dev = filp->private_data;
+	int ret = 0;
+	struct nfc_dev *nfc_dev = (struct nfc_dev *)filp->private_data;
 
 	if (count > MAX_DL_BUFFER_SIZE)
 		count = MAX_DL_BUFFER_SIZE;
 
-	if (copy_from_user(tmp, buf, count)) {
+	mutex_lock(&nfc_dev->write_mutex);
+	if (copy_from_user(nfc_dev->write_kbuf, buf, count)) {
 		pr_err("%s : failed to copy from user space\n", __func__);
+		mutex_unlock(&nfc_dev->write_mutex);
 		return -EFAULT;
 	}
-	ret = i2c_write(nfc_dev, tmp, count, NO_RETRY);
-	if (ret != count) {
-		pr_err("%s: failed to write %d\n", __func__, ret);
-		ret = -EIO;
-	}
-
+	ret = i2c_write(nfc_dev, nfc_dev->write_kbuf, count, NO_RETRY);
+	mutex_unlock(&nfc_dev->write_mutex);
 	return ret;
 }
 
@@ -272,12 +271,13 @@ static const struct file_operations nfc_i2c_dev_fops = {
 int nfc_i2c_dev_probe(struct i2c_client *client, const struct i2c_device_id *id)
 {
 	int ret = 0;
-	nfc_dev_t *nfc_dev = NULL;
-	i2c_dev_t *i2c_dev = NULL;
-	platform_configs_t nfc_configs;
-	platform_gpio_t *nfc_gpio = &nfc_configs.gpio;
+	struct nfc_dev *nfc_dev = NULL;
+	struct i2c_dev *i2c_dev = NULL;
+	struct platform_configs nfc_configs;
+	struct platform_gpio *nfc_gpio = &nfc_configs.gpio;
+
 	pr_debug("%s: enter\n", __func__);
-	/*retrive details of gpios from dt */
+	/*retrieve details of gpios from dt */
 	ret = nfc_parse_dt(&client->dev, &nfc_configs, PLATFORM_IF_I2C);
 	if (ret) {
 		pr_err("%s : failed to parse dt\n", __func__);
@@ -289,11 +289,21 @@ int nfc_i2c_dev_probe(struct i2c_client *client, const struct i2c_device_id *id)
 		ret = -ENODEV;
 		goto err;
 	}
-	nfc_dev = kzalloc(sizeof(nfc_dev_t), GFP_KERNEL);
+	nfc_dev = kzalloc(sizeof(struct nfc_dev), GFP_KERNEL);
 	if (nfc_dev == NULL) {
 		ret = -ENOMEM;
 		goto err;
 	}
+	nfc_dev->read_kbuf = kzalloc(MAX_BUFFER_SIZE, GFP_DMA | GFP_KERNEL);
+	if (!nfc_dev->read_kbuf) {
+		ret = -ENOMEM;
+		goto err;
+	}
+	nfc_dev->write_kbuf = kzalloc(MAX_DL_BUFFER_SIZE, GFP_DMA | GFP_KERNEL);
+	if (!nfc_dev->write_kbuf) {
+		ret = -ENOMEM;
+		goto err;
+	}
 	nfc_dev->interface = PLATFORM_IF_I2C;
 	nfc_dev->nfc_state = NFC_STATE_NCI;
 	nfc_dev->i2c_dev.client = client;
@@ -302,11 +312,7 @@ int nfc_i2c_dev_probe(struct i2c_client *client, const struct i2c_device_id *id)
 	nfc_dev->nfc_write = i2c_write;
 	nfc_dev->nfc_enable_intr = i2c_enable_irq;
 	nfc_dev->nfc_disable_intr = i2c_disable_irq;
-#if defined(RECOVERY_ENABLE)
-	nfc_dev->recovery_required = false;
 	nfc_dev->fw_major_version = 0;
-#endif
-
 	ret = configure_gpio(nfc_gpio->ven, GPIO_OUTPUT);
 	if (ret) {
 		pr_err("%s: unable to request nfc reset gpio [%d]\n", __func__, nfc_gpio->ven);
@@ -324,14 +330,14 @@ int nfc_i2c_dev_probe(struct i2c_client *client, const struct i2c_device_id *id)
 		       nfc_gpio->dwl_req);
 	}
 
-	/*copy the retrived gpio details from DT */
+	/*copy the retrieved gpio details from DT */
 	memcpy(&nfc_dev->configs, &nfc_configs, sizeof(struct platform_configs));
 
 	/* init mutex and queues */
 	init_waitqueue_head(&nfc_dev->read_wq);
 	mutex_init(&nfc_dev->read_mutex);
+	mutex_init(&nfc_dev->write_mutex);
 	mutex_init(&nfc_dev->dev_ref_mutex);
-	mutex_init(&nfc_dev->ese_access_mutex);
 	spin_lock_init(&i2c_dev->irq_enabled_lock);
 	common_ese_init(nfc_dev);
 	ret = nfc_misc_register(nfc_dev, &nfc_i2c_dev_fops, DEV_COUNT,
@@ -352,8 +358,9 @@ int nfc_i2c_dev_probe(struct i2c_client *client, const struct i2c_device_id *id)
 	i2c_disable_irq(nfc_dev);
 
 	ret = nfcc_hw_check(nfc_dev);
-	if (ret || nfc_dev->nfc_state == NFC_STATE_UNKNOWN) {
+	if (ret != 0) {
 		pr_err("nfc hw check failed ret %d\n", ret);
+		goto err_nfc_misc_unregister;
 	}
 
 	device_init_wakeup(&client->dev, true);
@@ -368,21 +375,21 @@ err_nfc_misc_unregister:
 err_mutex_destroy:
 	mutex_destroy(&nfc_dev->dev_ref_mutex);
 	mutex_destroy(&nfc_dev->read_mutex);
-	mutex_destroy(&nfc_dev->ese_access_mutex);
-	mutex_destroy(&nfc_dev->cold_reset.sync_mutex);
+	mutex_destroy(&nfc_dev->write_mutex);
 err:
-  	if (nfc_dev) {
-    		    gpio_free_all(nfc_dev);
-    		    kfree(nfc_dev);
-  	}
-  pr_err("%s: probing not successful, check hardware\n", __func__);
-  return ret;
+	gpio_free_all(nfc_dev);
+	kfree(nfc_dev->read_kbuf);
+	kfree(nfc_dev->write_kbuf);
+	kfree(nfc_dev);
+	pr_err("%s: probing not successful, check hardware\n", __func__);
+	return ret;
 }
 
 int nfc_i2c_dev_remove(struct i2c_client *client)
 {
 	int ret = 0;
-	nfc_dev_t *nfc_dev = NULL;
+	struct nfc_dev *nfc_dev = NULL;
+
 	pr_info("%s: remove device\n", __func__);
 	nfc_dev = i2c_get_clientdata(client);
 	if (!nfc_dev) {
@@ -398,9 +405,10 @@ int nfc_i2c_dev_remove(struct i2c_client *client)
 	free_irq(client->irq, nfc_dev);
 	nfc_misc_unregister(nfc_dev, DEV_COUNT);
 	mutex_destroy(&nfc_dev->read_mutex);
-	mutex_destroy(&nfc_dev->ese_access_mutex);
-	mutex_destroy(&nfc_dev->cold_reset.sync_mutex);
+	mutex_destroy(&nfc_dev->write_mutex);
 	gpio_free_all(nfc_dev);
+	kfree(nfc_dev->read_kbuf);
+	kfree(nfc_dev->write_kbuf);
 	kfree(nfc_dev);
 	return ret;
 }
@@ -408,8 +416,8 @@ int nfc_i2c_dev_remove(struct i2c_client *client)
 int nfc_i2c_dev_suspend(struct device *device)
 {
 	struct i2c_client *client = to_i2c_client(device);
-	nfc_dev_t *nfc_dev = i2c_get_clientdata(client);
-	i2c_dev_t *i2c_dev = &nfc_dev->i2c_dev;
+	struct nfc_dev *nfc_dev = i2c_get_clientdata(client);
+	struct i2c_dev *i2c_dev = &nfc_dev->i2c_dev;
 
 	if (device_may_wakeup(&client->dev) && i2c_dev->irq_enabled) {
 		if (!enable_irq_wake(client->irq))
@@ -421,8 +429,8 @@ int nfc_i2c_dev_suspend(struct device *device)
 int nfc_i2c_dev_resume(struct device *device)
 {
 	struct i2c_client *client = to_i2c_client(device);
-	nfc_dev_t *nfc_dev = i2c_get_clientdata(client);
-	i2c_dev_t *i2c_dev = &nfc_dev->i2c_dev;
+	struct nfc_dev *nfc_dev = i2c_get_clientdata(client);
+	struct i2c_dev *i2c_dev = &nfc_dev->i2c_dev;
 
 	if (device_may_wakeup(&client->dev) && i2c_dev->irq_wake_up) {
 		if (!disable_irq_wake(client->irq))
@@ -462,6 +470,7 @@ MODULE_DEVICE_TABLE(of, nfc_i2c_dev_match_table);
 static int __init nfc_i2c_dev_init(void)
 {
 	int ret = 0;
+
 	pr_info("Loading NXP NFC I2C driver\n");
 	ret = i2c_add_driver(&nfc_i2c_dev_driver);
 	if (ret != 0)

+ 3 - 2
nfc/i2c_drv.h

@@ -1,4 +1,5 @@
 /******************************************************************************
+ *  Copyright (C) 2015, The Linux Foundation. All rights reserved.
  *  Copyright (C) 2019-2021 NXP
  *   *
  * This program is free software; you can redistribute it and/or modify
@@ -25,14 +26,14 @@
 #define NFC_I2C_DEV_ID      "pn553"
 
 //Interface specific parameters
-typedef struct i2c_dev {
+struct i2c_dev {
 	struct i2c_client *client;
 	/*IRQ parameters */
 	bool irq_enabled;
 	spinlock_t irq_enabled_lock;
 	/* NFC_IRQ wake-up state */
 	bool irq_wake_up;
-} i2c_dev_t;
+};
 
 long nfc_i2c_dev_ioctl(struct file *pfile, unsigned int cmd, unsigned long arg);
 int nfc_i2c_dev_probe(struct i2c_client *client,

+ 1326 - 1325
nfc/recovery_fw.c

@@ -1,1325 +1,1326 @@
-/********************************************************************************************
- *
- *	Copyright 2021 NXP
- *
- *	Permission is hereby granted, free of charge, to any person obtaining a copy
- *	of this software and associated documentation files (the "Software"),to deal
- *	in the Software without restriction, including without limitation the rights
- *	to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
- *	of the Software, and to permit persons to whom the Software is furnished to do so,
- *  subject to the following conditions:
- *
- *	The above copyright notice and this permission notice shall be included in all
- *	copies or substantial portions of the Software.
- *
- *	THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
- *	INCLUDING BUT NOT LIMITED TO THE WARRANTIES	OF MERCHANTABILITY, FITNESS FOR A
- *	PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
- *	HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF
- *	CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE
- *	OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
- *
- ********************************************************************************************/
-#include <linux/types.h>
-const uint8_t gphDnldNfc_DlSequence[] = {
-  0x01, 0x34, 0xC0, 0x00, 0xDE, 0x10, 0xAD, 0x69, 0xE0, 0x28, 
-  0xAC, 0xFA, 0xF2, 0x4A, 0x0F, 0x49, 0x7E, 0x6A, 0x61, 0xD1, 
-  0x00, 0xFD, 0x4A, 0x66, 0xDD, 0x42, 0x4D, 0xFF, 0x90, 0xA5, 
-  0x6C, 0x54, 0xF0, 0x53, 0x5E, 0x17, 0x1E, 0x28, 0x8B, 0xF2, 
-  0x56, 0x6D, 0x74, 0x7B, 0x4E, 0xBA, 0xEB, 0x8D, 0x22, 0x43, 
-  0x01, 0xE9, 0xC4, 0x85, 0x2B, 0xFB, 0xA7, 0xD9, 0x3C, 0x64, 
-  0x63, 0x2D, 0xBB, 0x63, 0x5C, 0xDB, 0x14, 0x4D, 0x86, 0xA0, 
-  0x73, 0xC1, 0x32, 0xA4, 0x12, 0xD0, 0xED, 0x12, 0x90, 0xCF, 
-  0xAF, 0x56, 0x35, 0x3D, 0x97, 0x6B, 0xAC, 0x81, 0x1B, 0xD6, 
-  0x77, 0x9A, 0x4F, 0x9C, 0x90, 0x7D, 0x16, 0x6E, 0xC4, 0xCD, 
-  0x2D, 0xD2, 0x57, 0x49, 0x99, 0x24, 0xBC, 0x06, 0x71, 0x04, 
-  0xA8, 0x14, 0xEF, 0x21, 0x55, 0x0D, 0xAD, 0x82, 0x88, 0x5C, 
-  0xEF, 0xDF, 0x03, 0x93, 0xB5, 0xE8, 0x21, 0x18, 0xE0, 0x54, 
-  0xB8, 0xE1, 0x7E, 0x88, 0xE9, 0xF7, 0xEE, 0x86, 0xD2, 0x36, 
-  0xD7, 0x4B, 0x99, 0x6C, 0x35, 0x8B, 0xE0, 0xA2, 0xA2, 0xFB, 
-  0xED, 0xB5, 0x9A, 0xA0, 0xEE, 0x19, 0x67, 0x66, 0x14, 0x14, 
-  0xEC, 0xEF, 0x3F, 0xC0, 0x25, 0x7C, 0xA8, 0x9F, 0x58, 0x11, 
-  0xCD, 0x99, 0x00, 0xBF, 0xB8, 0x6D, 0xD5, 0x06, 0x8A, 0x5D, 
-  0x40, 0xB0, 0x2C, 0x9A, 0x20, 0xA2, 0x30, 0xDA, 0xFD, 0xB0, 
-  0xE3, 0x05, 0x5F, 0xB7, 0x3B, 0x9C, 0xD6, 0xB8, 0x92, 0xAE, 
-  0x4B, 0xDC, 0xF2, 0x1D, 0xA4, 0x11, 0xCE, 0x0C, 0xFD, 0x37, 
-  0x6E, 0xBA, 0x8B, 0x6C, 0x84, 0x3E, 0x3A, 0x3D, 0x20, 0xBE, 
-  0x64, 0xA6, 0x56, 0x7F, 0x06, 0x66, 0x04, 0x38, 0x1D, 0x97, 
-  0xD9, 0x96, 0xE6, 0x07, 0x29, 0xE2, 0x1A, 0xC4, 0x5F, 0x0A, 
-  0xAC, 0x62, 0x50, 0xF8, 0xD2, 0x33, 0x3F, 0x7A, 0x50, 0x89, 
-  0x98, 0x44, 0xCB, 0xFD, 0x75, 0x79, 0x25, 0xB1, 0x3A, 0xDE, 
-  0x53, 0x86, 0x13, 0x54, 0x46, 0x0B, 0x5F, 0x94, 0xEC, 0x1B, 
-  0x72, 0x24, 0x35, 0x84, 0x67, 0xC8, 0xBE, 0xDB, 0xAC, 0xB2, 
-  0x0C, 0x94, 0x88, 0xE1, 0xC4, 0x36, 0xD1, 0x6B, 0xB9, 0x4C, 
-  0xAE, 0xB0, 0x55, 0xF8, 0xBE, 0xD4, 0x7D, 0x16, 0x76, 0x84, 
-  0x2E, 0x46, 0x0B, 0xF6, 0x0D, 0x43, 0xB6, 0xBB, 0x5F, 0x98, 
-  0x02, 0x26, 0xC0, 0x00, 0x02, 0x35, 0x79, 0x26, 0x91, 0x8C, 
-  0x34, 0x8D, 0x69, 0x6E, 0x7F, 0x6B, 0xBF, 0xBD, 0x81, 0x3F, 
-  0x9C, 0x94, 0x0C, 0x65, 0x47, 0xC5, 0x08, 0xA7, 0x14, 0x6F, 
-  0x5A, 0xAC, 0x7C, 0xAC, 0x0C, 0x15, 0xD5, 0x6F, 0xBF, 0xDC, 
-  0xCE, 0x97, 0xD0, 0xD5, 0xEB, 0x1D, 0x3C, 0x7A, 0xEB, 0x2A, 
-  0x4E, 0x76, 0x08, 0xF2, 0xEA, 0x3A, 0xA0, 0xB8, 0xFC, 0xA0, 
-  0x74, 0x92, 0x8F, 0x86, 0xB1, 0x15, 0x0D, 0x7D, 0x92, 0x0F, 
-  0x64, 0xCE, 0xCA, 0xC1, 0xC4, 0x20, 0xA2, 0x48, 0x2D, 0xB0, 
-  0x47, 0x24, 0xF1, 0x20, 0x77, 0xDF, 0x87, 0x0D, 0xFA, 0xC6, 
-  0x89, 0xEE, 0xBD, 0x5E, 0xD5, 0x85, 0x64, 0xBC, 0x40, 0x6E, 
-  0x86, 0x01, 0x3D, 0xB6, 0x83, 0x8C, 0xAA, 0xF3, 0x2D, 0x3A, 
-  0xBB, 0x0D, 0xE6, 0xA5, 0xC0, 0x64, 0x07, 0xCB, 0x57, 0x81, 
-  0x7E, 0xD8, 0x3C, 0x3D, 0x4A, 0x9F, 0x8E, 0xF0, 0x57, 0x2E, 
-  0x5E, 0x41, 0x42, 0x00, 0xB0, 0xC7, 0x4E, 0x17, 0xED, 0xC6, 
-  0xAB, 0x73, 0x71, 0x65, 0x1D, 0x60, 0x34, 0x2A, 0x2B, 0xAF, 
-  0x59, 0x82, 0x5E, 0x16, 0x48, 0x48, 0x0F, 0x86, 0x62, 0x0C, 
-  0x84, 0x56, 0x00, 0x03, 0x2A, 0xA6, 0x2C, 0x21, 0xD0, 0x70, 
-  0xF9, 0xE5, 0x37, 0x0E, 0x81, 0x20, 0x36, 0x4E, 0x86, 0x8D, 
-  0xCF, 0xED, 0xBD, 0x0D, 0x49, 0x75, 0x0E, 0x5B, 0x80, 0xF7, 
-  0xAF, 0x40, 0x56, 0x8B, 0xD8, 0xFC, 0xC6, 0xE4, 0x6D, 0xD6, 
-  0x2E, 0x0D, 0xD0, 0x76, 0x75, 0x39, 0x3E, 0xF0, 0xEA, 0xC5, 
-  0x23, 0x12, 0x06, 0x45, 0xEA, 0x04, 0x6D, 0xC1, 0xA2, 0x95, 
-  0x95, 0x40, 0xD6, 0x6B, 0x65, 0xD6, 0x7D, 0x62, 0xA5, 0xB4, 
-  0x6B, 0x6C, 0x24, 0x3E, 0xFB, 0xAB, 0x71, 0x4D, 0xFC, 0x24, 
-  0x9F, 0x71, 0x8C, 0x04, 0x9A, 0xEE, 0x6D, 0x72, 0x3A, 0x01, 
-  0x11, 0xC1, 0x01, 0xB2, 0xC2, 0xC8, 0xBA, 0x7D, 0x53, 0x56, 
-  0x0D, 0x3F, 0x35, 0xF6, 0x86, 0x46, 0x7C, 0x67, 0xBF, 0x83, 
-  0x04, 0x01, 0x98, 0xBC, 0x06, 0x08, 0xF3, 0x89, 0x88, 0x8E, 
-  0x93, 0xB3, 0xA9, 0x21, 0x18, 0x71, 0xFF, 0xFC, 0x4E, 0xF7, 
-  0xFE, 0x1A, 0x5D, 0xC9, 0x21, 0xF6, 0x3B, 0x27, 0x2C, 0x26, 
-  0x37, 0xE2, 0x4F, 0x8C, 0x94, 0x77, 0xC7, 0x0D, 0xB9, 0x74, 
-  0xCD, 0x9F, 0xE1, 0x70, 0xFD, 0x35, 0x11, 0xA2, 0xB6, 0xAC, 
-  0x39, 0x3D, 0xC9, 0x57, 0x94, 0x3F, 0x10, 0x89, 0x9F, 0x0F, 
-  0x7D, 0x49, 0x0E, 0xFE, 0x84, 0x34, 0x87, 0x5B, 0xA5, 0xA0, 
-  0x5E, 0x0D, 0xE4, 0x05, 0x5A, 0x45, 0x8B, 0x31, 0x28, 0xF0, 
-  0x80, 0x7A, 0xF9, 0x56, 0xE7, 0x60, 0xB0, 0x31, 0xBB, 0x75, 
-  0x7E, 0x30, 0x74, 0x53, 0x14, 0xF6, 0xDE, 0x24, 0x9E, 0xE0, 
-  0xB9, 0x9F, 0xE6, 0xB0, 0x5D, 0x5B, 0x7A, 0xF3, 0xFD, 0x0D, 
-  0x4C, 0xCA, 0xAD, 0x01, 0xE4, 0x3F, 0xFE, 0x1D, 0x03, 0xE7, 
-  0xD4, 0xC6, 0xC1, 0xE9, 0xF5, 0x9E, 0x72, 0x9C, 0x4A, 0x09, 
-  0x85, 0x2C, 0xBE, 0x46, 0x49, 0xE1, 0x0F, 0xBF, 0x27, 0xF2, 
-  0x81, 0xC3, 0x33, 0x95, 0xEC, 0xBE, 0x37, 0x2B, 0x65, 0xA5, 
-  0xEC, 0xF7, 0x69, 0x23, 0x3B, 0xA6, 0xA6, 0xC3, 0xC7, 0x9F, 
-  0x9B, 0x79, 0xE6, 0x37, 0xB4, 0xDB, 0x33, 0x3B, 0xC5, 0x19, 
-  0x50, 0x7B, 0xBB, 0x7B, 0x4B, 0xFF, 0x0A, 0x3A, 0x0F, 0xDE, 
-  0x9D, 0x1F, 0x70, 0xE0, 0x9C, 0x37, 0x9B, 0x61, 0x01, 0xD9, 
-  0xCB, 0x9F, 0xC7, 0x1F, 0x9B, 0x25, 0x7D, 0x18, 0xF0, 0x6F, 
-  0x12, 0x54, 0xC2, 0x17, 0x8F, 0xB2, 0x1F, 0x5D, 0x0F, 0x73, 
-  0xB2, 0xEE, 0xE9, 0x0E, 0xC4, 0xA1, 0x70, 0x48, 0xDF, 0x0B, 
-  0xB4, 0xDD, 0xFF, 0xC7, 0x01, 0xA6, 0xBC, 0x08, 0xCE, 0x0E, 
-  0xB4, 0x4A, 0xAE, 0xFF, 0x88, 0xA6, 0x4D, 0x60, 0xC7, 0x55, 
-  0x38, 0x74, 0x3C, 0x1D, 0x8F, 0x82, 0xD3, 0xD3, 0x31, 0x60, 
-  0xE4, 0xB2, 0x24, 0x76, 0xE7, 0xD8, 0x53, 0x05, 0x20, 0x3E, 
-  0x5C, 0xEF, 0x17, 0x4C, 0x20, 0x6F, 0x6A, 0x6D, 0x10, 0xA3, 
-  0xA4, 0xE9, 0xFB, 0x76, 0x66, 0x99, 0x5D, 0xD1, 0x34, 0x52, 
-  0x42, 0xBF, 0x02, 0x26, 0xC0, 0x00, 0x02, 0x9E, 0xED, 0xAE, 
-  0xE5, 0x23, 0x85, 0x5C, 0xFF, 0xAD, 0x6E, 0x89, 0x02, 0x33, 
-  0x97, 0x74, 0x05, 0x59, 0x1E, 0x73, 0x4E, 0xD3, 0x9A, 0x97, 
-  0xD3, 0x85, 0x2B, 0x12, 0xFB, 0xA2, 0xF0, 0xA4, 0x4C, 0x2A, 
-  0x58, 0xFB, 0x56, 0x6C, 0xE9, 0xA6, 0x04, 0x07, 0x9F, 0xBC, 
-  0x76, 0x66, 0x01, 0x80, 0xB8, 0x1E, 0x4A, 0x8A, 0x0C, 0x76, 
-  0x8A, 0x3C, 0x5F, 0x25, 0xAD, 0x83, 0xF3, 0x10, 0x02, 0xE1, 
-  0x38, 0x4B, 0xFA, 0x81, 0xD2, 0xC5, 0x6D, 0x18, 0xA7, 0xD8, 
-  0x0A, 0x4E, 0xC9, 0xC7, 0xA3, 0x19, 0x52, 0x0D, 0xBB, 0xA9, 
-  0xDE, 0x9C, 0x90, 0x57, 0x71, 0x1A, 0x37, 0xA8, 0x70, 0x4D, 
-  0x75, 0x7E, 0x34, 0x90, 0x74, 0x0E, 0x02, 0xC8, 0x8A, 0x80, 
-  0x3D, 0x06, 0x67, 0xF4, 0xF2, 0xD4, 0x15, 0x66, 0x0D, 0x23, 
-  0xAE, 0x46, 0x0A, 0x23, 0x7B, 0x36, 0x96, 0x48, 0x7D, 0x99, 
-  0xF4, 0x09, 0xE3, 0xA9, 0x53, 0xAC, 0x94, 0xB7, 0x23, 0x7E, 
-  0x57, 0xCF, 0x90, 0xCD, 0x13, 0x0D, 0x50, 0xBD, 0xC9, 0xE4, 
-  0xC2, 0x22, 0x5F, 0x28, 0x11, 0xF8, 0x1F, 0x42, 0x33, 0xEE, 
-  0xF3, 0xB4, 0xED, 0x8F, 0xF4, 0xA0, 0xAE, 0xF5, 0xAE, 0x56, 
-  0x59, 0xC3, 0x65, 0xDB, 0xF2, 0x51, 0x6D, 0x15, 0xA3, 0xAF, 
-  0xA5, 0xC7, 0x9F, 0x7A, 0xE8, 0xCC, 0xB4, 0xD8, 0xCA, 0x39, 
-  0x3F, 0x79, 0xB3, 0x86, 0xDB, 0x37, 0x52, 0xDA, 0x5E, 0xDB, 
-  0x7F, 0x53, 0x60, 0x43, 0x75, 0x53, 0x93, 0xD4, 0xA2, 0xE2, 
-  0xE7, 0xB7, 0x42, 0xF0, 0x97, 0xA5, 0xB5, 0x52, 0xD3, 0xCF, 
-  0xE7, 0x70, 0x6F, 0x10, 0xD4, 0x85, 0xC4, 0x4B, 0x3D, 0x09, 
-  0xE1, 0x02, 0xB8, 0xED, 0xA5, 0xCC, 0x7B, 0x2D, 0x68, 0xEF, 
-  0xEF, 0x9E, 0x87, 0x8C, 0xB7, 0xC9, 0x85, 0xA8, 0x01, 0xC2, 
-  0xCF, 0x43, 0xB5, 0x6D, 0x30, 0x2A, 0x9F, 0x06, 0x96, 0xE0, 
-  0x43, 0xEC, 0x3F, 0xC1, 0x2F, 0x7D, 0x4D, 0x85, 0x76, 0xD3, 
-  0xF7, 0xFA, 0xC8, 0x84, 0x20, 0xA8, 0x3C, 0xD9, 0x3E, 0x4A, 
-  0xB4, 0x87, 0x05, 0xCF, 0x9B, 0x51, 0x68, 0xF9, 0x49, 0xBA, 
-  0x4D, 0x68, 0x97, 0x6E, 0x79, 0xDB, 0x04, 0x51, 0x66, 0x6F, 
-  0xF9, 0x59, 0x2D, 0x55, 0x96, 0x13, 0x59, 0x52, 0x30, 0xB8, 
-  0x73, 0xD1, 0x12, 0x33, 0x31, 0xEC, 0x4C, 0x0C, 0x8E, 0xD4, 
-  0x47, 0xE7, 0x30, 0xC6, 0x98, 0xB5, 0x5B, 0x35, 0x1B, 0xAC, 
-  0x51, 0xBB, 0xFA, 0xC3, 0x8D, 0x3E, 0x89, 0x83, 0x1C, 0xED, 
-  0xB1, 0x03, 0x9C, 0xC7, 0x5C, 0x89, 0xF9, 0xC2, 0xE3, 0x45, 
-  0x91, 0xDB, 0x41, 0x0A, 0x22, 0xD1, 0x90, 0x39, 0xD6, 0x9D, 
-  0x0A, 0xD8, 0x36, 0xDC, 0xDB, 0xDD, 0x63, 0x22, 0xF8, 0x7B, 
-  0x4D, 0x90, 0x4C, 0x27, 0x0F, 0xCC, 0x16, 0x0E, 0x32, 0x46, 
-  0xD7, 0x20, 0x5A, 0x43, 0xC4, 0xC5, 0x37, 0x2E, 0xEB, 0x3F, 
-  0x42, 0x2C, 0xFA, 0x99, 0xE2, 0xF9, 0x70, 0xB3, 0xC3, 0xCF, 
-  0x4C, 0x67, 0xEB, 0x7C, 0x9D, 0xAF, 0x96, 0x15, 0x97, 0xD2, 
-  0x07, 0x3B, 0xF6, 0xEF, 0x2F, 0x98, 0xAA, 0x1D, 0x45, 0xDC, 
-  0x11, 0xBA, 0xF6, 0x0C, 0x18, 0x64, 0x80, 0xF2, 0x6B, 0xBD, 
-  0x3C, 0x85, 0xC1, 0xCD, 0x78, 0xD0, 0x62, 0x79, 0x0F, 0xCD, 
-  0xCA, 0x3D, 0x94, 0x0A, 0x11, 0xEF, 0x11, 0x86, 0xFA, 0x3F, 
-  0x31, 0xB2, 0xF1, 0x2C, 0x74, 0x1B, 0x57, 0x05, 0xD4, 0x4F, 
-  0xAF, 0xE7, 0xCB, 0x60, 0x9E, 0x78, 0x82, 0xAD, 0xF3, 0x34, 
-  0x6A, 0x2F, 0xDC, 0xA1, 0xC9, 0xEA, 0x3E, 0x6E, 0x01, 0x80, 
-  0x17, 0x5B, 0xCC, 0xBB, 0xED, 0xD0, 0x30, 0x11, 0xBE, 0xEE, 
-  0x2E, 0x9F, 0xCE, 0xE1, 0xFF, 0x32, 0xB8, 0x7D, 0x40, 0xC8, 
-  0x46, 0x0F, 0x41, 0x16, 0xE1, 0xB3, 0x98, 0x47, 0xCE, 0xE1, 
-  0x41, 0xDE, 0x80, 0xA7, 0x56, 0x83, 0xA8, 0xDA, 0xC3, 0x49, 
-  0x33, 0x6F, 0x93, 0x68, 0xA0, 0xC6, 0x1A, 0x0B, 0x82, 0x38, 
-  0x56, 0xEE, 0xBB, 0x97, 0x5D, 0xBD, 0x8A, 0x32, 0x2D, 0xFE, 
-  0x40, 0xC7, 0x0D, 0xCA, 0x32, 0x08, 0xCC, 0xE2, 0x18, 0x57, 
-  0xBB, 0xC1, 0x60, 0x43, 0x02, 0x26, 0xC0, 0x00, 0x02, 0xAD, 
-  0x9E, 0x61, 0x0D, 0x67, 0x25, 0xE4, 0x6E, 0x8F, 0x6D, 0xEA, 
-  0x16, 0x98, 0xFA, 0x76, 0x6D, 0x6D, 0x3C, 0xED, 0x4B, 0x25, 
-  0x60, 0xC6, 0xAB, 0x59, 0x91, 0x43, 0xAA, 0xAA, 0xEC, 0x8F, 
-  0xA1, 0x3E, 0xB1, 0x78, 0x72, 0xEE, 0xD1, 0x91, 0xBA, 0xD9, 
-  0x9B, 0xE3, 0x55, 0x61, 0x98, 0x46, 0x4B, 0xC5, 0x41, 0x3B, 
-  0x9C, 0x88, 0x1D, 0x82, 0xD5, 0xD5, 0x99, 0x13, 0x64, 0x44, 
-  0x00, 0xBD, 0xBE, 0xC4, 0xF6, 0x6A, 0x2D, 0xE3, 0xD0, 0xE7, 
-  0x88, 0xD3, 0xA1, 0x48, 0x88, 0x84, 0x8A, 0x25, 0xAB, 0x90, 
-  0x43, 0xFB, 0x3D, 0x1B, 0x06, 0xB2, 0xFD, 0x24, 0x58, 0x0C, 
-  0xFA, 0x0A, 0xD3, 0x23, 0x73, 0xA7, 0xF8, 0x50, 0xC5, 0x1B, 
-  0x3A, 0x75, 0xF4, 0x24, 0xA8, 0x52, 0xFB, 0x1B, 0x61, 0xAB, 
-  0x79, 0x06, 0x54, 0xD9, 0x1D, 0x3A, 0x72, 0x4F, 0x8F, 0xD3, 
-  0xC7, 0x71, 0xA8, 0x66, 0x80, 0x49, 0x8D, 0x50, 0xD1, 0xBF, 
-  0xC8, 0x70, 0xAE, 0x4F, 0x64, 0x53, 0x26, 0x37, 0xDA, 0x6B, 
-  0x62, 0xFE, 0xF9, 0x60, 0xAD, 0xAD, 0x49, 0x51, 0x37, 0x2E, 
-  0x61, 0xA9, 0xAA, 0x72, 0xFD, 0x02, 0x20, 0x0B, 0xB0, 0xB0, 
-  0x07, 0x95, 0x0C, 0x38, 0x13, 0xB6, 0xA4, 0x33, 0xFA, 0xFA, 
-  0x12, 0xE1, 0x62, 0x00, 0x92, 0x46, 0x23, 0xAA, 0xD7, 0x9D, 
-  0xBD, 0xAF, 0x15, 0xCA, 0x8C, 0x88, 0x2A, 0x4B, 0x1B, 0xA8, 
-  0x06, 0xA0, 0xC2, 0x80, 0x8E, 0x98, 0x46, 0xA1, 0x84, 0x2C, 
-  0x4A, 0x0F, 0xEA, 0x70, 0xE6, 0xDD, 0x17, 0x30, 0x8A, 0x41, 
-  0x69, 0x8A, 0x1B, 0xC2, 0xC7, 0x18, 0xD5, 0xB3, 0x94, 0x4F, 
-  0x51, 0x15, 0xCC, 0x37, 0x9A, 0x9E, 0xFD, 0x12, 0x40, 0xC1, 
-  0xA3, 0x06, 0x0F, 0x36, 0xFC, 0x04, 0x18, 0x35, 0x40, 0x9C, 
-  0x9E, 0x46, 0x5E, 0x14, 0xB6, 0xF7, 0xBF, 0xE5, 0x21, 0x12, 
-  0xF2, 0xE2, 0x17, 0xB3, 0x63, 0x8C, 0xD1, 0xE3, 0xA9, 0x0A, 
-  0x80, 0x1B, 0x74, 0x7A, 0x58, 0x91, 0x88, 0x9D, 0xAE, 0xE6, 
-  0x05, 0x1D, 0x3C, 0x1E, 0xE9, 0x95, 0x08, 0x75, 0xEE, 0x20, 
-  0xA8, 0x4B, 0x3D, 0x36, 0xAF, 0xB0, 0xFA, 0x94, 0x62, 0x5D, 
-  0x9F, 0xD5, 0x50, 0x2A, 0x24, 0xFC, 0x1D, 0xDC, 0x39, 0xCB, 
-  0x0D, 0x5A, 0xA1, 0xDA, 0xEF, 0xC9, 0xB3, 0x62, 0xF8, 0x7D, 
-  0x0C, 0xE4, 0x6B, 0xEC, 0xF0, 0xF7, 0x96, 0x63, 0x58, 0x80, 
-  0x55, 0x22, 0x6D, 0x42, 0x38, 0xE9, 0x1D, 0x69, 0xD5, 0x2F, 
-  0x03, 0x3C, 0xCD, 0x27, 0x34, 0x99, 0x39, 0xF0, 0x5C, 0xE0, 
-  0x23, 0x70, 0x85, 0x4B, 0x30, 0xBD, 0x21, 0x01, 0xF6, 0x06, 
-  0x0B, 0xED, 0xBA, 0xA1, 0x6F, 0xE0, 0x6E, 0xD3, 0x78, 0xA8, 
-  0x56, 0x94, 0x92, 0x84, 0xA8, 0x60, 0x35, 0xA8, 0x86, 0x56, 
-  0x41, 0xEA, 0x12, 0x34, 0x86, 0x52, 0x18, 0x75, 0x43, 0x01, 
-  0x0A, 0xCE, 0xBA, 0x04, 0xF7, 0x32, 0x09, 0x2D, 0xB1, 0xAC, 
-  0x04, 0xB0, 0x4E, 0xEA, 0xBE, 0xDE, 0xDE, 0x95, 0x37, 0xDA, 
-  0x86, 0x72, 0xFE, 0x10, 0x16, 0xBB, 0xA7, 0xE9, 0x67, 0xC9, 
-  0x3C, 0x85, 0x18, 0xFF, 0xD7, 0x74, 0x25, 0x3A, 0x95, 0x04, 
-  0xD5, 0x7F, 0x99, 0x41, 0x6A, 0x6A, 0x2C, 0xF6, 0x3E, 0x3C, 
-  0x4B, 0xA7, 0xB9, 0xDA, 0x13, 0xFC, 0xF6, 0x46, 0xEF, 0x7E, 
-  0xB4, 0xA6, 0x1B, 0x36, 0x93, 0x5B, 0xDA, 0xDB, 0x6A, 0xC7, 
-  0x37, 0x58, 0x3C, 0x4F, 0x52, 0x7E, 0x39, 0xD7, 0xE2, 0xBA, 
-  0x79, 0xA7, 0x9A, 0x05, 0x8A, 0xF5, 0x65, 0x86, 0xF4, 0x52, 
-  0xBC, 0x79, 0x6D, 0xA9, 0xFE, 0xEE, 0xE6, 0xC5, 0x2B, 0x28, 
-  0x62, 0x8E, 0xF6, 0x6E, 0xD5, 0x08, 0x90, 0x96, 0x72, 0x7A, 
-  0x6B, 0x61, 0x8B, 0x6A, 0xE6, 0xCD, 0x05, 0x63, 0x12, 0x9A, 
-  0xF7, 0x01, 0xAC, 0xF7, 0x8F, 0x1F, 0xE0, 0xCA, 0x1E, 0xF9, 
-  0x86, 0xC1, 0xF6, 0x0D, 0x2D, 0x9F, 0x8A, 0x2C, 0x8B, 0x3C, 
-  0xE4, 0x89, 0xDF, 0x72, 0x86, 0x17, 0xA8, 0x7F, 0x9D, 0x8B, 
-  0x0D, 0x87, 0xCB, 0xC5, 0xAE, 0xE3, 0x90, 0xB1, 0xD9, 0x8B, 
-  0x5E, 0x04, 0x97, 0xAA, 0x19, 0x85, 0x02, 0x26, 0xC0, 0x00, 
-  0x02, 0x26, 0xDA, 0x00, 0x7E, 0x08, 0xC0, 0x08, 0x12, 0x9A, 
-  0x78, 0x4E, 0x9D, 0xA7, 0xB0, 0x5E, 0x0D, 0x76, 0x6D, 0x4D, 
-  0xC7, 0x89, 0x35, 0xDD, 0xB5, 0x58, 0x9F, 0x20, 0x3C, 0x41, 
-  0x77, 0x9B, 0x85, 0x06, 0x21, 0xA4, 0x99, 0x56, 0xF9, 0x5B, 
-  0x07, 0x01, 0x06, 0x1A, 0xE1, 0x1B, 0xC7, 0x9F, 0x46, 0x5D, 
-  0x1F, 0xB8, 0xB2, 0x91, 0xA5, 0xC2, 0x01, 0x94, 0xFA, 0x53, 
-  0x74, 0xFA, 0x6A, 0x5B, 0x63, 0x08, 0x2E, 0x24, 0xB0, 0xCF, 
-  0x03, 0x40, 0x9C, 0xA1, 0xF2, 0xDB, 0xA2, 0x35, 0xD7, 0xCA, 
-  0x78, 0x4E, 0x9D, 0x8B, 0x92, 0x4A, 0xD1, 0xEA, 0xF8, 0x14, 
-  0xCA, 0xA0, 0x32, 0x55, 0x95, 0xA0, 0x1F, 0xB7, 0x1D, 0x8B, 
-  0x8E, 0x8E, 0xA6, 0xF0, 0x2A, 0x30, 0x76, 0xB4, 0x9B, 0x6F, 
-  0xAB, 0xBC, 0xC7, 0xA8, 0xF6, 0x2B, 0x9D, 0x1D, 0xC2, 0x24, 
-  0x06, 0x10, 0x06, 0xE7, 0x59, 0x34, 0xE9, 0x30, 0xA8, 0xF5, 
-  0x61, 0x55, 0xEC, 0xFB, 0xA1, 0x43, 0x17, 0x10, 0x08, 0xFF, 
-  0x3C, 0x93, 0x03, 0xFF, 0x83, 0x35, 0x81, 0x77, 0x7E, 0x97, 
-  0xC2, 0xA0, 0x53, 0x2A, 0x26, 0xD4, 0xDF, 0xC0, 0xA3, 0x21, 
-  0x07, 0x14, 0x41, 0xD3, 0x7C, 0xE5, 0x40, 0x00, 0xDE, 0x32, 
-  0xF5, 0xB9, 0xBB, 0x61, 0x44, 0xBC, 0xA4, 0xFD, 0x67, 0xAA, 
-  0x69, 0xF4, 0x96, 0x93, 0xD2, 0xAF, 0xEA, 0xC5, 0x72, 0xDB, 
-  0xEA, 0x88, 0x2A, 0x5F, 0xC5, 0xAB, 0x00, 0xFA, 0xA9, 0x32, 
-  0x61, 0x58, 0xBE, 0xC0, 0x42, 0xA9, 0xFA, 0xB6, 0x44, 0xD6, 
-  0x59, 0xF8, 0x26, 0x8B, 0xB9, 0x0A, 0xD9, 0xE2, 0x5B, 0x1B, 
-  0x20, 0xD1, 0x34, 0x91, 0x81, 0xF3, 0xFF, 0xED, 0x6D, 0x81, 
-  0xF9, 0x7D, 0xE3, 0x73, 0x37, 0xC1, 0x01, 0x12, 0x28, 0x9B, 
-  0xEA, 0xDA, 0x0E, 0x3D, 0x68, 0x16, 0x23, 0xE1, 0x68, 0xFF, 
-  0x1A, 0x59, 0xCC, 0x89, 0xF8, 0x44, 0x70, 0x13, 0xB2, 0x98, 
-  0xB1, 0x31, 0xEA, 0xEC, 0x65, 0x21, 0x36, 0xEF, 0xCC, 0x85, 
-  0x62, 0xC3, 0xEC, 0x62, 0xE9, 0x06, 0xEC, 0xB3, 0x47, 0x94, 
-  0xE5, 0xF2, 0x6F, 0xFD, 0x80, 0xEE, 0x70, 0xB0, 0x06, 0x56, 
-  0x8B, 0xF2, 0xDC, 0x7A, 0x52, 0x90, 0xC2, 0xE4, 0x77, 0xDD, 
-  0xF7, 0xC2, 0x0C, 0x9C, 0xBE, 0x5A, 0x0F, 0xC6, 0x45, 0xB1, 
-  0x3A, 0x63, 0x38, 0x2C, 0xD9, 0xC4, 0x45, 0x08, 0x44, 0x90, 
-  0xE2, 0xBC, 0xA2, 0x5A, 0xE6, 0x2E, 0xFD, 0xCB, 0x36, 0x7F, 
-  0xA9, 0xAC, 0x8C, 0x34, 0x1A, 0x3C, 0xE2, 0x9B, 0x24, 0x45, 
-  0xE3, 0x9C, 0xCF, 0xF9, 0x96, 0xFE, 0x58, 0xB5, 0x29, 0x20, 
-  0x0B, 0xC9, 0x5C, 0xAF, 0xCF, 0x7F, 0xCB, 0x8A, 0x14, 0xE1, 
-  0xCD, 0xF7, 0x5B, 0x93, 0xBC, 0x7D, 0x7A, 0x3B, 0xD2, 0xF2, 
-  0xFA, 0x2B, 0x57, 0x02, 0x9C, 0xAC, 0xA2, 0x16, 0x11, 0x2D, 
-  0xDB, 0x3D, 0x42, 0x26, 0x87, 0xBE, 0x9F, 0x8B, 0x7B, 0x00, 
-  0x20, 0x09, 0x41, 0x05, 0xB0, 0x42, 0x98, 0x44, 0xD6, 0xCC, 
-  0x08, 0xA2, 0x20, 0x1F, 0x2A, 0x59, 0xB3, 0x05, 0x4F, 0xB4, 
-  0xA6, 0xF8, 0xF8, 0xFD, 0x27, 0xBB, 0xC5, 0xC3, 0x52, 0x4D, 
-  0x63, 0x37, 0xCF, 0xAE, 0x4C, 0x60, 0x1E, 0x98, 0x26, 0x12, 
-  0x3D, 0xB9, 0xE6, 0x87, 0x09, 0x17, 0xB1, 0xE4, 0x81, 0x2C, 
-  0x8E, 0x73, 0xA1, 0x40, 0x53, 0x96, 0xD8, 0x17, 0x7F, 0x39, 
-  0xA8, 0x4F, 0xE9, 0xEF, 0x30, 0xE2, 0x5E, 0xEF, 0x9C, 0x13, 
-  0x70, 0x21, 0x14, 0xA3, 0x5D, 0xEA, 0x43, 0xFB, 0xA6, 0x80, 
-  0x70, 0xB9, 0x4B, 0x68, 0x9C, 0x5A, 0x82, 0x59, 0x00, 0xFA, 
-  0x5E, 0x4C, 0x4F, 0x76, 0xB1, 0xF4, 0x45, 0xCD, 0xE6, 0x18, 
-  0x09, 0xE2, 0x36, 0x8A, 0x60, 0x4B, 0xF4, 0x61, 0x55, 0xC4, 
-  0xE9, 0x69, 0xC1, 0x03, 0x9E, 0x9C, 0xAF, 0x1C, 0xE5, 0xD1, 
-  0xFF, 0x45, 0x16, 0x43, 0xD7, 0xE5, 0x4B, 0xCC, 0xEA, 0x24, 
-  0x2E, 0xCE, 0xE3, 0x90, 0x17, 0xDB, 0xC4, 0x57, 0x4D, 0xF9, 
-  0xCB, 0xEC, 0x09, 0x62, 0xBD, 0xD8, 0x7A, 0x89, 0x55, 0x92, 
-  0x90, 0x7B, 0x22, 0x20, 0xD9, 0x9A, 0xC9, 0x19, 0x02, 0x26, 
-  0xC0, 0x00, 0x02, 0x2E, 0xA2, 0xCF, 0xDE, 0xE3, 0xDE, 0xA9, 
-  0x10, 0x3D, 0xEB, 0xD9, 0x4B, 0x51, 0x68, 0x41, 0x57, 0xCD, 
-  0x7C, 0xF4, 0x28, 0x84, 0x22, 0x1C, 0xA7, 0xA6, 0x8A, 0xDD, 
-  0x97, 0x5B, 0x8A, 0x07, 0x01, 0x97, 0x13, 0x20, 0x06, 0x12, 
-  0xC9, 0xBB, 0x6D, 0x12, 0x25, 0x6D, 0x08, 0x13, 0x3C, 0x32, 
-  0x48, 0xFE, 0x49, 0xD9, 0xC1, 0x3E, 0x00, 0x1C, 0xD9, 0xF0, 
-  0xE2, 0xB3, 0xE0, 0x07, 0xE1, 0x8F, 0xDF, 0x75, 0xE0, 0xB9, 
-  0x61, 0x1A, 0xBF, 0xAF, 0x66, 0xE0, 0xAB, 0x8A, 0x4B, 0x71, 
-  0xCB, 0x4F, 0xB7, 0x4C, 0x30, 0xC8, 0xB0, 0xC4, 0xC0, 0x38, 
-  0x73, 0xDD, 0x3C, 0xDC, 0x5D, 0x81, 0x40, 0x14, 0x23, 0x9C, 
-  0xD2, 0x48, 0xF9, 0xCB, 0xC4, 0x1B, 0xD5, 0xC7, 0x85, 0xB0, 
-  0x57, 0xC1, 0xF5, 0x41, 0x7A, 0x2E, 0xC6, 0x03, 0x86, 0x8C, 
-  0x4E, 0xAF, 0x24, 0x21, 0xB9, 0x0B, 0xE9, 0x24, 0x12, 0x02, 
-  0x3E, 0x35, 0x7C, 0x1D, 0x9A, 0x2D, 0x5E, 0xB7, 0xEE, 0x08, 
-  0x34, 0x2C, 0x2B, 0xAD, 0x8D, 0x02, 0xF6, 0xFE, 0x06, 0x88, 
-  0xD0, 0xA5, 0xA2, 0x1E, 0x5B, 0xD2, 0x88, 0x09, 0x9F, 0x43, 
-  0xDF, 0xC4, 0x85, 0x59, 0x50, 0x7B, 0x94, 0xD9, 0xBB, 0xBE, 
-  0xF5, 0x1D, 0x60, 0xD0, 0x90, 0x6F, 0xD5, 0x1E, 0x49, 0xF1, 
-  0x76, 0x04, 0x96, 0xCA, 0x3F, 0x44, 0x64, 0xBE, 0x41, 0xE7, 
-  0x4A, 0x6E, 0xA8, 0x11, 0x14, 0x21, 0xEA, 0x9E, 0x43, 0x6D, 
-  0x2E, 0xF6, 0x49, 0x7A, 0x8C, 0xD6, 0xF1, 0x4A, 0xC3, 0x17, 
-  0x16, 0x23, 0x3B, 0x02, 0x6A, 0xA7, 0x90, 0x1D, 0x8C, 0xBF, 
-  0xB4, 0x25, 0xDA, 0xB6, 0x0F, 0x2A, 0x60, 0xF5, 0xC1, 0x7F, 
-  0xFA, 0x1D, 0x0B, 0xAF, 0x28, 0x8A, 0x00, 0x8A, 0xBE, 0xA8, 
-  0x72, 0x20, 0x5F, 0xEC, 0x3F, 0x16, 0x6E, 0xAB, 0xC4, 0xFC, 
-  0x6B, 0x75, 0xD7, 0xFB, 0x73, 0x60, 0x7E, 0x25, 0xE5, 0xA3, 
-  0x91, 0x6A, 0x33, 0xD3, 0x9E, 0xAC, 0xFB, 0x8C, 0xD1, 0xC6, 
-  0x63, 0xF4, 0x3F, 0xB7, 0xD1, 0xD3, 0x88, 0x90, 0x4C, 0xA2, 
-  0x7E, 0x6B, 0x19, 0x61, 0xCC, 0xAB, 0x48, 0xDD, 0x8D, 0xE2, 
-  0x1B, 0xB7, 0x9E, 0x2F, 0x58, 0x10, 0x78, 0xAC, 0x94, 0xF6, 
-  0xD6, 0x62, 0x4D, 0x66, 0x78, 0x67, 0x9F, 0x1B, 0x3A, 0x78, 
-  0x4E, 0xA0, 0xDB, 0x47, 0x92, 0xC4, 0x43, 0x1A, 0x22, 0xFC, 
-  0x26, 0x38, 0xA4, 0xF2, 0x7A, 0x52, 0x31, 0x71, 0x63, 0x16, 
-  0x58, 0xF5, 0xA4, 0x4A, 0xCA, 0x73, 0xD5, 0x90, 0x39, 0x55, 
-  0x8F, 0xB2, 0xC0, 0x3F, 0x3A, 0xEC, 0x69, 0xC4, 0x42, 0xCE, 
-  0xB9, 0x1B, 0xA4, 0x32, 0x52, 0x14, 0x7C, 0xBB, 0xF6, 0xB3, 
-  0x5A, 0x7C, 0xF1, 0x75, 0x1E, 0x4B, 0xB8, 0xB0, 0xB3, 0x8E, 
-  0x13, 0x63, 0x7B, 0xF5, 0xB9, 0x93, 0x22, 0x98, 0xDF, 0x6C, 
-  0xEC, 0x51, 0x4F, 0xC8, 0x0B, 0xA0, 0x14, 0x57, 0x75, 0x1B, 
-  0xF6, 0xE9, 0x5D, 0xC2, 0x47, 0x65, 0xDF, 0x79, 0x0D, 0x48, 
-  0xBE, 0x4F, 0x46, 0xF0, 0x37, 0xA5, 0x7C, 0xA3, 0x6B, 0x3E, 
-  0xE6, 0xA2, 0x0E, 0x69, 0xAF, 0x3C, 0x46, 0x8A, 0x77, 0xD2, 
-  0xBF, 0x2A, 0x16, 0x00, 0x17, 0x2F, 0x9C, 0x4E, 0xD8, 0xA8, 
-  0x48, 0xD4, 0xCC, 0x0C, 0x29, 0xD1, 0x7A, 0xAE, 0x81, 0x4F, 
-  0x04, 0x76, 0x53, 0xCF, 0x22, 0x76, 0x39, 0x61, 0xB6, 0x76, 
-  0x42, 0xE6, 0x4E, 0x71, 0xB3, 0x06, 0xB9, 0x31, 0x04, 0x60, 
-  0x88, 0x04, 0x02, 0x89, 0x72, 0x13, 0xD8, 0x8E, 0xD7, 0xE7, 
-  0x88, 0xCC, 0x3B, 0x88, 0x4A, 0xC7, 0x96, 0x58, 0x12, 0xDA, 
-  0x75, 0x15, 0xE2, 0x9A, 0xFA, 0x9E, 0x7C, 0x0E, 0xD6, 0x86, 
-  0x64, 0x7F, 0x31, 0xE3, 0x5C, 0xD8, 0xCF, 0xC0, 0x6D, 0x9B, 
-  0x1A, 0x1D, 0x8E, 0x90, 0xED, 0x8E, 0x7B, 0xFD, 0xAF, 0xE0, 
-  0x85, 0xE2, 0x51, 0x49, 0xAE, 0xE6, 0x03, 0x78, 0x41, 0xB9, 
-  0x05, 0xA0, 0xB8, 0x25, 0x03, 0x51, 0xD1, 0x93, 0x05, 0xE1, 
-  0xAA, 0x19, 0x0F, 0x1A, 0xF0, 0xD6, 0x18, 0xB6, 0x23, 0xFD, 
-  0xBC, 0x6E, 0x10, 0xA5, 0x18, 0xE9, 0x3B, 0xE5, 0xA4, 0x22, 
-  0x02, 0x26, 0xC0, 0x00, 0x02, 0x55, 0x43, 0x38, 0x66, 0x6B, 
-  0x96, 0x00, 0x6F, 0x33, 0xEE, 0x72, 0x7A, 0x9E, 0xD2, 0x5C, 
-  0x1F, 0x87, 0x4C, 0xFC, 0xE9, 0x3C, 0xAB, 0xC7, 0x5E, 0x55, 
-  0xD6, 0xEF, 0x78, 0xB1, 0x4D, 0xA7, 0x92, 0x3F, 0x57, 0x3B, 
-  0xF5, 0x7F, 0xE0, 0xD6, 0xE0, 0xD0, 0x8D, 0xE5, 0xE1, 0xAE, 
-  0x48, 0xC1, 0xF7, 0xF3, 0xC3, 0xA4, 0xF7, 0x8F, 0xE7, 0x6F, 
-  0xB2, 0xB1, 0xA5, 0x6F, 0x6A, 0xCF, 0x5F, 0x3C, 0xF2, 0x50, 
-  0x31, 0x19, 0x89, 0xF1, 0x74, 0x55, 0xA2, 0xFF, 0x7A, 0x5D, 
-  0xCB, 0x96, 0xED, 0xE4, 0xEA, 0x28, 0x4B, 0xF7, 0xE4, 0x45, 
-  0x7D, 0x99, 0xAF, 0xC5, 0xDB, 0xC1, 0x2D, 0xE8, 0xE9, 0xEA, 
-  0x2B, 0xAD, 0x7E, 0x8E, 0x96, 0x25, 0xA0, 0x9E, 0xDA, 0x31, 
-  0xE4, 0xCD, 0xC6, 0x8D, 0x69, 0x39, 0x04, 0x53, 0x1B, 0xCA, 
-  0xEF, 0x96, 0x8E, 0xEF, 0xFB, 0x4E, 0xC8, 0x11, 0x8E, 0x42, 
-  0x03, 0xC2, 0x96, 0x1A, 0x2C, 0xD8, 0xCF, 0x17, 0x05, 0x36, 
-  0xF7, 0x02, 0xAB, 0xBD, 0x1A, 0xF3, 0x51, 0xC0, 0xE2, 0x1E, 
-  0x0D, 0x8D, 0xE9, 0x81, 0x57, 0xD1, 0xA1, 0x9A, 0x2C, 0x7D, 
-  0x43, 0xBD, 0x23, 0x50, 0xA9, 0x3D, 0x77, 0xC1, 0x5F, 0x2D, 
-  0x3A, 0x61, 0x56, 0xE1, 0x47, 0xB4, 0x6C, 0xB1, 0xDF, 0xD7, 
-  0x1E, 0x95, 0x00, 0x02, 0x5B, 0xDA, 0xBD, 0x39, 0x2A, 0x06, 
-  0x98, 0x2B, 0x54, 0x63, 0xC9, 0xDB, 0x30, 0xF2, 0xB6, 0xB6, 
-  0xC8, 0x22, 0xAB, 0xB5, 0x68, 0xA3, 0xB7, 0x94, 0x6C, 0x97, 
-  0x5B, 0xC0, 0x6F, 0xA5, 0x11, 0xFD, 0x9A, 0x52, 0x5A, 0xB5, 
-  0x3D, 0xEA, 0xC3, 0x23, 0xD1, 0xA7, 0x31, 0xA1, 0xCE, 0xA8, 
-  0x4A, 0x7C, 0x5D, 0xF6, 0x21, 0xC1, 0x38, 0x73, 0xA3, 0x83, 
-  0x00, 0x28, 0x9D, 0x76, 0x5A, 0xC5, 0x63, 0xDB, 0x47, 0x25, 
-  0xAB, 0xD7, 0x25, 0xAE, 0x7D, 0x87, 0xF1, 0xA1, 0xE6, 0x9C, 
-  0x83, 0x33, 0x30, 0xE1, 0xAD, 0x65, 0xFD, 0x0F, 0xBB, 0xD0, 
-  0xEF, 0xF5, 0xC3, 0x19, 0x9B, 0x9D, 0x13, 0xBA, 0xEF, 0x9F, 
-  0x13, 0x2F, 0x76, 0x55, 0x2C, 0x2A, 0xC3, 0x8B, 0x40, 0x79, 
-  0x49, 0x02, 0x88, 0xE7, 0x4B, 0x57, 0xF5, 0xC5, 0x56, 0x30, 
-  0xF2, 0xB8, 0x2D, 0x83, 0x6F, 0xB6, 0xBF, 0xE2, 0x7E, 0xFF, 
-  0x18, 0x61, 0x11, 0x6B, 0x77, 0xCC, 0x04, 0x8B, 0xE4, 0x7C, 
-  0xF9, 0x48, 0x9C, 0xE0, 0x10, 0x7F, 0x68, 0xFE, 0x40, 0xF0, 
-  0x23, 0x5C, 0x13, 0x56, 0xD7, 0xCC, 0xDA, 0x83, 0xD6, 0x5C, 
-  0xB2, 0xED, 0x3F, 0x4C, 0x1E, 0x0A, 0x2F, 0x9D, 0xA2, 0x08, 
-  0x95, 0xB1, 0x80, 0xFB, 0x04, 0xAC, 0xED, 0x88, 0x01, 0xDC, 
-  0x69, 0xC7, 0x2D, 0xE8, 0xEB, 0xD1, 0xCE, 0x8E, 0x32, 0x04, 
-  0x0B, 0xA5, 0x1E, 0xFA, 0x47, 0xA2, 0x8F, 0xB6, 0xF4, 0xC8, 
-  0xFE, 0x81, 0xFC, 0x68, 0xFF, 0x82, 0x9A, 0x9A, 0xB6, 0x2C, 
-  0x58, 0x55, 0xEE, 0xFC, 0xBB, 0x23, 0x47, 0xA4, 0xEB, 0xF8, 
-  0x08, 0xB1, 0xF0, 0xAA, 0xE3, 0x7A, 0xDC, 0xEF, 0xD6, 0xB4, 
-  0x60, 0x39, 0x6F, 0x0F, 0x8A, 0x4C, 0x65, 0x48, 0x65, 0x78, 
-  0x6D, 0xF8, 0x44, 0x13, 0xA2, 0x9A, 0x76, 0xE8, 0xA7, 0x06, 
-  0x33, 0x54, 0x74, 0x73, 0xE4, 0x69, 0x66, 0x27, 0xA0, 0x66, 
-  0xA0, 0x5A, 0x9E, 0x26, 0xF2, 0xA4, 0x3C, 0xA6, 0xCF, 0x86, 
-  0x0F, 0x9D, 0x0A, 0x75, 0xC1, 0x9C, 0x34, 0xD1, 0x40, 0x21, 
-  0x64, 0x62, 0x7B, 0xBF, 0xAE, 0xCD, 0x44, 0x17, 0x6D, 0x5F, 
-  0x21, 0x02, 0x17, 0x1A, 0x2C, 0xA4, 0x18, 0x1D, 0x4F, 0x2E, 
-  0xC8, 0xE2, 0xCF, 0xAE, 0x25, 0x4A, 0xC4, 0xA2, 0x5A, 0x2E, 
-  0x10, 0x09, 0x69, 0xB2, 0xEA, 0xF9, 0xB9, 0x4C, 0x36, 0xA4, 
-  0xD6, 0xCB, 0x03, 0x6E, 0x7B, 0xC1, 0xA4, 0x28, 0x1A, 0x09, 
-  0xBF, 0xF1, 0xA1, 0x3F, 0x75, 0xB8, 0x5A, 0xF3, 0x9F, 0x12, 
-  0x35, 0x4B, 0x16, 0x21, 0x3B, 0x8D, 0xF9, 0x87, 0xCB, 0x8A, 
-  0xEC, 0x29, 0x1B, 0xF0, 0xB3, 0x96, 0x77, 0xB7, 0x7B, 0xA8, 
-  0x6A, 0x98, 0xE4, 0x8B, 0x61, 0xB6, 0x47, 0xD7, 0x92, 0xB4, 
-  0x0B, 0x47, 0x02, 0x26, 0xC0, 0x00, 0x02, 0x4B, 0x86, 0xD9, 
-  0x89, 0x5B, 0x11, 0x29, 0x1D, 0x8E, 0x56, 0xC4, 0x4A, 0x0D, 
-  0xD4, 0x9F, 0x43, 0x9F, 0xA2, 0x55, 0x58, 0xE1, 0xF6, 0xF6, 
-  0x58, 0xFB, 0xCD, 0x3F, 0x06, 0x4C, 0xC2, 0x60, 0x6D, 0xB7, 
-  0xB2, 0xFF, 0xFE, 0x89, 0x77, 0x7A, 0x1E, 0xA0, 0xC8, 0xDD, 
-  0x7F, 0x3E, 0x6B, 0x38, 0x2F, 0x41, 0x2B, 0xDF, 0x42, 0x14, 
-  0x50, 0x28, 0xEE, 0xDE, 0x3F, 0xD8, 0xFF, 0x09, 0x43, 0x7A, 
-  0x22, 0x4F, 0xF3, 0xFC, 0x60, 0x7E, 0x2C, 0x1A, 0xB6, 0x9E, 
-  0x21, 0x40, 0x76, 0x3B, 0x42, 0xFC, 0xBC, 0x1D, 0x00, 0xA4, 
-  0x55, 0x95, 0x47, 0xBD, 0x6E, 0x31, 0xAB, 0x05, 0xAD, 0x38, 
-  0x53, 0xB0, 0x24, 0x83, 0x7D, 0x0E, 0xA8, 0x40, 0xE6, 0x33, 
-  0x6D, 0xEF, 0x72, 0x35, 0xCF, 0x3C, 0x11, 0x67, 0x1D, 0x28, 
-  0xEF, 0x7B, 0x7A, 0x7A, 0x0E, 0xD2, 0x7F, 0xBA, 0xEB, 0xA0, 
-  0x49, 0x46, 0x29, 0x40, 0x5B, 0x62, 0xA9, 0xED, 0xC9, 0xAC, 
-  0xDD, 0xAF, 0xE9, 0xAF, 0xF9, 0x75, 0x70, 0xC7, 0xAD, 0xB2, 
-  0xB6, 0x51, 0x08, 0x23, 0x89, 0x1F, 0xCC, 0xDE, 0xB7, 0x6B, 
-  0x25, 0xC4, 0x77, 0x90, 0x01, 0xBA, 0x80, 0x62, 0x3E, 0xFF, 
-  0x93, 0x00, 0x15, 0x43, 0x7D, 0xBE, 0x80, 0x83, 0xBB, 0xB0, 
-  0xAA, 0x3B, 0xF2, 0x0A, 0x9D, 0x86, 0x23, 0xA4, 0xB7, 0xB7, 
-  0x44, 0x30, 0xA7, 0x17, 0x66, 0x70, 0xEE, 0x2D, 0x1F, 0xDF, 
-  0xBD, 0xD9, 0x14, 0x3E, 0x55, 0xC6, 0xC9, 0x5B, 0xC3, 0xF2, 
-  0xE5, 0x10, 0xD5, 0x1A, 0x93, 0xF6, 0x76, 0xAB, 0x71, 0x87, 
-  0xDE, 0xD5, 0x51, 0x99, 0x37, 0x6F, 0xEE, 0xB1, 0x63, 0xDA, 
-  0x7F, 0x3B, 0xAC, 0x77, 0x1B, 0x4B, 0xA3, 0xE3, 0x77, 0x41, 
-  0xEA, 0x23, 0xF3, 0xB9, 0x22, 0x75, 0x07, 0x8E, 0x64, 0x3E, 
-  0x32, 0xA9, 0x28, 0xAA, 0x93, 0x8F, 0xE8, 0xDA, 0x60, 0xE9, 
-  0xD7, 0x35, 0x7F, 0xD7, 0x8F, 0xC8, 0xE5, 0x5B, 0x61, 0x47, 
-  0xD6, 0xD4, 0xA7, 0xFF, 0x25, 0x8F, 0x03, 0xC3, 0x03, 0x07, 
-  0xED, 0x30, 0x45, 0x86, 0x73, 0x1E, 0x8F, 0x2F, 0x3D, 0xB4, 
-  0xC0, 0x37, 0x7A, 0xE7, 0x80, 0xEA, 0xA0, 0xDB, 0x98, 0xAE, 
-  0xF9, 0x24, 0x0C, 0x74, 0x36, 0x54, 0x13, 0x34, 0x30, 0xCF, 
-  0x0E, 0xC8, 0x9D, 0x94, 0xE7, 0xAF, 0x6A, 0xC0, 0x32, 0x32, 
-  0xA3, 0xDE, 0x3A, 0x5B, 0x72, 0x72, 0xE3, 0x8F, 0x91, 0xC5, 
-  0x44, 0xAB, 0x86, 0x7B, 0xE0, 0x6C, 0x80, 0x84, 0x64, 0x1D, 
-  0xC0, 0xF1, 0x28, 0x7C, 0x6A, 0x35, 0x76, 0xCF, 0x12, 0x56, 
-  0x84, 0x1C, 0x21, 0x51, 0x33, 0x00, 0xFF, 0xB2, 0x64, 0x30, 
-  0x44, 0x1C, 0xA5, 0x05, 0x09, 0xE2, 0x14, 0x8E, 0xF3, 0xD8, 
-  0x91, 0x21, 0x60, 0xC0, 0x51, 0x68, 0x62, 0xF5, 0x7E, 0x06, 
-  0xD5, 0xC0, 0xEE, 0xB8, 0x91, 0xF1, 0x52, 0x14, 0x6C, 0x27, 
-  0xB6, 0x6A, 0x1C, 0x64, 0xBF, 0x59, 0x47, 0x64, 0x03, 0x8D, 
-  0x4E, 0xEB, 0xA3, 0x73, 0x10, 0xE2, 0xBC, 0xA0, 0x30, 0x29, 
-  0xE6, 0xF5, 0xED, 0x04, 0xCA, 0xAA, 0xC2, 0xBA, 0xDB, 0x8E, 
-  0xBC, 0x00, 0x34, 0x3D, 0xB6, 0x12, 0xCB, 0xAF, 0xC0, 0x3D, 
-  0x97, 0xF7, 0x5A, 0x1B, 0x83, 0x90, 0x91, 0xD0, 0xE2, 0xCF, 
-  0xE6, 0x21, 0x07, 0xCF, 0x2E, 0xFD, 0x71, 0xA1, 0x10, 0x18, 
-  0x67, 0x3F, 0x8F, 0xE2, 0x86, 0xFA, 0xA6, 0xDF, 0x6D, 0xE4, 
-  0x31, 0x7D, 0x75, 0x12, 0x99, 0x23, 0xC7, 0xFB, 0xF2, 0x04, 
-  0x76, 0x4C, 0x93, 0x9B, 0xB9, 0x89, 0x1D, 0x88, 0x5A, 0x0E, 
-  0xDE, 0x5A, 0x27, 0x35, 0x88, 0xE7, 0x80, 0x14, 0x87, 0xCA, 
-  0x23, 0xE6, 0xEF, 0xA8, 0xEA, 0x73, 0x7D, 0x93, 0x0C, 0x61, 
-  0x81, 0x2E, 0x10, 0xDF, 0x13, 0x57, 0x96, 0xD9, 0x36, 0x68, 
-  0x93, 0x42, 0x7A, 0x67, 0x60, 0x44, 0x57, 0xD8, 0x6C, 0x4B, 
-  0xD4, 0xCC, 0x7E, 0x70, 0xE2, 0xCD, 0xC7, 0x14, 0x4A, 0xDE, 
-  0x32, 0x35, 0x8B, 0x4B, 0x14, 0xE0, 0x8D, 0x5C, 0x33, 0x72, 
-  0xC9, 0x5D, 0x1F, 0xF6, 0xD7, 0xC3, 0xCF, 0x72, 0xA1, 0x2C, 
-  0x98, 0x2C, 0x0E, 0xEA, 0x02, 0x26, 0xC0, 0x00, 0x02, 0xEC, 
-  0xFC, 0x5D, 0x99, 0x61, 0x74, 0x77, 0x64, 0xF2, 0x70, 0x18, 
-  0x1A, 0x0B, 0x9F, 0x5A, 0x64, 0xE4, 0xCE, 0xA9, 0xCE, 0xCF, 
-  0x15, 0x35, 0x0E, 0x90, 0x95, 0xD1, 0x78, 0xBC, 0x36, 0xDD, 
-  0x32, 0xB0, 0x72, 0xCF, 0xCE, 0xFE, 0x8D, 0xAA, 0xF4, 0x19, 
-  0x73, 0x80, 0x37, 0xB6, 0x7B, 0x88, 0xB5, 0x7F, 0x5B, 0x7E, 
-  0xC7, 0x1F, 0x40, 0x5E, 0xCF, 0xC5, 0xE3, 0x75, 0x43, 0xCA, 
-  0x9D, 0x7C, 0xA1, 0x5D, 0x12, 0xBE, 0x30, 0x0E, 0x2C, 0x6D, 
-  0xE1, 0xD4, 0xD9, 0xC0, 0x90, 0x9F, 0x13, 0x6C, 0x00, 0x75, 
-  0xC9, 0x98, 0xE8, 0x4A, 0x1E, 0x43, 0x27, 0xB2, 0x3D, 0x16, 
-  0x5D, 0xF7, 0x18, 0xF6, 0xF2, 0x57, 0xA8, 0x54, 0x57, 0x50, 
-  0xFD, 0x98, 0x0F, 0x99, 0x63, 0x9E, 0x94, 0x71, 0x8B, 0x6B, 
-  0x6A, 0xAC, 0x27, 0x7A, 0xE5, 0xFE, 0x49, 0x5F, 0xA9, 0x3F, 
-  0x72, 0x32, 0xE5, 0x67, 0x87, 0xE9, 0xCC, 0xBC, 0x64, 0xE9, 
-  0x6B, 0x15, 0x06, 0x60, 0x32, 0x43, 0x49, 0x53, 0x47, 0xB2, 
-  0x56, 0xCE, 0xBF, 0x5F, 0x9B, 0x16, 0x40, 0x7D, 0x90, 0x0E, 
-  0xFB, 0xFE, 0x66, 0x58, 0xB3, 0xFC, 0x42, 0xB5, 0x90, 0xE6, 
-  0xCA, 0x6C, 0xD0, 0x3C, 0xA0, 0x2D, 0x84, 0x5E, 0xA0, 0xE7, 
-  0xD7, 0x8B, 0xB0, 0x42, 0x56, 0x3D, 0x48, 0xAF, 0x18, 0xEF, 
-  0xAF, 0x27, 0x76, 0xE3, 0x26, 0x0B, 0xCA, 0xA0, 0x01, 0x4B, 
-  0x79, 0xD1, 0xAC, 0xD5, 0x8B, 0xCD, 0x70, 0x9F, 0x6E, 0xFB, 
-  0x72, 0xBB, 0x9B, 0xDA, 0x4A, 0xFA, 0x96, 0x45, 0x29, 0x59, 
-  0x16, 0x4B, 0x57, 0xC1, 0x7B, 0x5D, 0x94, 0x5E, 0xDA, 0xC1, 
-  0x2B, 0x3C, 0xD9, 0xD5, 0x6B, 0x23, 0xE7, 0x53, 0x9C, 0xAA, 
-  0x89, 0x07, 0xFC, 0x66, 0xBC, 0xBC, 0xDD, 0x5D, 0xC7, 0xC0, 
-  0x46, 0xAF, 0xF6, 0xCB, 0xBB, 0xD3, 0x37, 0xC1, 0x7F, 0xCD, 
-  0xAE, 0x69, 0x1F, 0xCA, 0x20, 0x07, 0x76, 0x3F, 0xD0, 0x71, 
-  0x4F, 0x19, 0x6A, 0x92, 0xA2, 0xD8, 0x81, 0xE7, 0x84, 0xC3, 
-  0x24, 0x55, 0xF3, 0x1F, 0xA6, 0x8B, 0xAF, 0x11, 0xA6, 0xAC, 
-  0x9B, 0x2D, 0x12, 0xD0, 0x0D, 0xBC, 0x20, 0x26, 0x01, 0x76, 
-  0x39, 0xBF, 0xAB, 0x52, 0xD6, 0x93, 0x76, 0x29, 0x4C, 0xD8, 
-  0x8F, 0xBA, 0xA9, 0xA1, 0xCE, 0x09, 0xCC, 0xB7, 0xC5, 0x34, 
-  0xCC, 0xC1, 0x27, 0xE9, 0x47, 0xFB, 0x02, 0xC0, 0x0B, 0xB7, 
-  0xE2, 0x1B, 0x9A, 0x05, 0x32, 0x99, 0x7E, 0xEF, 0xDA, 0xC3, 
-  0xE2, 0xB3, 0x0D, 0x2F, 0xD7, 0x32, 0x14, 0xAA, 0x90, 0x00, 
-  0x5B, 0x8F, 0xA9, 0x6D, 0xBD, 0x54, 0xAF, 0xE2, 0x47, 0x8C, 
-  0x20, 0xD4, 0x14, 0x34, 0x13, 0x08, 0x17, 0x1B, 0xA2, 0x3B, 
-  0xDC, 0x6D, 0x5A, 0x08, 0x04, 0x58, 0x38, 0xAC, 0x84, 0xBB, 
-  0x22, 0x64, 0x6B, 0xE6, 0xB9, 0x46, 0x4A, 0xB6, 0x39, 0xD2, 
-  0xF4, 0x6D, 0x13, 0x63, 0x7F, 0x79, 0x6F, 0x54, 0x38, 0x72, 
-  0x1A, 0x3D, 0x45, 0x28, 0x14, 0x8F, 0x9D, 0xFE, 0x51, 0x02, 
-  0x3F, 0x0C, 0xFD, 0xE4, 0x7A, 0xC4, 0xFC, 0x00, 0xF0, 0xF6, 
-  0x7E, 0x98, 0x36, 0x40, 0x35, 0x92, 0x3A, 0x42, 0xBE, 0xA6, 
-  0xAE, 0x3C, 0x55, 0xF5, 0x4E, 0x41, 0xF4, 0x22, 0x63, 0x80, 
-  0x2E, 0xC9, 0x65, 0x73, 0x43, 0x2F, 0xE7, 0xF9, 0xC5, 0x5C, 
-  0x21, 0xDD, 0xF5, 0x15, 0x38, 0xE4, 0xDD, 0x92, 0x08, 0x9D, 
-  0x75, 0x65, 0x13, 0x28, 0xA5, 0xF9, 0x45, 0x13, 0xE0, 0x8F, 
-  0xB2, 0x36, 0x91, 0xAA, 0xBE, 0x87, 0xD2, 0x78, 0x3F, 0xB0, 
-  0xEE, 0x0C, 0x4C, 0x8C, 0xD7, 0x56, 0x85, 0x21, 0x43, 0x40, 
-  0xC4, 0x26, 0x90, 0xC2, 0x63, 0xF0, 0xC3, 0x49, 0xA0, 0xF0, 
-  0x2A, 0xCA, 0xA3, 0x9A, 0x39, 0xA6, 0xAA, 0x98, 0x2B, 0x8E, 
-  0xBA, 0x0B, 0xD9, 0x21, 0xC4, 0xC9, 0x97, 0x1B, 0x57, 0x80, 
-  0x49, 0x3E, 0xC4, 0x4B, 0xD8, 0x5E, 0xE2, 0x43, 0xC2, 0x13, 
-  0x8D, 0x51, 0x28, 0x8B, 0x30, 0x7C, 0x17, 0xB0, 0x58, 0x15, 
-  0x5F, 0x56, 0xF8, 0xF3, 0x8F, 0x9A, 0xC0, 0x9B, 0x27, 0x90, 
-  0x23, 0x48, 0xED, 0x5E, 0x50, 0xE2, 0x02, 0x26, 0xC0, 0x00, 
-  0x02, 0x02, 0xCA, 0xFA, 0x0D, 0x3A, 0xC4, 0xBF, 0x20, 0x04, 
-  0xD3, 0xA1, 0x4F, 0xED, 0x80, 0x40, 0x81, 0x15, 0x67, 0x0D, 
-  0x65, 0x3E, 0x52, 0x9C, 0x30, 0x20, 0xD2, 0xD8, 0xAC, 0xAF, 
-  0x06, 0xE5, 0xDA, 0x8B, 0x8B, 0x3A, 0xCA, 0xDC, 0x59, 0x8F, 
-  0x2F, 0x93, 0x53, 0x5B, 0xAC, 0xCE, 0x1F, 0xDF, 0x3B, 0x50, 
-  0xBF, 0x70, 0xF1, 0x7A, 0xCC, 0xA2, 0x25, 0x88, 0xD1, 0xA0, 
-  0xBC, 0x9D, 0x41, 0x1F, 0x9C, 0x0A, 0x95, 0x27, 0xE2, 0x71, 
-  0x4C, 0x1C, 0x14, 0xDB, 0xEA, 0xCD, 0xA3, 0x7C, 0x39, 0x57, 
-  0x69, 0x95, 0xA5, 0x04, 0x4F, 0xA3, 0xC0, 0x24, 0xC1, 0x5B, 
-  0x39, 0xF4, 0x9F, 0xBC, 0xB2, 0xC3, 0x37, 0x28, 0x1F, 0xFA, 
-  0xB9, 0xD7, 0xFF, 0x7A, 0xA2, 0x52, 0x03, 0x1F, 0x96, 0x5B, 
-  0xC4, 0x83, 0x08, 0x75, 0xFF, 0xF6, 0xF2, 0xF9, 0x7C, 0x1D, 
-  0x09, 0xB4, 0x3B, 0xAE, 0xCD, 0x2E, 0xF2, 0x6F, 0x2F, 0x4F, 
-  0xBC, 0x2B, 0x5B, 0x6D, 0x9A, 0x1B, 0xE6, 0x5E, 0xF5, 0xA8, 
-  0x93, 0x98, 0xDC, 0x6E, 0x5E, 0x17, 0xCA, 0xAB, 0x90, 0xFD, 
-  0xFB, 0x68, 0x1F, 0x67, 0x88, 0x58, 0x85, 0x4F, 0xAA, 0xC3, 
-  0x68, 0x40, 0xD5, 0xBC, 0xAC, 0x1D, 0x94, 0xC5, 0xB6, 0x01, 
-  0x2A, 0xE8, 0xBD, 0xDD, 0xBB, 0x17, 0x9D, 0x0E, 0x55, 0x62, 
-  0x45, 0xFB, 0x21, 0xB6, 0x71, 0x76, 0xEB, 0xCC, 0xF5, 0xE7, 
-  0xF1, 0xCD, 0xB7, 0xCA, 0xBD, 0xFF, 0xA9, 0xF7, 0x1A, 0xAA, 
-  0x1A, 0xCD, 0xC1, 0x71, 0x62, 0xE3, 0xDD, 0x09, 0x06, 0xAA, 
-  0x23, 0xFD, 0xEF, 0x6B, 0xA7, 0x83, 0xD8, 0xE6, 0x70, 0x01, 
-  0xF0, 0xEF, 0x69, 0xA9, 0x4B, 0x9B, 0x83, 0x57, 0x77, 0xAD, 
-  0x51, 0xBE, 0xBA, 0xF6, 0x2A, 0x6F, 0x1F, 0x97, 0x9A, 0xFE, 
-  0xA8, 0xE2, 0xAA, 0x20, 0x51, 0x95, 0xBA, 0xAE, 0x66, 0xB3, 
-  0xA8, 0x61, 0xCF, 0x8B, 0xFA, 0x6B, 0x48, 0xC4, 0x22, 0xE1, 
-  0xDF, 0x3A, 0x0D, 0xA9, 0x09, 0xF1, 0x66, 0x0C, 0x46, 0x74, 
-  0x90, 0x8B, 0x68, 0x00, 0x4F, 0x4F, 0x3A, 0x90, 0x58, 0x56, 
-  0xF4, 0x8A, 0x71, 0xB6, 0x1A, 0x91, 0x59, 0x17, 0x5C, 0xC0, 
-  0x87, 0x82, 0x7E, 0xB0, 0x81, 0x90, 0xF1, 0x6A, 0x03, 0xB8, 
-  0xA0, 0xAB, 0xDD, 0x63, 0x96, 0x48, 0x19, 0x37, 0x1F, 0x0F, 
-  0x24, 0x7A, 0x70, 0x48, 0x7D, 0x28, 0x1F, 0xB3, 0xCD, 0x76, 
-  0x53, 0x83, 0xC5, 0x53, 0xE8, 0xAB, 0x3A, 0xFC, 0x5B, 0x8A, 
-  0xF0, 0x5A, 0x0F, 0xEF, 0xFF, 0xB0, 0xC1, 0x61, 0x61, 0x58, 
-  0x4A, 0x8C, 0x1C, 0x20, 0xFC, 0x46, 0x07, 0x58, 0xF0, 0x20, 
-  0x81, 0x66, 0x28, 0x0E, 0xC2, 0x16, 0xAB, 0x98, 0xFF, 0x6E, 
-  0x24, 0xAC, 0x78, 0x42, 0xAE, 0x7D, 0xAB, 0x6F, 0xB4, 0x11, 
-  0x1C, 0x0C, 0x40, 0xF8, 0xF4, 0x93, 0x63, 0xE4, 0x6A, 0xEB, 
-  0xC5, 0xD9, 0x6E, 0x35, 0xC9, 0xA7, 0x2D, 0x49, 0xEA, 0x5D, 
-  0x69, 0x73, 0x06, 0x1C, 0xC4, 0x7E, 0x46, 0xFD, 0x09, 0x88, 
-  0x77, 0x77, 0xE7, 0xEB, 0x31, 0x34, 0x16, 0x72, 0x76, 0x1B, 
-  0x4E, 0xF8, 0x67, 0x9F, 0xCA, 0x1C, 0x67, 0x4E, 0xD8, 0x88, 
-  0xAA, 0x01, 0x27, 0x8E, 0x08, 0x70, 0xF8, 0x0B, 0x23, 0xF6, 
-  0x84, 0x47, 0x2F, 0x4E, 0x5F, 0xB7, 0x2C, 0x39, 0xBF, 0x61, 
-  0xEC, 0x6D, 0x24, 0x5C, 0x57, 0xBE, 0xAE, 0x19, 0x20, 0xBE, 
-  0x55, 0x40, 0x1D, 0xB7, 0x5F, 0xC3, 0xF6, 0x5B, 0x19, 0xC6, 
-  0x8A, 0x94, 0x23, 0x5C, 0x95, 0x33, 0x4C, 0x90, 0xE0, 0x46, 
-  0xAC, 0x0A, 0x1D, 0x50, 0xFB, 0x0A, 0xAB, 0xA2, 0xEB, 0x2A, 
-  0x21, 0xBF, 0x15, 0xD5, 0x9E, 0x80, 0x3B, 0x16, 0xB0, 0x3F, 
-  0x6F, 0x6F, 0xF6, 0xBE, 0x92, 0xA1, 0x2F, 0x83, 0xA8, 0x3C, 
-  0xA6, 0xE7, 0x86, 0xCD, 0x3B, 0x96, 0xCE, 0xF1, 0x36, 0x7C, 
-  0x69, 0xD9, 0xD5, 0x0F, 0xC1, 0x4C, 0x7A, 0xE5, 0xAF, 0xAC, 
-  0x86, 0x90, 0x98, 0x3D, 0x2B, 0x94, 0xA2, 0x7C, 0x5B, 0xF7, 
-  0x27, 0xCD, 0xE5, 0x93, 0x60, 0x2C, 0x47, 0xE3, 0xFA, 0x18, 
-  0xCB, 0xEB, 0xDB, 0x0A, 0x49, 0x99, 0x0F, 0xAE, 0x02, 0x26, 
-  0xC0, 0x00, 0x02, 0xF3, 0x51, 0xA3, 0x96, 0x54, 0xDA, 0xE9, 
-  0x09, 0x47, 0x82, 0x50, 0xB8, 0x82, 0x39, 0x98, 0x54, 0x81, 
-  0x54, 0x91, 0x2C, 0xE6, 0xBC, 0x84, 0x03, 0x07, 0x26, 0x6D, 
-  0x0F, 0x5E, 0x2B, 0x45, 0xF5, 0x1D, 0x7B, 0xD6, 0x14, 0x03, 
-  0xD7, 0x09, 0x64, 0xEE, 0x05, 0xBA, 0xE0, 0x74, 0x67, 0x02, 
-  0xF5, 0x7E, 0x42, 0x42, 0xEC, 0x56, 0xE0, 0x9E, 0x82, 0x88, 
-  0x58, 0x3C, 0x96, 0xAF, 0x37, 0x95, 0x49, 0xC8, 0x87, 0xBD, 
-  0xFE, 0x7A, 0x6B, 0x4D, 0x37, 0xEE, 0x7C, 0xAA, 0x18, 0x5F, 
-  0x7E, 0x0B, 0x28, 0xA3, 0x95, 0x23, 0x42, 0xAB, 0xC1, 0xFA, 
-  0x41, 0xAE, 0xD5, 0xBD, 0x67, 0xA6, 0xC4, 0x7C, 0xAC, 0x2D, 
-  0xEF, 0x64, 0xC2, 0x5D, 0x30, 0x94, 0xF3, 0x97, 0x49, 0x00, 
-  0x39, 0x28, 0x57, 0x5D, 0x31, 0xBB, 0x1D, 0x10, 0x17, 0xE7, 
-  0x56, 0x55, 0xDF, 0x4C, 0xDD, 0xA6, 0x64, 0x02, 0xBC, 0x1C, 
-  0x2B, 0x4C, 0x30, 0xBF, 0x89, 0x7C, 0xFC, 0x7E, 0x84, 0xBC, 
-  0x51, 0x97, 0x6C, 0x74, 0x5B, 0x08, 0xE0, 0x96, 0x84, 0x81, 
-  0xF3, 0x17, 0x6B, 0xD6, 0xF6, 0x66, 0x06, 0x1B, 0x33, 0x4D, 
-  0xF8, 0xED, 0xC0, 0x53, 0x8B, 0x35, 0x6B, 0x85, 0x4F, 0x37, 
-  0x0F, 0x87, 0xF3, 0x85, 0x72, 0xAE, 0xCB, 0x3A, 0x23, 0x97, 
-  0xC0, 0xF6, 0xE7, 0x53, 0xDF, 0x57, 0x0E, 0x8E, 0x0B, 0x66, 
-  0x2A, 0xA2, 0x9D, 0xA8, 0xE2, 0x60, 0x57, 0xCA, 0x27, 0x7E, 
-  0xB1, 0xDB, 0x7B, 0x6A, 0xB0, 0xBE, 0xB5, 0x47, 0xEE, 0xE6, 
-  0xBA, 0x0E, 0xB2, 0x71, 0x0B, 0xF7, 0xE4, 0x27, 0x9D, 0x25, 
-  0xAA, 0x3F, 0xA9, 0x1A, 0x5B, 0xD9, 0x9D, 0xBB, 0x20, 0x32, 
-  0x37, 0xE1, 0xD3, 0x4A, 0xBA, 0x45, 0x9E, 0x00, 0x10, 0x3F, 
-  0x21, 0x6E, 0xA2, 0xCE, 0x30, 0xA0, 0x2A, 0x5B, 0x31, 0x51, 
-  0x05, 0xA1, 0x51, 0xED, 0x89, 0x5E, 0xB1, 0x09, 0xE6, 0x71, 
-  0xD8, 0x42, 0xFD, 0xA1, 0x04, 0x83, 0xFB, 0x09, 0x4F, 0x90, 
-  0x4D, 0x7E, 0x5A, 0xB9, 0x4C, 0xC9, 0xA3, 0x57, 0x4E, 0x54, 
-  0x98, 0xB3, 0xBD, 0xB7, 0x52, 0x9D, 0xDE, 0xF3, 0xD3, 0xE0, 
-  0x9C, 0x2D, 0x97, 0x46, 0x1B, 0xF9, 0x75, 0x37, 0x5D, 0x0A, 
-  0xA3, 0x4A, 0x18, 0x35, 0x80, 0xC5, 0x08, 0xA8, 0x37, 0x09, 
-  0x44, 0x92, 0xB1, 0x74, 0xFE, 0x28, 0x95, 0x55, 0xB6, 0x08, 
-  0xA0, 0x75, 0xE9, 0xA0, 0x4B, 0x8E, 0xE6, 0x61, 0x17, 0x2A, 
-  0xED, 0x15, 0x0B, 0x6C, 0x7C, 0xC3, 0x82, 0x57, 0x90, 0xC5, 
-  0xFF, 0xD8, 0xA5, 0xBF, 0xAA, 0xBE, 0xCF, 0x8E, 0x06, 0xFF, 
-  0x27, 0xDA, 0x40, 0x24, 0xDD, 0xC0, 0xBE, 0x4E, 0x19, 0x9D, 
-  0x23, 0xA2, 0x3A, 0x70, 0x64, 0xEB, 0xF6, 0xA7, 0xE9, 0x71, 
-  0x57, 0xE9, 0x63, 0x03, 0xAE, 0xEC, 0x73, 0x21, 0x23, 0x8D, 
-  0x61, 0x5A, 0x10, 0x54, 0xF9, 0x80, 0xE7, 0x47, 0x45, 0xD4, 
-  0x8B, 0x16, 0xEE, 0x2B, 0xD8, 0xC1, 0xEE, 0x0F, 0x4F, 0x78, 
-  0x40, 0x00, 0xB6, 0x25, 0x81, 0x2A, 0x37, 0x4D, 0x71, 0x92, 
-  0xFA, 0x56, 0x3F, 0xDC, 0x91, 0x01, 0x27, 0xC7, 0x17, 0xFD, 
-  0x27, 0x55, 0x6F, 0x32, 0x14, 0xE7, 0xEA, 0x18, 0xDA, 0x4A, 
-  0x70, 0x10, 0xF8, 0x72, 0x78, 0xA1, 0xC1, 0x13, 0x5F, 0x1B, 
-  0x98, 0x93, 0xC2, 0xBF, 0x29, 0xA3, 0x59, 0x79, 0x15, 0x57, 
-  0x17, 0xE5, 0x66, 0x7A, 0x3B, 0x8E, 0xB3, 0x3B, 0x9E, 0xC0, 
-  0x77, 0xBD, 0x2D, 0x95, 0x26, 0xF0, 0xD5, 0xB4, 0x30, 0xC8, 
-  0x0D, 0xCA, 0xB5, 0xDE, 0xB2, 0x21, 0x27, 0x9A, 0x27, 0xAF, 
-  0x89, 0xB4, 0x0D, 0x1B, 0x5A, 0x43, 0x3E, 0x69, 0x76, 0x25, 
-  0xAC, 0x42, 0x23, 0x5F, 0x5A, 0xA6, 0xDB, 0xE6, 0x77, 0x9D, 
-  0x2A, 0x99, 0x1B, 0xE7, 0x47, 0x05, 0x06, 0x47, 0x01, 0x14, 
-  0x0D, 0xEA, 0xF5, 0x28, 0x3A, 0x5B, 0x87, 0xF0, 0xFB, 0x7C, 
-  0x96, 0x39, 0x6C, 0x4A, 0x48, 0xA5, 0x7A, 0x94, 0xB0, 0xB8, 
-  0xBB, 0x03, 0xDA, 0xEA, 0x4F, 0xD1, 0x5B, 0x8B, 0x9D, 0x0A, 
-  0x5E, 0xAB, 0xD8, 0x89, 0x5C, 0x4D, 0xD1, 0xA7, 0xC4, 0x8A, 
-  0x02, 0x26, 0xC0, 0x00, 0x02, 0x14, 0x04, 0xA6, 0x12, 0xC1, 
-  0x4E, 0x67, 0x67, 0x6C, 0xEE, 0x9E, 0x7A, 0x55, 0x00, 0xCB, 
-  0x12, 0x7B, 0x69, 0x4C, 0x94, 0x57, 0x73, 0x71, 0xC8, 0x45, 
-  0xAA, 0x04, 0x75, 0x85, 0xED, 0x68, 0x7D, 0x09, 0xD5, 0x4A, 
-  0xD0, 0x86, 0xDB, 0x0B, 0xC3, 0x80, 0xD1, 0x11, 0xB3, 0x59, 
-  0xCF, 0xBD, 0x13, 0x7B, 0xD2, 0x30, 0xDF, 0xDD, 0x41, 0xD7, 
-  0xBC, 0x34, 0x11, 0x85, 0x58, 0x2A, 0x8E, 0x2B, 0xDC, 0x00, 
-  0x78, 0x94, 0x28, 0x52, 0xD9, 0x0C, 0x70, 0xCB, 0x7D, 0xE9, 
-  0xCF, 0x7C, 0x11, 0x91, 0x09, 0xA8, 0xD7, 0xBC, 0xC8, 0xA1, 
-  0xDF, 0xF3, 0xB4, 0x25, 0x3A, 0x88, 0x02, 0xF0, 0xBE, 0x8E, 
-  0x89, 0x2B, 0xA6, 0x43, 0x88, 0xD0, 0xCC, 0x27, 0x91, 0x77, 
-  0x8D, 0x01, 0x32, 0xA6, 0x0C, 0x3D, 0x86, 0x76, 0x03, 0x4F, 
-  0x01, 0xF6, 0x02, 0xB3, 0xD0, 0x7A, 0x39, 0x78, 0x1E, 0xF2, 
-  0x35, 0xB6, 0xB3, 0xC9, 0x50, 0xE7, 0x0A, 0xD1, 0x3C, 0xB4, 
-  0xE2, 0x02, 0x60, 0x13, 0x8A, 0x0F, 0x15, 0xEE, 0x48, 0x67, 
-  0x84, 0x9E, 0x8E, 0x56, 0x22, 0xB9, 0x0A, 0xE2, 0x36, 0xDE, 
-  0x97, 0x4E, 0x9F, 0x0A, 0xE0, 0xB8, 0x2A, 0x0D, 0x07, 0x7F, 
-  0xCE, 0x76, 0xEA, 0x58, 0x54, 0xBC, 0x7A, 0xA1, 0x87, 0x15, 
-  0x3F, 0xCE, 0xDA, 0x58, 0xA4, 0x51, 0x36, 0x49, 0xB0, 0x23, 
-  0xC0, 0x55, 0xFB, 0xE2, 0x47, 0xB6, 0xD6, 0x31, 0x90, 0xA9, 
-  0x99, 0x2A, 0xC3, 0x59, 0xAE, 0x60, 0x03, 0xC2, 0x56, 0xC0, 
-  0x03, 0xA9, 0x3E, 0xF0, 0xE9, 0x59, 0x30, 0xD5, 0x90, 0x15, 
-  0x72, 0x32, 0x30, 0xD1, 0xFA, 0xDD, 0xB3, 0x09, 0xF0, 0x1A, 
-  0xA3, 0x6E, 0x5E, 0xBB, 0xDE, 0x58, 0x08, 0x91, 0xFB, 0xA0, 
-  0xEC, 0x45, 0x7F, 0x05, 0x90, 0x78, 0xCF, 0x6F, 0x66, 0xF4, 
-  0x2A, 0x79, 0x93, 0x33, 0x17, 0x07, 0x86, 0xE6, 0xEC, 0xFD, 
-  0xEC, 0x07, 0x74, 0x17, 0x26, 0x84, 0x52, 0x54, 0x9A, 0xBC, 
-  0xDE, 0xEE, 0xD7, 0xE9, 0x2F, 0xA7, 0x60, 0xA6, 0x54, 0x74, 
-  0xB9, 0x83, 0x6D, 0xE6, 0xB7, 0x46, 0xDC, 0xC8, 0x09, 0x36, 
-  0x25, 0x1E, 0x8B, 0x61, 0x94, 0x2D, 0xBA, 0xE2, 0xAB, 0xE6, 
-  0xD0, 0xDB, 0x9C, 0x13, 0x74, 0x25, 0xDA, 0xD7, 0x69, 0x69, 
-  0xFA, 0x52, 0x3C, 0x15, 0xBB, 0xFC, 0x5D, 0xE2, 0x6E, 0xA5, 
-  0x26, 0x35, 0x65, 0xF4, 0xE0, 0x29, 0x77, 0xCF, 0xAB, 0xF9, 
-  0xAB, 0x8C, 0x9D, 0x7D, 0x60, 0xA4, 0xA0, 0x3D, 0x43, 0xB6, 
-  0x9D, 0xAE, 0x04, 0x46, 0x8A, 0xE2, 0x3B, 0x4C, 0xC8, 0xA4, 
-  0x5D, 0x61, 0xB4, 0x5B, 0x8B, 0x2E, 0xD5, 0x2A, 0x07, 0x27, 
-  0x6A, 0x34, 0x04, 0xBA, 0xF8, 0x72, 0x32, 0x99, 0x97, 0x8C, 
-  0xC0, 0xCD, 0x35, 0x68, 0xB8, 0xA9, 0x45, 0x76, 0xA5, 0xD4, 
-  0x17, 0x36, 0xB1, 0x25, 0xF7, 0x47, 0x69, 0x30, 0x68, 0x14, 
-  0x0B, 0x9C, 0x38, 0xB1, 0x29, 0x16, 0x88, 0xAD, 0xDF, 0x31, 
-  0x7E, 0x3C, 0x5F, 0xA4, 0x0D, 0x86, 0x5A, 0x29, 0x37, 0xA9, 
-  0x1B, 0xD5, 0x68, 0x9F, 0xE0, 0xE6, 0x32, 0x42, 0x12, 0x37, 
-  0x99, 0xC5, 0xB8, 0xA1, 0xD3, 0x5B, 0x90, 0x9C, 0xAD, 0x86, 
-  0x6B, 0x03, 0x82, 0x91, 0xD9, 0xF9, 0xDC, 0xD5, 0x41, 0x7B, 
-  0xF3, 0xE4, 0x08, 0x92, 0xCA, 0x6A, 0xAA, 0xBD, 0xFE, 0x25, 
-  0x50, 0xDC, 0x2C, 0x00, 0x65, 0x59, 0x9B, 0xD3, 0x30, 0xD2, 
-  0x39, 0xC0, 0x4D, 0xFD, 0x8C, 0x9D, 0x88, 0xD3, 0x52, 0xD6, 
-  0xC0, 0xA0, 0x1C, 0x08, 0x0B, 0x1F, 0x91, 0xAF, 0x60, 0x56, 
-  0xED, 0x8B, 0x37, 0xD3, 0x15, 0x08, 0x5C, 0xEA, 0xFA, 0x03, 
-  0x0A, 0x54, 0x92, 0x96, 0x34, 0x4F, 0x14, 0x0E, 0xD5, 0xB4, 
-  0xA0, 0x2E, 0xC0, 0xEC, 0x93, 0x8F, 0xA5, 0xF3, 0x82, 0x5F, 
-  0x0D, 0xA8, 0xBD, 0x28, 0x4B, 0x1C, 0x65, 0xC1, 0x97, 0x5B, 
-  0xEE, 0x99, 0xC5, 0xC2, 0xB9, 0x34, 0x4D, 0xDB, 0x6E, 0x42, 
-  0x26, 0x93, 0x49, 0x83, 0x36, 0x25, 0x72, 0x03, 0x08, 0xE2, 
-  0xE6, 0x67, 0x01, 0xBC, 0x7A, 0x10, 0x7A, 0xBC, 0x6B, 0x0B, 
-  0x4A, 0x94, 0x02, 0x26, 0xC0, 0x00, 0x02, 0x72, 0x08, 0xBA, 
-  0x77, 0xE2, 0x2F, 0x48, 0xD4, 0x9E, 0xC4, 0x23, 0x45, 0x55, 
-  0xF1, 0x0B, 0x1B, 0x50, 0x47, 0x8C, 0x40, 0x7C, 0xF7, 0xE4, 
-  0xCF, 0xD6, 0x0A, 0x0A, 0xD3, 0x7F, 0x35, 0x85, 0x84, 0x78, 
-  0xF2, 0x28, 0xEA, 0x14, 0x06, 0x2A, 0xC0, 0x53, 0x22, 0x45, 
-  0x9B, 0xDA, 0xE9, 0xEE, 0x98, 0x5D, 0xEC, 0xEC, 0xEF, 0xA1, 
-  0x1A, 0xDD, 0x7C, 0xE2, 0x29, 0xFF, 0x2B, 0x8A, 0x00, 0x49, 
-  0xD6, 0x2E, 0x7C, 0x50, 0x26, 0x29, 0x65, 0x97, 0xB4, 0xA8, 
-  0x6B, 0x38, 0x95, 0xC0, 0x7F, 0x41, 0xAD, 0xD5, 0xA2, 0x54, 
-  0x37, 0xE1, 0x72, 0x3A, 0x28, 0x58, 0xCA, 0x88, 0xB4, 0xF8, 
-  0x34, 0x43, 0xFF, 0xE4, 0xE4, 0xC2, 0x37, 0x0B, 0x72, 0x77, 
-  0x2B, 0x94, 0x8C, 0xB8, 0xCD, 0x72, 0x1E, 0xDB, 0x0A, 0xFA, 
-  0x86, 0x0E, 0xBC, 0x76, 0xDE, 0x89, 0x20, 0xBB, 0x1A, 0xC3, 
-  0x07, 0xAA, 0x0F, 0x0D, 0xED, 0x58, 0x42, 0x74, 0x44, 0xD0, 
-  0x89, 0x61, 0x25, 0xAF, 0xC0, 0x18, 0xFE, 0x16, 0xC9, 0x37, 
-  0x03, 0x11, 0x11, 0xEC, 0x9F, 0xFF, 0x2B, 0x00, 0x4F, 0x37, 
-  0xB6, 0xEC, 0x54, 0x0A, 0xA1, 0x68, 0xE5, 0x69, 0x38, 0xD5, 
-  0x55, 0x9E, 0x94, 0xAF, 0x3D, 0x67, 0xFF, 0x4D, 0x5D, 0x66, 
-  0x1D, 0xD0, 0x45, 0x1B, 0xF9, 0x23, 0x5F, 0xCF, 0x18, 0xFB, 
-  0x3F, 0x13, 0x0A, 0x2E, 0x86, 0xC4, 0x44, 0x28, 0xAB, 0x72, 
-  0x78, 0x77, 0x14, 0xCA, 0x70, 0xBF, 0x3E, 0x79, 0x47, 0xAB, 
-  0x3D, 0x22, 0xB9, 0x57, 0xB8, 0x04, 0x4B, 0x62, 0x2A, 0x26, 
-  0x4C, 0xEE, 0x80, 0xF4, 0x1C, 0x5C, 0xE3, 0xFF, 0x23, 0xC8, 
-  0x7C, 0x27, 0x90, 0xC8, 0x61, 0xC3, 0x7C, 0xC8, 0x5B, 0x46, 
-  0xB8, 0xCC, 0x8A, 0x67, 0xFC, 0xB9, 0xF1, 0xE7, 0x21, 0x68, 
-  0x47, 0x37, 0x9D, 0xEB, 0x14, 0xC4, 0x55, 0x02, 0x43, 0xA6, 
-  0xAA, 0x50, 0xE2, 0x78, 0x66, 0xE9, 0x55, 0x2D, 0x4C, 0x84, 
-  0xDF, 0x81, 0xCF, 0x0C, 0xD4, 0x36, 0xCA, 0x3D, 0xF7, 0xEE, 
-  0x2A, 0x5D, 0x10, 0xC9, 0xEA, 0x19, 0xF2, 0xF3, 0xBD, 0x42, 
-  0xA9, 0xE1, 0xA6, 0xD1, 0x84, 0xE9, 0x1A, 0x26, 0xDC, 0xBE, 
-  0x72, 0x43, 0xC7, 0x79, 0x92, 0xD9, 0x5F, 0x7C, 0x42, 0xCD, 
-  0xFF, 0x76, 0xBE, 0xB9, 0x99, 0x60, 0x6B, 0x5E, 0xAD, 0xAC, 
-  0x62, 0xAD, 0xFD, 0x58, 0x1C, 0x4E, 0xC6, 0x6D, 0xE7, 0xF9, 
-  0x2E, 0xD1, 0xEC, 0x9F, 0x98, 0xAE, 0x4F, 0xB6, 0xE1, 0xB3, 
-  0x77, 0xDD, 0xA4, 0x5D, 0x24, 0x76, 0xF0, 0xED, 0xBE, 0x19, 
-  0xB1, 0x98, 0x85, 0x08, 0xAB, 0xF0, 0x39, 0x94, 0x1D, 0x12, 
-  0xCA, 0x8B, 0xD2, 0xCC, 0x97, 0x44, 0xCB, 0x89, 0x9B, 0x66, 
-  0x50, 0x51, 0x64, 0x9E, 0xB1, 0x9E, 0x2C, 0xAA, 0xE5, 0x91, 
-  0x59, 0x53, 0xB1, 0x5E, 0xB3, 0xBB, 0x99, 0x00, 0x53, 0xA9, 
-  0xC1, 0x6C, 0x59, 0x46, 0xFD, 0xCB, 0x53, 0x83, 0xDD, 0x37, 
-  0xA1, 0xA3, 0x65, 0x26, 0xC6, 0x48, 0x6D, 0x15, 0xE8, 0xC1, 
-  0xE3, 0x45, 0x10, 0x6E, 0x8A, 0xE1, 0xDB, 0x10, 0xDB, 0x58, 
-  0x16, 0x5C, 0x31, 0x2E, 0x06, 0xA8, 0xAE, 0xD7, 0xB2, 0x11, 
-  0x55, 0x07, 0x2E, 0x57, 0x57, 0x02, 0x48, 0xC0, 0x8B, 0x59, 
-  0x8C, 0xBE, 0x1A, 0x47, 0x52, 0x3E, 0xD0, 0x05, 0xEA, 0xBC, 
-  0x86, 0xEA, 0x31, 0xD9, 0x58, 0x52, 0xCF, 0x7D, 0xD2, 0x30, 
-  0x4E, 0x0D, 0x24, 0x6F, 0x39, 0xF6, 0xEB, 0xC8, 0x5D, 0xE4, 
-  0xFF, 0x8D, 0xB9, 0x71, 0x02, 0x71, 0x67, 0x89, 0xFA, 0xB8, 
-  0x4F, 0xC9, 0x77, 0x78, 0x60, 0x36, 0xDF, 0x0E, 0x96, 0xAC, 
-  0x4F, 0x44, 0x8A, 0x2C, 0xE5, 0x8C, 0xC3, 0x96, 0x79, 0xE2, 
-  0x43, 0x75, 0xF5, 0x59, 0xC0, 0x81, 0x0A, 0x54, 0xC2, 0xA3, 
-  0x28, 0x8A, 0x32, 0xCE, 0x91, 0x5A, 0x91, 0x06, 0x45, 0xEB, 
-  0x34, 0x1A, 0x87, 0xF9, 0x57, 0x91, 0x0D, 0x34, 0x7F, 0x82, 
-  0x91, 0x82, 0xC5, 0x26, 0xCB, 0xB3, 0x4F, 0xF2, 0x20, 0x6A, 
-  0x02, 0x95, 0x73, 0x7B, 0x4F, 0x4E, 0xAF, 0x8A, 0x40, 0x83, 
-  0xFE, 0xF9, 0xD2, 0xFD, 0x02, 0x26, 0xC0, 0x00, 0x02, 0x0E, 
-  0xA2, 0xA8, 0x59, 0xF0, 0x82, 0x17, 0x4C, 0x0E, 0xF3, 0x83, 
-  0xA1, 0xB6, 0x36, 0x83, 0xCB, 0xFB, 0xA2, 0x66, 0x53, 0x65, 
-  0x40, 0x40, 0xAA, 0x3D, 0x82, 0x62, 0x54, 0x0A, 0x27, 0x6A, 
-  0xD6, 0x07, 0xAF, 0x91, 0xCF, 0x9B, 0x89, 0x58, 0xBC, 0xCE, 
-  0x74, 0x87, 0x9C, 0x7E, 0x30, 0xF3, 0x06, 0x2B, 0xF1, 0xB4, 
-  0x70, 0x9D, 0xAA, 0x41, 0xD7, 0x25, 0x75, 0xE5, 0x72, 0x25, 
-  0x00, 0xC7, 0x21, 0x9D, 0xEE, 0xD1, 0x24, 0x16, 0x0B, 0x12, 
-  0x22, 0x88, 0xB8, 0x9D, 0xA5, 0x38, 0xA0, 0x50, 0x39, 0x27, 
-  0xAE, 0x10, 0xF6, 0x9A, 0x0B, 0x77, 0x56, 0x3F, 0x96, 0xDF, 
-  0x22, 0xE5, 0xEA, 0xAC, 0x8F, 0xDF, 0xDD, 0x78, 0xEF, 0x5A, 
-  0x7B, 0x50, 0x72, 0x98, 0x92, 0xDD, 0x94, 0xB5, 0xDB, 0x99, 
-  0xCE, 0xF2, 0x7A, 0xF3, 0xFA, 0x80, 0xD3, 0xCD, 0x1F, 0xCA, 
-  0xA2, 0x2E, 0x21, 0x94, 0xF2, 0xB3, 0x71, 0x7C, 0x07, 0xE6, 
-  0xB9, 0x68, 0x1E, 0x13, 0x02, 0x15, 0xC8, 0x34, 0xA0, 0xB5, 
-  0xD9, 0x95, 0x1A, 0x9B, 0x57, 0xE7, 0xAF, 0xB0, 0xE1, 0xA7, 
-  0x95, 0xF2, 0x36, 0xA3, 0xF9, 0xC5, 0x2C, 0xF0, 0xC3, 0xE1, 
-  0xD1, 0x26, 0xA1, 0x8F, 0xE6, 0x07, 0xFB, 0x1F, 0x03, 0xFF, 
-  0xA5, 0x81, 0xF5, 0x5D, 0x21, 0x3B, 0x93, 0x66, 0x1A, 0x78, 
-  0x6F, 0xD4, 0x77, 0xB3, 0x91, 0x26, 0x6F, 0x1F, 0x5A, 0x8B, 
-  0x0F, 0x07, 0xEA, 0x24, 0x5F, 0x5E, 0x68, 0x9F, 0x89, 0x75, 
-  0x00, 0x23, 0x1C, 0x80, 0x55, 0x86, 0x93, 0x58, 0x94, 0x41, 
-  0x37, 0x0D, 0x23, 0xD3, 0x09, 0x72, 0x40, 0x79, 0xA2, 0x52, 
-  0x0D, 0xA3, 0x40, 0x3F, 0x54, 0x7E, 0x59, 0x55, 0x5B, 0x7D, 
-  0x0C, 0x52, 0xAA, 0x97, 0x0C, 0xC6, 0xCB, 0x0B, 0x6C, 0x83, 
-  0x45, 0x28, 0x62, 0x09, 0x0A, 0x74, 0x27, 0x1D, 0x4D, 0x02, 
-  0x07, 0xB3, 0xA5, 0x83, 0x9A, 0x43, 0xB3, 0x68, 0xF7, 0x97, 
-  0x3E, 0xD7, 0x34, 0x04, 0x83, 0xC7, 0x6F, 0x64, 0xB8, 0x0B, 
-  0xB9, 0xE9, 0x94, 0x46, 0xB9, 0x4D, 0xA7, 0xB4, 0x26, 0xF7, 
-  0x9C, 0x05, 0x94, 0x8B, 0xBE, 0x93, 0x03, 0xA7, 0x73, 0x65, 
-  0xAB, 0xC5, 0xE1, 0x2B, 0x3B, 0x4C, 0x56, 0x1F, 0x11, 0x7B, 
-  0xD3, 0xC0, 0x77, 0x48, 0x42, 0x27, 0x8D, 0x2A, 0xAA, 0x1E, 
-  0x18, 0x41, 0x76, 0xA1, 0x80, 0x99, 0x52, 0x50, 0x66, 0x7B, 
-  0x27, 0x4B, 0x49, 0xA1, 0xE8, 0xCA, 0xF1, 0x3E, 0x60, 0x2E, 
-  0x93, 0xEF, 0x4A, 0x20, 0x3C, 0xC4, 0xBB, 0x14, 0xD3, 0x8F, 
-  0x14, 0xAF, 0xC0, 0xF8, 0x4B, 0xC6, 0x49, 0x1A, 0x3B, 0x17, 
-  0x43, 0xC2, 0xAB, 0xF0, 0x01, 0xFC, 0x6E, 0x67, 0x86, 0xAC, 
-  0xE4, 0x6F, 0xF2, 0x26, 0xF2, 0xEC, 0x15, 0xA1, 0x96, 0x81, 
-  0xDD, 0xCF, 0xCA, 0xB4, 0xE1, 0x5A, 0xA0, 0xF5, 0xBB, 0x70, 
-  0xEB, 0xF9, 0xA6, 0x28, 0x66, 0xC3, 0xBE, 0xB9, 0xBD, 0xDD, 
-  0xEF, 0x8E, 0x9E, 0x3C, 0x91, 0x50, 0x38, 0x61, 0x40, 0x25, 
-  0x4D, 0xCD, 0xA0, 0xAF, 0xFE, 0x57, 0xB8, 0x96, 0xDD, 0x2B, 
-  0x52, 0x29, 0x91, 0x7A, 0x31, 0xE8, 0x9A, 0xBB, 0xC9, 0x70, 
-  0x2B, 0xE1, 0x40, 0x3A, 0x9F, 0xB7, 0x31, 0xBE, 0xE5, 0x46, 
-  0xDA, 0x8A, 0xDE, 0x13, 0x22, 0x87, 0x70, 0xFE, 0x96, 0x40, 
-  0x9F, 0xC1, 0x2B, 0xFE, 0x83, 0x31, 0xE9, 0xA5, 0x4C, 0x37, 
-  0xEB, 0xFD, 0xFB, 0x2C, 0xBD, 0x0C, 0x1F, 0xB2, 0x62, 0x32, 
-  0x0E, 0x76, 0x9A, 0x2C, 0xC2, 0x84, 0x34, 0xA0, 0x6D, 0x72, 
-  0x21, 0x47, 0xF9, 0x3E, 0xC6, 0x5C, 0xEE, 0xB6, 0xE1, 0xD9, 
-  0x2E, 0xDF, 0x50, 0xD6, 0x2C, 0x9B, 0x44, 0xBE, 0xF0, 0x01, 
-  0x8E, 0xB4, 0x34, 0x38, 0x9C, 0x6C, 0x3E, 0x26, 0xB2, 0x4C, 
-  0x8E, 0xF0, 0x41, 0x2F, 0x07, 0x0E, 0xE9, 0x69, 0x1C, 0x0A, 
-  0x00, 0x05, 0xB0, 0x09, 0xA7, 0x07, 0x18, 0x41, 0xD1, 0xF7, 
-  0x22, 0xE4, 0x85, 0x64, 0xB7, 0x83, 0xF7, 0xB1, 0xE2, 0xAC, 
-  0x2E, 0xD9, 0x83, 0x81, 0x18, 0xCB, 0xBD, 0xEE, 0xD9, 0x09, 
-  0x99, 0xBA, 0x95, 0x66, 0x1F, 0xBA, 0x02, 0x26, 0xC0, 0x00, 
-  0x02, 0x67, 0x72, 0x24, 0xB5, 0xFE, 0x8C, 0x50, 0x84, 0x47, 
-  0x41, 0x6A, 0x29, 0x1F, 0x17, 0xB2, 0x9E, 0x02, 0x67, 0x70, 
-  0x55, 0x03, 0x3F, 0x8F, 0x07, 0x20, 0x91, 0x6B, 0x22, 0x7F, 
-  0x06, 0xC3, 0xC9, 0x0A, 0xB5, 0x07, 0x0D, 0x91, 0x5F, 0x87, 
-  0x6D, 0xE2, 0xEE, 0x2B, 0x01, 0xE7, 0x45, 0x3F, 0x89, 0x1C, 
-  0x8B, 0x12, 0x33, 0x23, 0x61, 0x64, 0x3F, 0x4B, 0xF1, 0x27, 
-  0x0E, 0x8B, 0x7B, 0x7E, 0x64, 0x2E, 0xDE, 0xE0, 0x3F, 0x3E, 
-  0x5C, 0xAE, 0x8C, 0x73, 0xB2, 0x8B, 0x62, 0x0F, 0xF9, 0xEB, 
-  0xF0, 0x74, 0xBD, 0xB9, 0xCC, 0x43, 0x80, 0xC3, 0x05, 0x31, 
-  0x53, 0x6F, 0x72, 0x42, 0x8E, 0x14, 0xAD, 0xF0, 0x45, 0x36, 
-  0x88, 0xE4, 0xF9, 0x0F, 0xD9, 0xCA, 0x1E, 0x82, 0xC2, 0x89, 
-  0x44, 0xC3, 0x69, 0xC6, 0xDD, 0x27, 0xB5, 0xCA, 0xCF, 0x56, 
-  0x23, 0x5D, 0x50, 0xF9, 0x69, 0x87, 0xCF, 0x4D, 0x2F, 0xA8, 
-  0xEE, 0xD4, 0x55, 0x2A, 0xC7, 0x3A, 0x2D, 0x03, 0xCD, 0x38, 
-  0xDE, 0x4F, 0x29, 0x91, 0x14, 0xAD, 0x39, 0x05, 0x77, 0x5F, 
-  0x41, 0x48, 0x30, 0x63, 0xE6, 0x81, 0x40, 0x68, 0x75, 0x8D, 
-  0xC5, 0x70, 0x2D, 0xC9, 0xB9, 0x10, 0x75, 0xF3, 0x28, 0x91, 
-  0x99, 0x97, 0x16, 0x2E, 0x7C, 0xAD, 0x50, 0x80, 0x40, 0x00, 
-  0xEE, 0x8F, 0x59, 0xA1, 0x8F, 0x82, 0xDE, 0x1E, 0xDB, 0x56, 
-  0xA1, 0xD6, 0x2E, 0x06, 0x9D, 0x42, 0xCF, 0xA0, 0xB7, 0x1F, 
-  0x37, 0x22, 0x02, 0x2E, 0x33, 0xAE, 0xE4, 0x7B, 0x7C, 0xC6, 
-  0x11, 0x5E, 0xF6, 0xA5, 0x5B, 0x54, 0x8B, 0x28, 0x54, 0x01, 
-  0x4C, 0x41, 0x49, 0x8E, 0xAD, 0x22, 0xBB, 0x67, 0x7A, 0xF3, 
-  0xEC, 0xE3, 0x93, 0xE4, 0x3A, 0x71, 0xB2, 0x82, 0xC4, 0x8A, 
-  0x7B, 0x99, 0xA7, 0x6B, 0x69, 0x28, 0xE3, 0xC5, 0x89, 0xF7, 
-  0x3E, 0xF3, 0xC5, 0xB2, 0x40, 0x91, 0xF8, 0x6A, 0xE3, 0x63, 
-  0xB1, 0x5C, 0xE3, 0x79, 0xFF, 0x41, 0xE8, 0x2F, 0xCA, 0x11, 
-  0xA2, 0xED, 0x86, 0x59, 0x53, 0x9D, 0xF9, 0xE1, 0x15, 0x5D, 
-  0x38, 0x32, 0x69, 0x60, 0x45, 0x20, 0x74, 0xF5, 0xF6, 0x24, 
-  0xA2, 0x4E, 0xAE, 0xB5, 0x2F, 0xE2, 0xEE, 0xBD, 0xD3, 0x27, 
-  0xE1, 0x90, 0x89, 0x89, 0xA3, 0x7E, 0x2B, 0x73, 0x63, 0xB8, 
-  0x36, 0xFA, 0x17, 0x0C, 0x8F, 0x0F, 0xE8, 0xBE, 0xDC, 0x8D, 
-  0x52, 0x34, 0xB3, 0x52, 0x0E, 0xB1, 0x97, 0x8D, 0x69, 0xC8, 
-  0x27, 0x2E, 0xBC, 0xFC, 0xDB, 0x6C, 0x98, 0xE8, 0x50, 0xF1, 
-  0x7A, 0x14, 0xE7, 0xA4, 0x11, 0xD2, 0xDA, 0x71, 0xCB, 0x77, 
-  0x88, 0x7B, 0xEE, 0x24, 0x52, 0xF4, 0x83, 0x2F, 0x1B, 0x25, 
-  0x73, 0x7D, 0x57, 0xAE, 0x78, 0x42, 0xC7, 0x7F, 0x84, 0xDB, 
-  0x67, 0x7A, 0x81, 0xAB, 0xB5, 0xC4, 0x41, 0x38, 0xA0, 0x8D, 
-  0x8C, 0x50, 0x1F, 0x56, 0xF6, 0x9A, 0x2B, 0x57, 0x89, 0x20, 
-  0xA9, 0xE9, 0x1E, 0x55, 0x22, 0xD7, 0x88, 0xFA, 0x5D, 0x5F, 
-  0x51, 0x5C, 0x7C, 0x17, 0x6E, 0x1D, 0x1A, 0xE3, 0xE6, 0x24, 
-  0x67, 0xFE, 0xAA, 0xEF, 0x28, 0x25, 0xCA, 0xD7, 0x9B, 0x44, 
-  0x3A, 0x55, 0x6B, 0x2E, 0xDE, 0x7D, 0xD0, 0x1E, 0x16, 0xD6, 
-  0xA5, 0xA6, 0x97, 0xE0, 0x35, 0x90, 0x13, 0xD4, 0x16, 0x53, 
-  0xA2, 0x66, 0xCB, 0x12, 0xEE, 0xED, 0xA1, 0x42, 0x2C, 0x6A, 
-  0xF5, 0x13, 0x63, 0x5B, 0x2A, 0x0C, 0x8C, 0x3A, 0xC4, 0xAA, 
-  0x77, 0xFD, 0x03, 0x29, 0x47, 0x2E, 0x4E, 0xCE, 0x26, 0x2E, 
-  0xE2, 0x87, 0xD5, 0x49, 0xBE, 0xCE, 0x07, 0x71, 0x8F, 0xBB, 
-  0xDF, 0x5E, 0x73, 0x17, 0x28, 0x1B, 0x34, 0x55, 0xA2, 0xB1, 
-  0x99, 0x72, 0x90, 0xFD, 0xDF, 0xB3, 0xC7, 0x63, 0xFE, 0x1B, 
-  0x75, 0x6B, 0x6D, 0x73, 0xDE, 0x21, 0xD0, 0x18, 0xBE, 0x87, 
-  0xE8, 0xDA, 0x74, 0x1E, 0x78, 0x65, 0x6D, 0x30, 0x3B, 0xF1, 
-  0xEF, 0xE3, 0x32, 0xD6, 0xF8, 0x77, 0x31, 0xAB, 0x72, 0x72, 
-  0xF1, 0x43, 0x5C, 0x9F, 0xF1, 0x99, 0xA9, 0xB7, 0xD6, 0xEA, 
-  0x12, 0x4C, 0x96, 0x7E, 0x87, 0x76, 0xD2, 0xAB, 0x02, 0x26, 
-  0xC0, 0x00, 0x02, 0x91, 0x0F, 0xB9, 0x72, 0xF7, 0x06, 0x0A, 
-  0x2A, 0x92, 0x77, 0x84, 0x0C, 0xBE, 0x44, 0x6D, 0x58, 0x6C, 
-  0xBC, 0xE0, 0x19, 0x8A, 0xFC, 0x4C, 0x93, 0xDD, 0xB7, 0xC5, 
-  0x45, 0xBF, 0x0A, 0x66, 0x29, 0xEF, 0x95, 0x78, 0x07, 0x6D, 
-  0xD0, 0xAA, 0x6C, 0x32, 0xE9, 0xF8, 0xEA, 0x1A, 0x74, 0x79, 
-  0x51, 0x39, 0x25, 0xCB, 0x00, 0x7C, 0xD0, 0xE7, 0xBB, 0xC4, 
-  0x09, 0xC2, 0xFC, 0x0F, 0xA2, 0x29, 0x45, 0x30, 0x3F, 0x89, 
-  0x76, 0x36, 0xF2, 0x92, 0xAF, 0xAF, 0x60, 0xC3, 0x93, 0x3E, 
-  0x55, 0x6B, 0x87, 0xAE, 0xBF, 0x6E, 0x2C, 0x54, 0xFD, 0xAF, 
-  0x74, 0x4F, 0x0F, 0xAA, 0xC7, 0x4F, 0x4C, 0x6B, 0x18, 0xFE, 
-  0xC6, 0x84, 0x27, 0xC0, 0x78, 0xD2, 0xD9, 0xE3, 0x7B, 0x41, 
-  0x1C, 0x1C, 0xBF, 0xDA, 0xDF, 0xCC, 0x49, 0x41, 0xC0, 0xC0, 
-  0x65, 0xE0, 0x8F, 0x44, 0x19, 0xE4, 0x78, 0xAD, 0xCD, 0xC5, 
-  0x5A, 0x9D, 0x11, 0x22, 0x43, 0xD7, 0x6E, 0x39, 0xD5, 0x2B, 
-  0xA7, 0x73, 0x3F, 0x99, 0xA8, 0xA3, 0x02, 0x73, 0x99, 0xF0, 
-  0x62, 0x87, 0xF4, 0x8B, 0xD7, 0x4F, 0x47, 0x9C, 0x18, 0x72, 
-  0x98, 0xB0, 0x33, 0x1B, 0x5E, 0x29, 0x04, 0xEA, 0x71, 0x6B, 
-  0x45, 0xCB, 0xC0, 0x9E, 0x15, 0x6E, 0x92, 0xDA, 0x50, 0xC3, 
-  0x58, 0x07, 0x29, 0x5E, 0xC5, 0xBD, 0x3B, 0xCE, 0xAC, 0x11, 
-  0xE5, 0xBB, 0x3D, 0x7E, 0xB8, 0xC3, 0x1F, 0x94, 0x9F, 0xD9, 
-  0x63, 0x35, 0x56, 0x23, 0x45, 0xAF, 0x23, 0xF0, 0x0B, 0x7B, 
-  0xE3, 0xFB, 0x81, 0x2E, 0xD3, 0x20, 0xE3, 0x1D, 0x97, 0x84, 
-  0xC1, 0x88, 0x77, 0x87, 0x3C, 0xAB, 0xE9, 0x1E, 0x69, 0x04, 
-  0x7D, 0x7B, 0xE6, 0x6B, 0xDB, 0xE9, 0xF2, 0xB6, 0x66, 0x10, 
-  0x0F, 0x4D, 0x57, 0x3F, 0xF5, 0x3E, 0xDA, 0xEA, 0xBC, 0xD4, 
-  0x5B, 0xA1, 0x20, 0xB0, 0x69, 0xC0, 0x8A, 0xA1, 0x28, 0xC0, 
-  0xEF, 0xFE, 0x2D, 0x0B, 0xF8, 0x06, 0x23, 0x4B, 0x1C, 0x77, 
-  0x0A, 0x10, 0xBF, 0xA7, 0xD9, 0x24, 0x9E, 0xA2, 0x1B, 0x90, 
-  0x6C, 0xFD, 0x85, 0x3A, 0xD3, 0xC6, 0x39, 0xA7, 0xA2, 0x28, 
-  0xC5, 0xC1, 0x2F, 0xD2, 0x28, 0xDC, 0x4F, 0x63, 0x0D, 0x6B, 
-  0x54, 0xB4, 0x27, 0x95, 0xC3, 0xC1, 0xE0, 0x08, 0xB0, 0x9D, 
-  0x7F, 0x6C, 0xFE, 0xF5, 0x65, 0xCE, 0x0E, 0xCE, 0x24, 0xCD, 
-  0xAE, 0x4C, 0x0F, 0x82, 0x54, 0x48, 0xAF, 0x37, 0xAE, 0x64, 
-  0x31, 0x07, 0xEE, 0xE6, 0x6B, 0xEF, 0xAF, 0x7F, 0x2A, 0x07, 
-  0x2E, 0xB6, 0xD0, 0xAC, 0x70, 0x87, 0x19, 0x9E, 0xD3, 0xFB, 
-  0x89, 0xBD, 0xBA, 0xFF, 0xB9, 0x92, 0x4B, 0x25, 0x65, 0xA3, 
-  0x09, 0xCD, 0xFE, 0x32, 0x19, 0xF3, 0xF4, 0x05, 0xA4, 0x13, 
-  0xDF, 0x65, 0xA3, 0x4C, 0xE8, 0xF3, 0x3C, 0xA3, 0x11, 0x95, 
-  0xEA, 0xC3, 0x34, 0xCA, 0xC6, 0xB9, 0x34, 0x6B, 0x53, 0x18, 
-  0xCC, 0xF9, 0x44, 0x28, 0x1E, 0x90, 0x74, 0xA6, 0xB1, 0x59, 
-  0x4D, 0xAE, 0x18, 0x53, 0x1D, 0x60, 0xCF, 0xCC, 0x15, 0xDA, 
-  0x4E, 0x2B, 0x6F, 0x8F, 0x4E, 0x39, 0x89, 0xE3, 0x67, 0x05, 
-  0xB5, 0x9C, 0x36, 0x5B, 0x3C, 0xA0, 0x9F, 0x46, 0x24, 0xE7, 
-  0x61, 0x42, 0x1C, 0xA7, 0xD7, 0x27, 0x5B, 0x5C, 0xF5, 0xFD, 
-  0x5F, 0x03, 0x79, 0x5F, 0x36, 0xA0, 0x85, 0x13, 0x40, 0x48, 
-  0x8C, 0x44, 0xB4, 0x64, 0x54, 0x83, 0xD8, 0xB6, 0x83, 0xB8, 
-  0x4E, 0x46, 0xCF, 0x98, 0xA5, 0x1C, 0xAA, 0xF0, 0x03, 0xD6, 
-  0x26, 0x80, 0x0F, 0x2A, 0xC5, 0xF4, 0xD1, 0x28, 0x0C, 0x5F, 
-  0xF8, 0x63, 0x8D, 0x68, 0x26, 0x3A, 0xE5, 0x5D, 0xAE, 0x17, 
-  0x64, 0xF2, 0x60, 0x73, 0x6D, 0xBD, 0x75, 0x90, 0xD2, 0x50, 
-  0xC4, 0x9A, 0x4C, 0x3E, 0x4B, 0xAE, 0x57, 0xBE, 0xCD, 0x42, 
-  0xC1, 0xA7, 0xCB, 0xAD, 0x73, 0x15, 0xF6, 0x69, 0x36, 0xB5, 
-  0xC3, 0x15, 0x1D, 0xC0, 0x09, 0x4B, 0x6B, 0x4F, 0xA3, 0xD2, 
-  0xAF, 0x9E, 0xF4, 0x9A, 0xC1, 0x5F, 0xF5, 0x0A, 0x95, 0x93, 
-  0xA4, 0x57, 0xA9, 0x61, 0x8D, 0x98, 0xB1, 0x19, 0xCC, 0x95, 
-  0x02, 0x26, 0xC0, 0x00, 0x02, 0x6E, 0x4C, 0x0F, 0xB4, 0x2D, 
-  0xBC, 0x3A, 0x51, 0xAE, 0x16, 0xBA, 0xEC, 0x72, 0x04, 0x3E, 
-  0x8D, 0x3D, 0x4E, 0x0E, 0x29, 0x4B, 0x6F, 0x00, 0xF5, 0xE2, 
-  0x12, 0x0B, 0xAC, 0x73, 0x7E, 0xA5, 0x12, 0x8D, 0x59, 0x45, 
-  0x73, 0xC8, 0xB9, 0x57, 0xCB, 0x78, 0xAD, 0xA3, 0xBD, 0x95, 
-  0x18, 0x04, 0x86, 0xB9, 0xFE, 0x9F, 0xBF, 0x67, 0x03, 0x08, 
-  0xA9, 0x91, 0xF3, 0x71, 0x1A, 0x6C, 0xD2, 0x74, 0xAA, 0x40, 
-  0xCC, 0x30, 0x7D, 0x0B, 0x78, 0xEF, 0xC7, 0xDC, 0x95, 0xC3, 
-  0x29, 0x5D, 0x18, 0xBC, 0x38, 0x7C, 0xFE, 0x65, 0xEF, 0x44, 
-  0xF0, 0x61, 0x91, 0x3E, 0x59, 0x75, 0x96, 0x84, 0x75, 0xD9, 
-  0xA2, 0x99, 0xDB, 0xFA, 0x9B, 0x7D, 0x09, 0x06, 0x8D, 0xDA, 
-  0xCC, 0xA1, 0x6E, 0x2E, 0xDB, 0x12, 0x83, 0xA6, 0x2E, 0x9C, 
-  0xC8, 0x5A, 0xE9, 0xBB, 0xC3, 0x70, 0x16, 0x0C, 0x6E, 0x2A, 
-  0xDA, 0xD0, 0xDF, 0xF4, 0xAF, 0xAA, 0x42, 0x0A, 0x16, 0x8C, 
-  0x73, 0xAA, 0xAD, 0x75, 0x7B, 0xCC, 0x29, 0xB5, 0x18, 0xB9, 
-  0x58, 0xBF, 0xDB, 0x91, 0x44, 0x74, 0x25, 0x3E, 0x54, 0xC3, 
-  0x2D, 0x8A, 0x2E, 0x85, 0xD0, 0x92, 0x02, 0xAE, 0xA1, 0xF9, 
-  0x70, 0xC5, 0x33, 0x49, 0x57, 0xE1, 0x90, 0x48, 0x54, 0x73, 
-  0x04, 0xAD, 0x1E, 0x41, 0xE8, 0xD7, 0x24, 0xFE, 0x85, 0x83, 
-  0x47, 0x0F, 0x9C, 0x33, 0xF9, 0xF5, 0x10, 0xAD, 0x42, 0xFA, 
-  0x7B, 0xE7, 0x1C, 0x35, 0xB3, 0x8D, 0x0E, 0x2E, 0xD7, 0xCB, 
-  0x40, 0x32, 0x9C, 0x64, 0x3A, 0x68, 0x33, 0xF3, 0xBE, 0xD9, 
-  0xCD, 0xC9, 0x73, 0xEB, 0x67, 0x6E, 0x52, 0x25, 0x2F, 0xD9, 
-  0x7A, 0x93, 0x8B, 0x1D, 0x9D, 0xB2, 0xAF, 0xF3, 0xEE, 0x6F, 
-  0xB5, 0xC7, 0x8F, 0xD5, 0x4F, 0xC9, 0x7C, 0xAC, 0x05, 0x9A, 
-  0x16, 0x82, 0x04, 0xC4, 0xF5, 0x47, 0xD7, 0x61, 0xC7, 0xBC, 
-  0x8D, 0x76, 0xA9, 0xFA, 0xA6, 0x17, 0x32, 0x3A, 0x2C, 0x93, 
-  0x4D, 0x0B, 0x57, 0x50, 0xF5, 0xD8, 0xE6, 0xB2, 0x52, 0x4F, 
-  0xE5, 0x1F, 0xDB, 0xA0, 0x17, 0xEF, 0x44, 0x9A, 0x8D, 0xBF, 
-  0x8D, 0xB4, 0x66, 0x11, 0xF2, 0xB1, 0x51, 0x50, 0xB4, 0xDE, 
-  0xE0, 0x30, 0x5B, 0x1F, 0x92, 0xAC, 0x30, 0x43, 0xB3, 0x1F, 
-  0x32, 0xDC, 0x84, 0x2F, 0x29, 0xE9, 0x78, 0xBC, 0x5A, 0xA2, 
-  0x9A, 0xA8, 0xFC, 0xE2, 0xB4, 0xE7, 0x8C, 0xCC, 0x65, 0xA9, 
-  0x37, 0x85, 0xD8, 0x0B, 0xB3, 0xA3, 0x4F, 0x28, 0xBE, 0x4D, 
-  0x45, 0x97, 0xAA, 0x2E, 0xEC, 0x6D, 0x4C, 0x9E, 0x19, 0x5F, 
-  0xD1, 0x47, 0x87, 0x8A, 0x76, 0xCF, 0x20, 0xCC, 0xDC, 0xC5, 
-  0x37, 0xDD, 0x45, 0xE8, 0x13, 0xFD, 0x72, 0x92, 0x7E, 0x97, 
-  0xA4, 0xA7, 0x58, 0xC1, 0x0E, 0xB6, 0x9E, 0x20, 0xCC, 0xD3, 
-  0x5F, 0x94, 0x25, 0xD3, 0xB8, 0xB0, 0x51, 0x82, 0x45, 0x64, 
-  0x4B, 0x6D, 0xCB, 0x9F, 0xC6, 0x5F, 0xDD, 0x1D, 0x1B, 0xB0, 
-  0x7D, 0xEB, 0xEC, 0x85, 0xB0, 0x90, 0x36, 0xE0, 0xE5, 0x5F, 
-  0x66, 0xA3, 0x69, 0x72, 0x2C, 0x35, 0x52, 0x45, 0x8A, 0xD9, 
-  0x31, 0xCB, 0xD9, 0xDD, 0xF0, 0x62, 0x6A, 0x4B, 0x47, 0xEF, 
-  0x13, 0xD7, 0x65, 0x17, 0xC4, 0xE9, 0xD1, 0xA3, 0xF4, 0x5E, 
-  0x17, 0x73, 0x4C, 0xA5, 0x81, 0xD7, 0xBD, 0xB3, 0x34, 0x98, 
-  0x61, 0x01, 0x50, 0x1D, 0x7D, 0x7A, 0x82, 0x38, 0x93, 0x9F, 
-  0x0A, 0xAC, 0x42, 0x5B, 0x10, 0x4C, 0x57, 0x10, 0x4A, 0x97, 
-  0xD3, 0xCC, 0x8F, 0x23, 0xD1, 0xA6, 0xCB, 0xAD, 0x47, 0x8F, 
-  0x41, 0x24, 0x2B, 0xEB, 0xB9, 0x0B, 0x71, 0x1C, 0x27, 0x31, 
-  0x91, 0x21, 0x77, 0xA2, 0x01, 0x2D, 0x6F, 0x9B, 0x99, 0x5F, 
-  0xAC, 0xD4, 0x8E, 0x1D, 0xBB, 0x2C, 0xA3, 0xA1, 0xA2, 0xC3, 
-  0x2A, 0xAD, 0x6B, 0xA4, 0x62, 0xAA, 0xAE, 0xEA, 0xEE, 0x10, 
-  0x30, 0xB3, 0x9E, 0x2A, 0x13, 0x09, 0xF8, 0xC4, 0x2B, 0x8C, 
-  0xE1, 0x51, 0x62, 0xE7, 0x5D, 0xE8, 0x00, 0x50, 0x46, 0x7E, 
-  0xC7, 0x9A, 0x3F, 0x21, 0xD9, 0x0C, 0xB3, 0xA7, 0x2E, 0x5F, 
-  0x4B, 0x42, 0x02, 0x26, 0xC0, 0x00, 0x02, 0x12, 0xA7, 0x07, 
-  0x49, 0x33, 0x98, 0x05, 0x3D, 0xD0, 0x14, 0xD2, 0x03, 0xA9, 
-  0xA5, 0x66, 0x6B, 0x53, 0x43, 0x97, 0x83, 0x21, 0x8F, 0x46, 
-  0x67, 0x3C, 0x86, 0xDB, 0x7B, 0xBA, 0xD2, 0xC5, 0xB4, 0x09, 
-  0x0F, 0x2D, 0xD3, 0x4E, 0xD2, 0xB7, 0xFC, 0x75, 0x52, 0x16, 
-  0x8A, 0x56, 0x5A, 0xCC, 0xE6, 0xFE, 0x5C, 0xE8, 0xAE, 0x48, 
-  0x7F, 0x81, 0xF2, 0x46, 0x00, 0xE5, 0x53, 0xAF, 0xC7, 0x01, 
-  0x12, 0x9A, 0xF9, 0xDC, 0x96, 0x79, 0xC6, 0x61, 0xC6, 0xAC, 
-  0xCE, 0x0B, 0x6C, 0x9F, 0xFD, 0x16, 0xCA, 0xD1, 0xD6, 0xAB, 
-  0xE4, 0xCB, 0x64, 0x88, 0xF7, 0x17, 0x7F, 0xCD, 0xBB, 0x8F, 
-  0xF9, 0x5C, 0x75, 0x7C, 0x3D, 0xBE, 0x03, 0x68, 0x30, 0xA8, 
-  0xC7, 0x82, 0x62, 0xDD, 0x5A, 0x42, 0x3D, 0x8D, 0x02, 0xD1, 
-  0x68, 0xF2, 0x04, 0x0B, 0xFA, 0xC2, 0x23, 0xB9, 0x26, 0xAA, 
-  0x5F, 0x43, 0x7D, 0xE5, 0xD2, 0x97, 0xB8, 0xD5, 0x6F, 0xBE, 
-  0x56, 0xC6, 0xCA, 0xE7, 0x56, 0xDA, 0x14, 0x4A, 0xA6, 0x35, 
-  0x3F, 0xBF, 0xBC, 0x9D, 0xCD, 0x51, 0x55, 0x98, 0xAB, 0xC0, 
-  0x42, 0xC8, 0x7D, 0x67, 0xB3, 0xDD, 0x2B, 0x6B, 0xA0, 0x06, 
-  0x9F, 0x13, 0x79, 0xBC, 0xE2, 0xC8, 0x9E, 0xC3, 0xFF, 0x94, 
-  0x9E, 0x3D, 0x60, 0xAE, 0xB3, 0x28, 0x44, 0xC5, 0xE1, 0xD8, 
-  0x40, 0x7F, 0xC0, 0x8F, 0x93, 0xFC, 0xDA, 0xEC, 0x70, 0x14, 
-  0xB1, 0x07, 0xA1, 0x21, 0x6D, 0xA2, 0xA3, 0xEF, 0x80, 0xF1, 
-  0xC4, 0xCC, 0xA1, 0x77, 0xD9, 0xA3, 0xD9, 0x31, 0xFB, 0xC5, 
-  0xE5, 0xDE, 0xC1, 0xF2, 0x6F, 0xFC, 0x73, 0x35, 0xC4, 0x1D, 
-  0x2C, 0x15, 0x57, 0x64, 0x57, 0x4A, 0x0D, 0x4F, 0xCB, 0xD3, 
-  0x3E, 0x12, 0x82, 0x5C, 0xFC, 0xED, 0x7B, 0xA1, 0x3F, 0x72, 
-  0x1E, 0x6B, 0x12, 0x6A, 0xB9, 0x55, 0xD2, 0xC3, 0x04, 0x52, 
-  0x01, 0xBB, 0x54, 0x20, 0x0A, 0xA5, 0xDA, 0xDD, 0x2D, 0x56, 
-  0xF4, 0xD0, 0x08, 0x62, 0x1E, 0x68, 0x30, 0x40, 0x57, 0x8A, 
-  0xC2, 0xDD, 0xBF, 0x0D, 0x7B, 0x28, 0xE0, 0x82, 0x1A, 0x3F, 
-  0xDC, 0xEA, 0x07, 0xC4, 0x32, 0x74, 0x14, 0x18, 0x9C, 0x00, 
-  0x9C, 0x91, 0xC0, 0x7A, 0x0A, 0x18, 0x89, 0xAD, 0xA8, 0x3D, 
-  0x42, 0x21, 0x0F, 0x08, 0x8D, 0xA4, 0xD5, 0xA7, 0x08, 0x09, 
-  0x3C, 0x21, 0x7E, 0x4E, 0x17, 0xB9, 0x1A, 0x80, 0x22, 0x45, 
-  0x33, 0x43, 0x24, 0xDD, 0xC4, 0x66, 0xD2, 0xB4, 0x4E, 0x40, 
-  0xD5, 0x5F, 0xEA, 0x86, 0x9F, 0x8B, 0x41, 0x9D, 0xD0, 0x96, 
-  0xC9, 0x64, 0x32, 0x39, 0xA1, 0x89, 0x56, 0x7E, 0x1D, 0x22, 
-  0x08, 0x08, 0xB5, 0x60, 0x1F, 0x52, 0x41, 0xA4, 0x8F, 0xC0, 
-  0x52, 0x6B, 0xA7, 0xBB, 0x52, 0x0E, 0x96, 0xEE, 0x62, 0x62, 
-  0x1A, 0xCF, 0x4C, 0x65, 0x59, 0x32, 0x2D, 0x3C, 0x1D, 0x40, 
-  0x57, 0xB0, 0xE9, 0xF2, 0xBA, 0x04, 0xD2, 0xBE, 0x22, 0xA9, 
-  0x93, 0x8E, 0xC2, 0x32, 0x06, 0x20, 0xDC, 0x9F, 0xE5, 0xC2, 
-  0x57, 0xFC, 0xC5, 0xDE, 0xE7, 0xD3, 0xCA, 0xB6, 0xD8, 0x85, 
-  0xB2, 0xE1, 0xAD, 0x23, 0x47, 0x02, 0x3F, 0xD7, 0xBD, 0x51, 
-  0x2A, 0x6B, 0x33, 0x2D, 0x23, 0x6D, 0xD5, 0x72, 0x1F, 0xEC, 
-  0x8F, 0x7F, 0x1B, 0x22, 0x2D, 0x9E, 0x44, 0x58, 0xE0, 0xA3, 
-  0x50, 0x54, 0xCF, 0x6B, 0x5E, 0x59, 0x7A, 0xF0, 0xDA, 0x2E, 
-  0x9C, 0xC4, 0xD3, 0xD9, 0x83, 0x56, 0xBB, 0x09, 0x58, 0xFF, 
-  0x00, 0xDD, 0xDA, 0x57, 0x5C, 0xC3, 0xED, 0x10, 0x6E, 0xD6, 
-  0xD0, 0xF0, 0xB9, 0xD1, 0x2C, 0x1E, 0x4E, 0x33, 0xA7, 0x44, 
-  0x9C, 0x87, 0xB2, 0x91, 0x16, 0x2C, 0x44, 0x1E, 0x66, 0x79, 
-  0x06, 0x12, 0x26, 0xB6, 0x36, 0x1F, 0xBA, 0x56, 0x9F, 0xAB, 
-  0x64, 0x63, 0xE4, 0x90, 0x75, 0x72, 0xF9, 0x35, 0x77, 0x2B, 
-  0x38, 0xE5, 0x4F, 0x29, 0xF1, 0x4C, 0xD8, 0xBD, 0x20, 0x60, 
-  0x65, 0x26, 0x57, 0xCE, 0x52, 0x4B, 0x18, 0xD4, 0xDF, 0xCE, 
-  0xC0, 0x78, 0x60, 0x83, 0xD4, 0xDF, 0xE9, 0xA2, 0x61, 0x37, 
-  0x78, 0x7D, 0xEB, 0xE5, 0x02, 0x26, 0xC0, 0x00, 0x02, 0x47, 
-  0xA5, 0x8E, 0xA4, 0x38, 0x2C, 0xDC, 0x61, 0xFB, 0xD1, 0x29, 
-  0xFD, 0x30, 0xA5, 0xEE, 0xB0, 0x2F, 0xF6, 0x53, 0x4B, 0x4E, 
-  0xE9, 0x26, 0x67, 0x28, 0xC0, 0x06, 0x59, 0x13, 0x88, 0xF8, 
-  0x9B, 0xE8, 0x6B, 0x9E, 0x5A, 0xCF, 0x8D, 0x8D, 0xE1, 0x80, 
-  0x1A, 0xE1, 0x4A, 0x59, 0x92, 0x6A, 0x57, 0x38, 0x79, 0x1E, 
-  0x5D, 0xA4, 0x35, 0xA5, 0xD3, 0x80, 0x41, 0x97, 0x69, 0xB7, 
-  0xDF, 0xE8, 0x07, 0xFA, 0xA6, 0x64, 0xFD, 0xB2, 0xD0, 0x66, 
-  0xB4, 0x35, 0x52, 0xCC, 0xC9, 0x82, 0xCF, 0xFA, 0xB3, 0xE0, 
-  0xE6, 0x96, 0x35, 0xEF, 0xD5, 0xF6, 0xA1, 0x0B, 0xAD, 0xE0, 
-  0x50, 0x7D, 0x9B, 0x36, 0x8D, 0xD2, 0x6E, 0x27, 0x14, 0x2D, 
-  0x6D, 0xCE, 0xC2, 0xF8, 0xDA, 0x64, 0xDC, 0xFD, 0xC8, 0x79, 
-  0x72, 0x00, 0xE3, 0xF9, 0x3F, 0x40, 0x0D, 0x0F, 0x40, 0x3A, 
-  0xE3, 0xFE, 0xEA, 0x93, 0x18, 0x7F, 0x2D, 0xFA, 0x7C, 0x6B, 
-  0xCB, 0x45, 0x8C, 0xD5, 0x8E, 0xE3, 0x95, 0x4C, 0xF9, 0x60, 
-  0x83, 0x8E, 0x07, 0xC0, 0x17, 0xE9, 0x6C, 0xAF, 0x2C, 0x08, 
-  0x04, 0xF5, 0x8B, 0xB7, 0xB8, 0x09, 0xAD, 0x91, 0x02, 0x9A, 
-  0x28, 0x25, 0xE7, 0x80, 0x5C, 0xCB, 0x69, 0xA0, 0xDA, 0x43, 
-  0x4F, 0x4C, 0x4A, 0xA1, 0xCB, 0x45, 0x0E, 0x2F, 0x87, 0x77, 
-  0x43, 0x7E, 0x0E, 0x42, 0xE7, 0x21, 0x2B, 0x73, 0x90, 0x21, 
-  0x7B, 0x9B, 0x87, 0xEC, 0x27, 0x76, 0xFF, 0x9F, 0xEB, 0x79, 
-  0xF9, 0x70, 0xE6, 0x73, 0x51, 0x4B, 0x8D, 0xE4, 0xB6, 0x76, 
-  0xFF, 0x23, 0x71, 0xD9, 0x87, 0x43, 0x29, 0xE4, 0xA0, 0xDE, 
-  0xB7, 0xCF, 0x92, 0x03, 0x84, 0x07, 0x17, 0xA1, 0xE6, 0x7B, 
-  0x43, 0x14, 0xA3, 0x30, 0xC0, 0x1B, 0x44, 0x91, 0xCF, 0x80, 
-  0x48, 0x92, 0x2B, 0x6D, 0x59, 0x8E, 0x63, 0x8C, 0xE8, 0xC3, 
-  0xA9, 0x04, 0x33, 0x3F, 0x75, 0x6A, 0x2B, 0x7B, 0xEC, 0x74, 
-  0x26, 0xAD, 0x34, 0x68, 0xB9, 0x9F, 0x63, 0xEE, 0xEA, 0x42, 
-  0x0D, 0xC7, 0x24, 0x7B, 0xD4, 0x5E, 0x5A, 0x91, 0xF1, 0x41, 
-  0x2E, 0x6B, 0x0D, 0xB9, 0x75, 0xCE, 0x51, 0x1E, 0x6E, 0xF2, 
-  0x6B, 0x9C, 0xD4, 0xBD, 0xAF, 0x54, 0x63, 0x1A, 0xA0, 0x29, 
-  0x65, 0x22, 0x04, 0x9D, 0xE2, 0x6F, 0x37, 0x4B, 0xC2, 0xC2, 
-  0x62, 0x1B, 0x94, 0xE0, 0xF9, 0xC8, 0xB0, 0x94, 0x43, 0x29, 
-  0x0D, 0x4F, 0x23, 0x4A, 0xBA, 0x83, 0x15, 0x97, 0x96, 0xC8, 
-  0x0A, 0x85, 0xD2, 0x80, 0x8B, 0x0C, 0x16, 0x57, 0x32, 0xCA, 
-  0xA4, 0xF6, 0x20, 0xB5, 0x49, 0x30, 0xCC, 0xD3, 0x1C, 0xAB, 
-  0xE0, 0xAE, 0x52, 0x7B, 0x71, 0x40, 0x80, 0xAC, 0x30, 0x78, 
-  0xEE, 0x5A, 0xD3, 0x82, 0x3F, 0x51, 0x34, 0xE8, 0x38, 0xD4, 
-  0x8D, 0x09, 0xEB, 0xDC, 0x9E, 0x82, 0xF7, 0xE2, 0xAA, 0xCD, 
-  0x2D, 0x17, 0x0C, 0x08, 0x22, 0xAF, 0xED, 0xE4, 0xC0, 0xC1, 
-  0xBB, 0x9C, 0x47, 0xC1, 0x23, 0x81, 0x03, 0x85, 0xDD, 0x00, 
-  0x5C, 0x4D, 0x7F, 0xF1, 0x02, 0xF8, 0xA9, 0xA1, 0x8E, 0xB1, 
-  0xCD, 0xFC, 0x6F, 0xC5, 0x0D, 0x37, 0xD9, 0x83, 0x15, 0x23, 
-  0x14, 0x03, 0x54, 0x37, 0xFC, 0xAC, 0xB6, 0xC8, 0x0A, 0x47, 
-  0x3F, 0x22, 0x6F, 0xD7, 0xFA, 0xBB, 0x8D, 0x17, 0xB2, 0x7C, 
-  0x0F, 0x65, 0xB4, 0xA2, 0x3A, 0x5F, 0x55, 0x34, 0xEC, 0xCA, 
-  0x89, 0xDD, 0xD4, 0x44, 0x77, 0x30, 0x9A, 0x20, 0x6A, 0x1A, 
-  0x9D, 0xBE, 0x39, 0x25, 0x2E, 0xE2, 0x0C, 0xDD, 0xE0, 0x50, 
-  0x8F, 0xD7, 0x38, 0x01, 0xB1, 0x25, 0xC1, 0xFD, 0x06, 0xD0, 
-  0x60, 0xC9, 0xEB, 0x1D, 0x77, 0x6D, 0xA2, 0x18, 0xB2, 0x0B, 
-  0x03, 0xE6, 0xF7, 0x07, 0x51, 0xFC, 0xAF, 0xE9, 0xD4, 0xFC, 
-  0x80, 0x69, 0x1C, 0xE1, 0x82, 0x96, 0x39, 0x37, 0xC1, 0xD3, 
-  0xB1, 0x81, 0x62, 0xB7, 0x20, 0x7F, 0xDF, 0xB7, 0x84, 0xD2, 
-  0xCC, 0xFB, 0x7E, 0x90, 0xBB, 0x05, 0x1B, 0x81, 0xA2, 0xE0, 
-  0x66, 0x11, 0x8A, 0x37, 0x93, 0x0F, 0x67, 0x81, 0x77, 0x03, 
-  0xA6, 0xE2, 0x52, 0xB6, 0x0F, 0x9A, 0x02, 0x26, 0xC0, 0x00, 
-  0x02, 0x1D, 0x9D, 0x63, 0xD2, 0x5B, 0xB0, 0x79, 0x8A, 0xF4, 
-  0x7F, 0x08, 0x9B, 0x5E, 0xAB, 0x6E, 0xD1, 0xCC, 0x2B, 0x7C, 
-  0xFF, 0x0D, 0x0E, 0xDD, 0x5F, 0xAA, 0x4C, 0x53, 0x45, 0x53, 
-  0x48, 0xCD, 0xCD, 0xF7, 0xBA, 0x5B, 0xB9, 0x84, 0xBB, 0x00, 
-  0xC2, 0xF0, 0xFB, 0x30, 0x5F, 0x04, 0x4E, 0x25, 0x4C, 0x06, 
-  0x03, 0x8D, 0xC5, 0x37, 0xA6, 0x9D, 0x1C, 0xD8, 0x13, 0xA7, 
-  0x96, 0xBE, 0xED, 0x22, 0xD7, 0xBA, 0x9F, 0x4C, 0x2E, 0xF9, 
-  0xD0, 0x5B, 0xBB, 0xF8, 0xB8, 0x0A, 0xF3, 0xEC, 0x31, 0x3F, 
-  0x84, 0x6E, 0x3A, 0x12, 0x8B, 0x6A, 0x2E, 0x28, 0xCE, 0xB8, 
-  0x1A, 0xC6, 0xE6, 0x4A, 0xD9, 0x74, 0x04, 0x24, 0xD8, 0x79, 
-  0x8D, 0x62, 0x0C, 0xB0, 0xAE, 0xAF, 0x67, 0xB4, 0xA1, 0x3D, 
-  0x93, 0x1D, 0xA2, 0x52, 0x98, 0x3F, 0x57, 0x73, 0x94, 0xB6, 
-  0x94, 0xBD, 0x0F, 0x42, 0x6A, 0x64, 0x7B, 0x17, 0xAC, 0x8D, 
-  0x46, 0xD0, 0xE4, 0x1B, 0x8C, 0x56, 0xB6, 0x47, 0xCB, 0xFD, 
-  0x56, 0x61, 0x6E, 0xA0, 0xBF, 0x6B, 0x8E, 0x68, 0x05, 0x55, 
-  0xA4, 0xB3, 0x8C, 0x76, 0x48, 0x73, 0x4C, 0x8D, 0x9D, 0xA2, 
-  0xA0, 0xA1, 0xFB, 0xD0, 0x33, 0x32, 0x39, 0xD2, 0x10, 0x1C, 
-  0x3C, 0x93, 0xC9, 0xCA, 0x6A, 0x6E, 0x7C, 0xB6, 0xF1, 0x03, 
-  0xF3, 0x45, 0x51, 0x05, 0x48, 0x30, 0xF0, 0xC6, 0x84, 0xFD, 
-  0x4E, 0x3B, 0x03, 0xE0, 0x62, 0xB8, 0x53, 0x55, 0xB6, 0xB8, 
-  0x02, 0x7C, 0xB9, 0xD5, 0x5C, 0xA2, 0x9B, 0x97, 0x8A, 0xA4, 
-  0xDF, 0x42, 0xEB, 0x91, 0x2C, 0x98, 0x82, 0xA9, 0xAE, 0xB0, 
-  0x13, 0xF6, 0x6E, 0x90, 0x42, 0xFE, 0xD3, 0xAA, 0x1E, 0xBA, 
-  0x69, 0xFC, 0xF8, 0x20, 0xEA, 0x5D, 0xA8, 0xFE, 0x64, 0x56, 
-  0x26, 0x4C, 0x6C, 0x69, 0x8F, 0xAC, 0x30, 0xCF, 0xAE, 0x8B, 
-  0xD5, 0x63, 0x10, 0xDD, 0xCE, 0x6E, 0x0C, 0xAB, 0x31, 0x46, 
-  0xDF, 0x8A, 0x33, 0x28, 0x8A, 0x1C, 0xEB, 0xBE, 0xAA, 0x71, 
-  0x44, 0x5C, 0x89, 0xEA, 0x00, 0x34, 0x23, 0xEB, 0x18, 0x83, 
-  0x7F, 0xB1, 0x9B, 0x3A, 0xBF, 0x08, 0x68, 0xB6, 0xC8, 0xE2, 
-  0xD8, 0x2D, 0x5E, 0xA2, 0x99, 0xB9, 0xBC, 0xF8, 0x31, 0xD1, 
-  0xFD, 0x31, 0xD4, 0x32, 0x05, 0x58, 0x5C, 0xFB, 0xCD, 0x8C, 
-  0xFF, 0x75, 0x99, 0x93, 0xC8, 0x0C, 0xE8, 0xE8, 0x60, 0x11, 
-  0xB8, 0x5F, 0x15, 0xB5, 0x89, 0x47, 0xE1, 0x1C, 0x23, 0x1B, 
-  0x8E, 0x56, 0x02, 0xD3, 0x5F, 0xBD, 0xA9, 0x9F, 0x67, 0x06, 
-  0xCA, 0x0C, 0x6E, 0x9C, 0xFB, 0x2D, 0x3A, 0xE3, 0xF6, 0x2C, 
-  0x72, 0x86, 0xCD, 0x68, 0xAC, 0x7B, 0x22, 0xA3, 0x01, 0x15, 
-  0x50, 0xB7, 0xA0, 0x05, 0x88, 0xD0, 0xDF, 0xBD, 0xDA, 0x3B, 
-  0xC4, 0xFF, 0x40, 0xA1, 0x46, 0x55, 0x28, 0xB3, 0x0C, 0x1E, 
-  0xF8, 0xE9, 0x0A, 0x39, 0xD1, 0x66, 0xDF, 0x5B, 0x2B, 0x2C, 
-  0xCA, 0xA5, 0x36, 0x32, 0x0D, 0xAC, 0x8E, 0xDF, 0x75, 0x9A, 
-  0xE5, 0x8B, 0xE5, 0x99, 0x6B, 0xD6, 0xB7, 0x83, 0x6B, 0xFE, 
-  0xEA, 0xC9, 0x71, 0xB5, 0xB9, 0xAE, 0xBE, 0x74, 0xB6, 0x58, 
-  0x28, 0x06, 0x23, 0xCF, 0x8D, 0x09, 0xBC, 0xE3, 0x18, 0x6C, 
-  0xFA, 0x53, 0x02, 0xE8, 0x3D, 0x44, 0xB3, 0xFE, 0xB3, 0x11, 
-  0x70, 0x10, 0xDF, 0xC3, 0x93, 0x64, 0x0F, 0x19, 0x35, 0xF0, 
-  0x82, 0x3A, 0xE3, 0x04, 0xE3, 0x1D, 0xFE, 0x52, 0xE8, 0x52, 
-  0xA1, 0x7B, 0x19, 0x23, 0x8E, 0x3F, 0x5D, 0x16, 0x60, 0xCB, 
-  0x13, 0x1A, 0x26, 0x6D, 0xDB, 0x82, 0xEB, 0x72, 0xEE, 0x76, 
-  0x77, 0x36, 0xEC, 0xEE, 0x09, 0x90, 0xAF, 0x35, 0x25, 0x5A, 
-  0x29, 0x61, 0x7A, 0xE6, 0x8C, 0x6C, 0x2A, 0x3B, 0x3B, 0xC4, 
-  0xC5, 0xD4, 0xCF, 0x41, 0x40, 0x04, 0xF3, 0x0F, 0x4B, 0x1B, 
-  0x99, 0x7D, 0xCF, 0x1F, 0xC5, 0xEB, 0xC5, 0xF5, 0xA1, 0x16, 
-  0xA2, 0x2A, 0x2E, 0xD5, 0x78, 0xC5, 0xAD, 0x9C, 0x48, 0x76, 
-  0xF2, 0x58, 0xDE, 0x68, 0x19, 0x58, 0x8C, 0xEA, 0xF5, 0xD0, 
-  0x54, 0x4F, 0x73, 0x60, 0x92, 0x71, 0x27, 0xF7, 0x02, 0x26, 
-  0xC0, 0x00, 0x02, 0x24, 0xC2, 0xE1, 0xD7, 0x77, 0x1A, 0x4D, 
-  0x5F, 0x7B, 0xC6, 0xC7, 0x52, 0x42, 0x9C, 0x26, 0xBE, 0x75, 
-  0x2E, 0x37, 0x00, 0xD8, 0x2C, 0xEF, 0x37, 0xC2, 0xF8, 0x88, 
-  0x89, 0xBA, 0x60, 0x35, 0xCE, 0xD5, 0xC4, 0x3D, 0x00, 0x6A, 
-  0xF1, 0xE1, 0x66, 0x4C, 0xFF, 0x79, 0xC7, 0xDF, 0x04, 0x99, 
-  0x02, 0xEB, 0x0E, 0x9D, 0xBE, 0x2C, 0x06, 0xB8, 0xE1, 0xC8, 
-  0xAE, 0xC4, 0xE8, 0xB7, 0xE7, 0x66, 0xEF, 0x01, 0x72, 0x45, 
-  0xB2, 0xBF, 0x69, 0xF7, 0xA2, 0x72, 0xEC, 0x91, 0x82, 0x9D, 
-  0xE5, 0x91, 0x9A, 0x6D, 0x4D, 0x0D, 0x29, 0x58, 0xE3, 0xA2, 
-  0xBB, 0x4F, 0x7B, 0xED, 0xA6, 0xEC, 0x0D, 0x91, 0xF6, 0xE7, 
-  0x68, 0x61, 0xDF, 0x8A, 0x1A, 0x5A, 0x2A, 0x21, 0x51, 0x80, 
-  0x31, 0xD5, 0xD6, 0xFB, 0xE5, 0x0D, 0x01, 0x49, 0x22, 0x05, 
-  0xEE, 0xA2, 0x7A, 0xF6, 0x6C, 0xCD, 0x9D, 0x95, 0x79, 0x7E, 
-  0x9D, 0x22, 0x91, 0x59, 0x31, 0x80, 0x55, 0xC9, 0x66, 0xC8, 
-  0x33, 0x36, 0x56, 0x65, 0xCC, 0x26, 0x88, 0xE7, 0xC0, 0x01, 
-  0xF4, 0x22, 0xF9, 0xE6, 0xF1, 0x18, 0x69, 0xAB, 0x93, 0x80, 
-  0x95, 0xBF, 0xA4, 0xB7, 0x7F, 0x56, 0x7D, 0xC0, 0xEE, 0xA7, 
-  0x01, 0x5B, 0x9B, 0xA6, 0x80, 0x5A, 0x17, 0x31, 0xC8, 0x93, 
-  0xF6, 0x6F, 0xFD, 0x27, 0x9A, 0x09, 0xB8, 0x48, 0x04, 0xD5, 
-  0x1F, 0xBB, 0x8B, 0xED, 0xB7, 0x08, 0x43, 0xBF, 0x82, 0xB1, 
-  0xAF, 0xD9, 0x35, 0x03, 0xE8, 0x36, 0xB4, 0xCD, 0x74, 0x74, 
-  0x30, 0x85, 0x73, 0x1F, 0x51, 0xED, 0xA5, 0xFD, 0x64, 0xFC, 
-  0xF1, 0x22, 0x21, 0x36, 0x3C, 0x5E, 0x46, 0x74, 0x9D, 0x94, 
-  0x2C, 0x0F, 0xDF, 0x2B, 0x6E, 0x5E, 0xA8, 0x7C, 0x80, 0xA4, 
-  0x4C, 0xE4, 0x1A, 0xE2, 0x80, 0x29, 0x5F, 0x85, 0x76, 0x95, 
-  0xD0, 0x2D, 0x26, 0x50, 0xB2, 0x14, 0x37, 0xA3, 0x3A, 0x4E, 
-  0xB9, 0x68, 0xCB, 0x1D, 0x9A, 0x9B, 0x33, 0xD0, 0x3D, 0x1B, 
-  0x0F, 0x3F, 0xA2, 0x95, 0xE0, 0x80, 0xA1, 0x39, 0x03, 0x14, 
-  0x5F, 0x21, 0x27, 0x54, 0xB5, 0x4D, 0x1F, 0x7A, 0x9A, 0x1E, 
-  0xB1, 0xC9, 0x63, 0xBE, 0xEC, 0x0C, 0xC1, 0x16, 0x80, 0x0F, 
-  0xFD, 0x3B, 0x3F, 0xFD, 0x97, 0xF8, 0x4F, 0xD9, 0xFE, 0xC7, 
-  0x6A, 0xE5, 0x40, 0x5B, 0xB8, 0x50, 0xA8, 0x94, 0x6F, 0x9F, 
-  0xD8, 0x23, 0xE8, 0xBC, 0x16, 0x9B, 0xF8, 0xC5, 0x0C, 0x48, 
-  0x28, 0x1B, 0x51, 0x8B, 0x1C, 0x9F, 0x37, 0x97, 0x6B, 0x0B, 
-  0x1C, 0x2B, 0xCF, 0x7F, 0x9E, 0xC4, 0x54, 0x8F, 0x4D, 0xBF, 
-  0x43, 0xBB, 0x40, 0x20, 0x79, 0x1F, 0x29, 0xF2, 0x43, 0x65, 
-  0x0D, 0xC8, 0x16, 0xAC, 0xE4, 0xF3, 0x82, 0x67, 0x01, 0xD9, 
-  0x19, 0x80, 0xAD, 0x16, 0x1F, 0xF6, 0xFA, 0xD3, 0xD8, 0x74, 
-  0x6F, 0xE5, 0x00, 0x8E, 0x77, 0x95, 0x51, 0x83, 0xD4, 0xF2, 
-  0x8B, 0x79, 0x2D, 0xBA, 0xB1, 0x10, 0x0C, 0x0F, 0xCC, 0x7D, 
-  0x24, 0x7A, 0xF5, 0xDF, 0x54, 0x54, 0xC0, 0xAF, 0x80, 0x3D, 
-  0x7E, 0x9C, 0x8F, 0x27, 0xA7, 0x0A, 0xE4, 0x8C, 0xB7, 0x5C, 
-  0x61, 0xF4, 0xAD, 0xB3, 0xD8, 0xA9, 0x1B, 0xEC, 0x13, 0xCB, 
-  0xD8, 0xD3, 0x81, 0xBA, 0x9D, 0xCA, 0xD9, 0xAE, 0xC4, 0x43, 
-  0x69, 0xF4, 0xDE, 0xF9, 0xE0, 0xFE, 0x5D, 0x53, 0x6D, 0xDA, 
-  0x5F, 0xED, 0x5F, 0x30, 0x81, 0x2C, 0xDE, 0x92, 0x04, 0xDE, 
-  0x94, 0xBB, 0x45, 0xAF, 0x14, 0x84, 0xC9, 0xE3, 0xBD, 0xBD, 
-  0x7F, 0x52, 0xE9, 0x6B, 0x34, 0xCA, 0x06, 0x3A, 0xE1, 0x79, 
-  0x22, 0x3C, 0xA8, 0x34, 0xED, 0x7E, 0x26, 0x18, 0x84, 0xDB, 
-  0x92, 0x48, 0xFD, 0xD6, 0x82, 0x04, 0x1D, 0x82, 0x1A, 0xA6, 
-  0x28, 0x74, 0x31, 0xA5, 0x74, 0x1F, 0xD9, 0x0F, 0xF2, 0xC8, 
-  0x4C, 0x38, 0x8F, 0xAF, 0x2A, 0xE0, 0x5F, 0xD6, 0xA4, 0x1C, 
-  0xE3, 0xF8, 0x70, 0xD5, 0x4C, 0xF8, 0x3C, 0x92, 0x0A, 0x01, 
-  0xEF, 0xB7, 0xEA, 0x57, 0xA5, 0x88, 0x4C, 0x10, 0x68, 0x99, 
-  0xC8, 0x4F, 0x1D, 0x67, 0x8E, 0x43, 0x7D, 0x3D, 0x5E, 0x20, 
-  0x02, 0x26, 0xC0, 0x00, 0x02, 0x68, 0x4F, 0x5F, 0x8D, 0xC4, 
-  0x7F, 0x74, 0xCD, 0xFE, 0xFB, 0x21, 0x22, 0x03, 0x06, 0xFA, 
-  0x2E, 0x4C, 0xFF, 0x35, 0xBB, 0x9E, 0x93, 0x44, 0x35, 0x8A, 
-  0xFF, 0x97, 0x39, 0x36, 0x8D, 0x53, 0x4D, 0xFA, 0x04, 0xA8, 
-  0x98, 0x13, 0x9C, 0xAA, 0x87, 0x0D, 0x8B, 0x50, 0x0D, 0x9C, 
-  0xB1, 0xAC, 0x4C, 0x59, 0x9B, 0xA2, 0xE4, 0x4C, 0xFC, 0x46, 
-  0xC5, 0xA6, 0x00, 0x4A, 0xA8, 0xD3, 0x24, 0x40, 0x9E, 0x48, 
-  0x8F, 0xC0, 0x8C, 0x0E, 0x16, 0x02, 0x3C, 0xF5, 0x12, 0x3D, 
-  0x97, 0xCE, 0xDE, 0x11, 0xBE, 0x46, 0xE8, 0x8F, 0x15, 0x3B, 
-  0xB3, 0x1D, 0x74, 0xCB, 0xEE, 0x77, 0x2D, 0xEB, 0xAD, 0x87, 
-  0x39, 0x85, 0xD7, 0xBC, 0x38, 0x87, 0x2A, 0x0B, 0xB5, 0xB0, 
-  0xD1, 0x09, 0x7D, 0x12, 0xC6, 0x4D, 0x9A, 0xF8, 0x00, 0xC5, 
-  0xA2, 0xF9, 0x9A, 0xFF, 0x30, 0x5D, 0x6E, 0x79, 0xD7, 0xBA, 
-  0xB3, 0xCC, 0x2A, 0x43, 0x61, 0xAC, 0x38, 0x99, 0x10, 0xDF, 
-  0x60, 0x94, 0x7B, 0x49, 0xD9, 0xC2, 0x4C, 0x6D, 0x3F, 0xD7, 
-  0x38, 0x85, 0xE7, 0x91, 0x26, 0x9E, 0x7F, 0x7E, 0xA4, 0x91, 
-  0x9B, 0x92, 0x02, 0xC1, 0x1F, 0xAF, 0x5C, 0x6B, 0xBA, 0x27, 
-  0xAD, 0x33, 0xCC, 0xE6, 0x20, 0x23, 0x61, 0xBE, 0x4A, 0xDA, 
-  0x28, 0x63, 0xB2, 0xE2, 0xAC, 0xA9, 0x51, 0x50, 0x9A, 0xAB, 
-  0xCA, 0x8C, 0x5C, 0xF3, 0x0A, 0x44, 0x03, 0xA9, 0x94, 0x92, 
-  0x1D, 0xC5, 0xB2, 0x09, 0xF3, 0x0E, 0xB3, 0x6A, 0x1D, 0x72, 
-  0xDC, 0x71, 0x4A, 0xAE, 0x4E, 0x0B, 0x1B, 0xCF, 0xF3, 0xCF, 
-  0x4B, 0x38, 0xD1, 0xCA, 0x27, 0xC2, 0x6A, 0x41, 0x0F, 0x3A, 
-  0x1D, 0xCD, 0x3E, 0xB1, 0x1A, 0xF7, 0x16, 0x48, 0x4A, 0xAA, 
-  0xA7, 0x28, 0x16, 0x07, 0x9B, 0xE0, 0x41, 0x99, 0xF1, 0x47, 
-  0x8C, 0x48, 0x6C, 0x2D, 0x93, 0x9E, 0x47, 0x2B, 0x9A, 0x96, 
-  0x20, 0x44, 0xF4, 0x2A, 0xCB, 0xB0, 0xDA, 0xBD, 0x17, 0x38, 
-  0xCB, 0x45, 0x9F, 0x21, 0xA8, 0x93, 0x26, 0x67, 0x51, 0x36, 
-  0x6F, 0x05, 0x4A, 0x08, 0x72, 0xFB, 0xA3, 0x98, 0xBF, 0x9E, 
-  0x39, 0xEC, 0xAF, 0xDA, 0x8A, 0xFD, 0xC1, 0xB2, 0xC4, 0x4D, 
-  0xFE, 0xCD, 0xBD, 0x7F, 0xF8, 0xCE, 0x4F, 0x7E, 0x4E, 0xBA, 
-  0xD1, 0x87, 0x3E, 0x5F, 0x77, 0xA2, 0x96, 0x3E, 0x8B, 0x15, 
-  0xDE, 0xE7, 0xBF, 0x7F, 0x97, 0x0F, 0xE1, 0xE7, 0x2F, 0x58, 
-  0x5D, 0xEF, 0x56, 0x39, 0x66, 0x63, 0x61, 0x94, 0x3D, 0x31, 
-  0xC8, 0x8D, 0xA8, 0xAC, 0xB5, 0x4C, 0x20, 0x1A, 0xD4, 0x18, 
-  0x34, 0x61, 0xA2, 0x4F, 0x65, 0xB3, 0x12, 0xFE, 0xA9, 0x02, 
-  0xCC, 0x47, 0x8F, 0x1C, 0x39, 0xFD, 0xDB, 0x08, 0x62, 0xFD, 
-  0x74, 0x8D, 0xF9, 0xAA, 0x34, 0xCA, 0x20, 0x67, 0xE8, 0xBC, 
-  0xAB, 0xED, 0x8C, 0x09, 0xC1, 0xA1, 0xE2, 0x3A, 0x41, 0xB7, 
-  0x1D, 0x82, 0x99, 0xAA, 0x79, 0x93, 0xB5, 0x1D, 0x6A, 0xE8, 
-  0xFC, 0x31, 0xBF, 0x67, 0xD8, 0xE9, 0x36, 0xD4, 0xBF, 0x9E, 
-  0xBF, 0xAB, 0x13, 0x20, 0xE3, 0x01, 0x29, 0x60, 0x28, 0x19, 
-  0xD2, 0x0E, 0xBC, 0x21, 0x3E, 0xD6, 0xC0, 0xC3, 0xDD, 0x64, 
-  0xFC, 0x98, 0x45, 0x26, 0x9B, 0x5C, 0xCB, 0xE2, 0x76, 0x0A, 
-  0x0D, 0x13, 0x1A, 0x7F, 0xEF, 0xE2, 0x44, 0xA3, 0xD8, 0xCE, 
-  0xD6, 0x0E, 0x5A, 0xA8, 0x40, 0x7B, 0x9E, 0xA0, 0xBE, 0xD6, 
-  0x63, 0x56, 0x77, 0x57, 0x69, 0x2C, 0xF8, 0xB6, 0x8D, 0x08, 
-  0xF3, 0x80, 0xA1, 0x2F, 0x53, 0xE2, 0x2F, 0xFD, 0xE6, 0x86, 
-  0x91, 0x83, 0x12, 0x7E, 0x73, 0xCF, 0xC8, 0x12, 0x58, 0xCD, 
-  0x9B, 0x30, 0x2C, 0x1E, 0xB8, 0x1E, 0xA3, 0x66, 0x27, 0xE9, 
-  0x33, 0xB2, 0x57, 0x9B, 0xF7, 0xFC, 0x04, 0xE1, 0xDF, 0xA4, 
-  0xC5, 0x7A, 0x39, 0xCE, 0xDF, 0xEB, 0x03, 0x89, 0x37, 0xFB, 
-  0xB0, 0x17, 0x12, 0x55, 0x52, 0x60, 0x25, 0xD1, 0xA6, 0x54, 
-  0xED, 0xD2, 0xBA, 0xE9, 0x66, 0x5A, 0xCA, 0xE3, 0x71, 0xF8, 
-  0xE7, 0x35, 0x1C, 0xAC, 0x00, 0x2C, 0xBD, 0x52, 0x6F, 0xE0, 
-  0x96, 0x91, 0x02, 0x26, 0xC0, 0x00, 0x02, 0x02, 0xB1, 0x96, 
-  0x3E, 0x04, 0x9B, 0x7A, 0x13, 0x3F, 0xA3, 0x05, 0x16, 0xBF, 
-  0x79, 0xE5, 0x67, 0x77, 0x23, 0x1E, 0x4D, 0x4C, 0x26, 0x7C, 
-  0x9D, 0x3E, 0xF5, 0x37, 0x49, 0xAC, 0x5C, 0xA7, 0x9F, 0xD7, 
-  0x8B, 0x61, 0x4B, 0x21, 0xEC, 0x27, 0x9A, 0x62, 0x75, 0xD1, 
-  0xCB, 0xEB, 0x58, 0x98, 0x84, 0xD1, 0xD9, 0xD8, 0x00, 0x0E, 
-  0x38, 0xCB, 0x40, 0xE9, 0xC0, 0x87, 0x62, 0x6D, 0xD6, 0xBE, 
-  0x5E, 0x47, 0x40, 0xCE, 0x39, 0xD2, 0x28, 0xFF, 0x32, 0x08, 
-  0xFB, 0xF1, 0x86, 0xEF, 0xF1, 0x1F, 0xC7, 0x28, 0xE0, 0x2A, 
-  0x9B, 0xAA, 0xA7, 0xEC, 0xBA, 0x63, 0x27, 0x98, 0xCC, 0x4C, 
-  0x35, 0x48, 0xE2, 0x83, 0xE2, 0xE4, 0x7E, 0xCF, 0xF2, 0x38, 
-  0xED, 0x1C, 0xE7, 0x17, 0xCB, 0xAC, 0xCC, 0xDA, 0xF5, 0x3B, 
-  0xD3, 0xC5, 0xFE, 0xB5, 0x04, 0x3A, 0xFC, 0xF7, 0x66, 0x66, 
-  0x89, 0xB5, 0xAD, 0x1C, 0x18, 0xFE, 0x63, 0xF6, 0x9E, 0x8D, 
-  0x73, 0xDC, 0x9D, 0x54, 0xDD, 0x02, 0x3B, 0x1D, 0x3F, 0x3D, 
-  0xD1, 0x4C, 0xCB, 0x3C, 0x09, 0x8E, 0x5A, 0x06, 0x5C, 0x03, 
-  0x59, 0xF4, 0x7B, 0xF6, 0x39, 0x02, 0x2B, 0xDC, 0x76, 0x82, 
-  0x2A, 0x33, 0x34, 0x34, 0x57, 0x9F, 0xC8, 0xF0, 0xF0, 0x14, 
-  0x29, 0x0C, 0x6E, 0x92, 0x36, 0x56, 0x3B, 0xA6, 0x68, 0xF0, 
-  0x3B, 0x3C, 0xA7, 0x8F, 0x60, 0x85, 0x5D, 0xAD, 0x14, 0xBF, 
-  0xA7, 0x8B, 0x8E, 0xED, 0x20, 0x0A, 0x64, 0xB2, 0x05, 0xF9, 
-  0x59, 0x45, 0xC0, 0x97, 0x2D, 0x0D, 0x3A, 0x77, 0xC0, 0xBD, 
-  0xA2, 0x9F, 0xD4, 0x21, 0xA5, 0x23, 0x7D, 0x1A, 0xE2, 0x4D, 
-  0x72, 0x44, 0xF6, 0x3E, 0x2A, 0x12, 0xF6, 0xB3, 0xDD, 0x15, 
-  0x63, 0xCC, 0x7A, 0x5E, 0x60, 0xC2, 0xB0, 0xEE, 0x2C, 0x35, 
-  0x08, 0x35, 0xE8, 0xA8, 0x08, 0x86, 0xA6, 0xC9, 0xA2, 0x84, 
-  0xBF, 0x90, 0x14, 0x92, 0x95, 0x6A, 0x08, 0x39, 0x30, 0xB2, 
-  0x94, 0x3E, 0x0D, 0xE9, 0x3B, 0x28, 0xC7, 0x89, 0x6F, 0xFE, 
-  0xB9, 0x83, 0x00, 0xE9, 0x9A, 0xA5, 0x47, 0x82, 0xEB, 0xAE, 
-  0xA8, 0x2F, 0xD4, 0x89, 0xDB, 0x00, 0xC0, 0xA3, 0xE8, 0x79, 
-  0xC8, 0x5D, 0x90, 0xA5, 0x5F, 0xB6, 0x11, 0x42, 0x99, 0x1E, 
-  0x7C, 0x9C, 0xB5, 0xA6, 0x90, 0x85, 0xE8, 0xED, 0x14, 0x55, 
-  0x99, 0x13, 0x10, 0xFD, 0x94, 0xF6, 0x48, 0x86, 0x26, 0x5A, 
-  0x36, 0x15, 0x53, 0xE5, 0x02, 0xD4, 0x46, 0xA4, 0x3B, 0x97, 
-  0xB0, 0x65, 0x25, 0xD2, 0x52, 0x08, 0x7D, 0x12, 0x28, 0xC3, 
-  0x0A, 0x26, 0xF1, 0xCD, 0x10, 0x90, 0xB0, 0x61, 0x6C, 0x31, 
-  0xEE, 0xC4, 0x79, 0x86, 0x36, 0x94, 0x38, 0x26, 0xD8, 0xA0, 
-  0x44, 0x90, 0x38, 0x08, 0xCA, 0xCA, 0x8A, 0xEF, 0x6D, 0xFD, 
-  0xBF, 0xAC, 0xE2, 0x87, 0xC4, 0xD3, 0xB6, 0x68, 0xA5, 0x02, 
-  0x05, 0xB4, 0xC1, 0xA3, 0x38, 0x60, 0x1B, 0x7F, 0xA5, 0xF2, 
-  0xA8, 0x17, 0xB0, 0x17, 0x88, 0x0F, 0xE8, 0xE1, 0x25, 0x9C, 
-  0x4E, 0x82, 0x37, 0x0C, 0xC3, 0xFF, 0x6D, 0x99, 0x9F, 0xB3, 
-  0x8B, 0x92, 0x2B, 0x96, 0x6B, 0xD3, 0xDF, 0x3F, 0x45, 0xD8, 
-  0xA2, 0x46, 0xAA, 0x06, 0x7D, 0xA7, 0x57, 0xEC, 0x87, 0x99, 
-  0xFA, 0x2F, 0x93, 0x6D, 0x65, 0x77, 0xD3, 0x72, 0x2B, 0x3D, 
-  0xFC, 0x9D, 0x0D, 0x2C, 0x88, 0x75, 0x37, 0x4B, 0x18, 0xA9, 
-  0x2D, 0xA9, 0xD6, 0xE3, 0x75, 0xFA, 0x29, 0xCE, 0x91, 0x51, 
-  0x74, 0xF9, 0x71, 0xFB, 0x0B, 0x1F, 0x24, 0x3D, 0xA8, 0xF3, 
-  0x56, 0x67, 0x7A, 0x13, 0xAA, 0xFF, 0x1C, 0x6D, 0xDD, 0x0F, 
-  0x14, 0xBC, 0x34, 0x35, 0xE0, 0xAF, 0x7A, 0x55, 0x8C, 0x9A, 
-  0xE0, 0xA6, 0x35, 0x1F, 0xAB, 0xC3, 0xF7, 0x14, 0x7E, 0xFF, 
-  0x13, 0x64, 0xAF, 0x1C, 0x11, 0x68, 0x25, 0x4D, 0x07, 0x05, 
-  0x3F, 0x76, 0x61, 0x29, 0x32, 0xB5, 0xEF, 0xF7, 0x7E, 0xE8, 
-  0x5C, 0xE2, 0xAA, 0x17, 0x3F, 0x5C, 0x48, 0xFA, 0x05, 0xB0, 
-  0xDF, 0x1F, 0x2B, 0x9B, 0x25, 0xAA, 0xA8, 0x1F, 0x80, 0xF5, 
-  0xE5, 0x9C, 0xC2, 0xF5, 0x02, 0x06, 0xC0, 0x00, 0x02, 0x96, 
-  0xA3, 0xD9, 0x49, 0x25, 0x73, 0x8B, 0x32, 0xB3, 0xD6, 0x68, 
-  0x6E, 0x3F, 0xDE, 0x58, 0xCB, 0xA8, 0x00, 0x34, 0xB2, 0x7D, 
-  0x5A, 0x88, 0x7F, 0x1B, 0x3A, 0xA7, 0xD2, 0x56, 0x5B, 0x20, 
-  0x6F, 0x6B, 0x43, 0x58, 0xC9, 0x48, 0x1F, 0x76, 0xE3, 0xA5, 
-  0x79, 0x0D, 0xD3, 0xC7, 0xBB, 0x76, 0xE8, 0xC2, 0xD5, 0x77, 
-  0x2B, 0x39, 0x93, 0x7F, 0x9B, 0x33, 0xB3, 0x0C, 0x12, 0x50, 
-  0x8A, 0x95, 0xB3, 0x27, 0xCB, 0x49, 0xDB, 0x3C, 0x6A, 0xB9, 
-  0x06, 0xD8, 0x31, 0x8E, 0x14, 0x6A, 0x3F, 0x5B, 0x03, 0x98, 
-  0xD8, 0x5C, 0xCA, 0x46, 0x14, 0xDA, 0xAB, 0x51, 0xDF, 0x72, 
-  0x3A, 0xAD, 0x8E, 0xDA, 0x9A, 0x44, 0x0E, 0x4C, 0xB0, 0x92, 
-  0xF6, 0x6A, 0x0E, 0xC8, 0x37, 0x0F, 0x93, 0x73, 0xB0, 0xB5, 
-  0x11, 0x12, 0x3F, 0xCF, 0x29, 0x50, 0x6B, 0xD9, 0x22, 0x2C, 
-  0x76, 0x71, 0x07, 0xBC, 0x00, 0x10, 0xB8, 0x54, 0x6A, 0x9A, 
-  0x59, 0x82, 0x4E, 0xE9, 0x02, 0x8B, 0x9C, 0xC9, 0x4B, 0xD3, 
-  0x7F, 0xAD, 0xA5, 0xF9, 0x7C, 0xB4, 0x00, 0xB4, 0x5A, 0xAF, 
-  0x23, 0x12, 0xF2, 0x5B, 0xB9, 0x2C, 0xFD, 0x73, 0xB9, 0xFC, 
-  0x4B, 0x4F, 0xAF, 0xD2, 0x80, 0xC2, 0xF7, 0x15, 0xEC, 0xE1, 
-  0x4B, 0xEF, 0xA3, 0x99, 0x59, 0x0C, 0xD5, 0x2F, 0x98, 0xF5, 
-  0x38, 0xD2, 0xFC, 0xF3, 0x82, 0xA7, 0xE0, 0x15, 0x35, 0x27, 
-  0xCD, 0xCF, 0xCE, 0xA4, 0x65, 0x92, 0x1E, 0x6C, 0x25, 0x8F, 
-  0xB7, 0x78, 0x15, 0x5B, 0x7A, 0x9D, 0xB0, 0xEC, 0xDE, 0x0A, 
-  0xF5, 0x0B, 0xCD, 0xD4, 0xF6, 0xC4, 0xD5, 0xA9, 0xC1, 0x4E, 
-  0xE0, 0xA2, 0x8B, 0xC4, 0x43, 0x97, 0xAC, 0xC9, 0x41, 0xF2, 
-  0x5A, 0x36, 0xD1, 0xD6, 0x7E, 0xC2, 0xD3, 0x06, 0xCB, 0x78, 
-  0x47, 0x78, 0x05, 0x35, 0x61, 0xE6, 0xD4, 0xDC, 0x65, 0x75, 
-  0x63, 0x5B, 0x71, 0xD7, 0x3C, 0x27, 0x9B, 0x26, 0x70, 0xAB, 
-  0x4D, 0x97, 0xE5, 0x83, 0x7C, 0xEB, 0x5B, 0x8F, 0xD6, 0xBC, 
-  0x84, 0x9D, 0xF8, 0x08, 0x65, 0x10, 0x6E, 0x48, 0xBE, 0xD2, 
-  0x86, 0xC0, 0xEB, 0x08, 0x27, 0x38, 0xF8, 0x6E, 0x5D, 0xBA, 
-  0x5B, 0xC6, 0x78, 0xED, 0xB1, 0x8D, 0x57, 0xFC, 0xA4, 0xDD, 
-  0xF3, 0xDF, 0xB9, 0x36, 0x92, 0xB8, 0x00, 0x06, 0x5F, 0xAD, 
-  0x04, 0xE3, 0x8D, 0x64, 0x64, 0x7A, 0xE0, 0x57, 0x4C, 0x68, 
-  0x56, 0xDC, 0x1F, 0x93, 0xA5, 0xD7, 0xEE, 0xFC, 0x8A, 0xB9, 
-  0x26, 0x99, 0xC5, 0x1A, 0x63, 0xD6, 0x9B, 0xBC, 0xA2, 0xF3, 
-  0xE1, 0x84, 0xDC, 0xFB, 0x0C, 0x4F, 0xB4, 0x0D, 0x75, 0x8B, 
-  0xDD, 0xB6, 0x76, 0x2C, 0x33, 0x46, 0xDD, 0x94, 0xE0, 0x8C, 
-  0x37, 0x03, 0x14, 0x44, 0xC2, 0x0F, 0x6C, 0x03, 0xA6, 0x39, 
-  0x1E, 0xB5, 0x00, 0x83, 0xC6, 0x59, 0x81, 0xD6, 0x11, 0x3A, 
-  0x22, 0x6F, 0x74, 0x1C, 0x8B, 0x4C, 0xF3, 0x1C, 0x59, 0x2F, 
-  0x19, 0x18, 0xB5, 0x20, 0x24, 0x9C, 0x14, 0x45, 0x7E, 0x98, 
-  0xFB, 0x71, 0xC4, 0xCC, 0x19, 0x99, 0x28, 0x9E, 0x63, 0xC2, 
-  0xD6, 0x0D, 0x47, 0x2A, 0x3B, 0x36, 0xB7, 0x8C, 0xF1, 0x98, 
-  0x33, 0x96, 0x9D, 0x09, 0x99, 0x74, 0xE3, 0x41, 0xCD, 0x67, 
-  0xCE, 0x11, 0xBA, 0x35, 0xE3, 0x44, 0x3D, 0xE0, 0xB9, 0x53, 
-  0x79, 0x58, 0x0F, 0xC5, 0x98, 0xCC, 0xAB, 0xF8, 0x37, 0x5C, 
-  0x96, 0xCE, 0xB5, 0xDA, 0xB5, 0x05, 0x79, 0xD6, 0x96, 0x82, 
-  0xCA, 0x3F, 0x2C, 0x8A, 0x44, 0xCE, 0xCE, 0x99, 0xA2, 0x77, 
-  0x9E, 0xE0, 0xFE, 0x58, 0x97, 0x5A, 0xDA, 0x8B, 0xB8, 0x0A, 
-  0xA2, 0x3F, 0x26, 0x00, 0x5C, 0xAC, 0xD8, 0x33, 0x95, 0xBF, 
-  0x43, 0x0D, 0x09, 0xB5, 0x9A, 0x89, 0x4C, 0x46, 0x83, 0xAF, 
-  0xD1, 0xD3, 0x61, 0x33, 0xA1, 0x19, 0xD3, 0xD6, 0x81, 0xB0, 
-  0xDA, 0x55, 0x4B, 0xD3,
-};
-
-const uint32_t gphDnldNfc_DlSeqSz = sizeof(gphDnldNfc_DlSequence);
+/********************************************************************************************
+ *
+ *	Copyright 2021 NXP
+ *
+ *	Permission is hereby granted, free of charge, to any person obtaining a copy
+ *	of this software and associated documentation files (the "Software"),to deal
+ *	in the Software without restriction, including without limitation the rights
+ *	to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
+ *	of the Software, and to permit persons to whom the Software is furnished to do so,
+ *	subject to the following conditions:
+ *
+ *	The above copyright notice and this permission notice shall be included in all
+ *	copies or substantial portions of the Software.
+ *
+ *	THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
+ *	INCLUDING BUT NOT LIMITED TO THE WARRANTIES	OF MERCHANTABILITY, FITNESS FOR A
+ *	PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
+ *	HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF
+ *	CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE
+ *	OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+ *
+ ********************************************************************************************/
+#include <linux/types.h>
+
+const uint8_t gphDnldNfc_DlSequence[] = {
+	0x01, 0x34, 0xC0, 0x00, 0xDE, 0x10, 0xAD, 0x69, 0xE0, 0x28,
+	0xAC, 0xFA, 0xF2, 0x4A, 0x0F, 0x49, 0x7E, 0x6A, 0x61, 0xD1,
+	0x00, 0xFD, 0x4A, 0x66, 0xDD, 0x42, 0x4D, 0xFF, 0x90, 0xA5,
+	0x6C, 0x54, 0xF0, 0x53, 0x5E, 0x17, 0x1E, 0x28, 0x8B, 0xF2,
+	0x56, 0x6D, 0x74, 0x7B, 0x4E, 0xBA, 0xEB, 0x8D, 0x22, 0x43,
+	0x01, 0xE9, 0xC4, 0x85, 0x2B, 0xFB, 0xA7, 0xD9, 0x3C, 0x64,
+	0x63, 0x2D, 0xBB, 0x63, 0x5C, 0xDB, 0x14, 0x4D, 0x86, 0xA0,
+	0x73, 0xC1, 0x32, 0xA4, 0x12, 0xD0, 0xED, 0x12, 0x90, 0xCF,
+	0xAF, 0x56, 0x35, 0x3D, 0x97, 0x6B, 0xAC, 0x81, 0x1B, 0xD6,
+	0x77, 0x9A, 0x4F, 0x9C, 0x90, 0x7D, 0x16, 0x6E, 0xC4, 0xCD,
+	0x2D, 0xD2, 0x57, 0x49, 0x99, 0x24, 0xBC, 0x06, 0x71, 0x04,
+	0xA8, 0x14, 0xEF, 0x21, 0x55, 0x0D, 0xAD, 0x82, 0x88, 0x5C,
+	0xEF, 0xDF, 0x03, 0x93, 0xB5, 0xE8, 0x21, 0x18, 0xE0, 0x54,
+	0xB8, 0xE1, 0x7E, 0x88, 0xE9, 0xF7, 0xEE, 0x86, 0xD2, 0x36,
+	0xD7, 0x4B, 0x99, 0x6C, 0x35, 0x8B, 0xE0, 0xA2, 0xA2, 0xFB,
+	0xED, 0xB5, 0x9A, 0xA0, 0xEE, 0x19, 0x67, 0x66, 0x14, 0x14,
+	0xEC, 0xEF, 0x3F, 0xC0, 0x25, 0x7C, 0xA8, 0x9F, 0x58, 0x11,
+	0xCD, 0x99, 0x00, 0xBF, 0xB8, 0x6D, 0xD5, 0x06, 0x8A, 0x5D,
+	0x40, 0xB0, 0x2C, 0x9A, 0x20, 0xA2, 0x30, 0xDA, 0xFD, 0xB0,
+	0xE3, 0x05, 0x5F, 0xB7, 0x3B, 0x9C, 0xD6, 0xB8, 0x92, 0xAE,
+	0x4B, 0xDC, 0xF2, 0x1D, 0xA4, 0x11, 0xCE, 0x0C, 0xFD, 0x37,
+	0x6E, 0xBA, 0x8B, 0x6C, 0x84, 0x3E, 0x3A, 0x3D, 0x20, 0xBE,
+	0x64, 0xA6, 0x56, 0x7F, 0x06, 0x66, 0x04, 0x38, 0x1D, 0x97,
+	0xD9, 0x96, 0xE6, 0x07, 0x29, 0xE2, 0x1A, 0xC4, 0x5F, 0x0A,
+	0xAC, 0x62, 0x50, 0xF8, 0xD2, 0x33, 0x3F, 0x7A, 0x50, 0x89,
+	0x98, 0x44, 0xCB, 0xFD, 0x75, 0x79, 0x25, 0xB1, 0x3A, 0xDE,
+	0x53, 0x86, 0x13, 0x54, 0x46, 0x0B, 0x5F, 0x94, 0xEC, 0x1B,
+	0x72, 0x24, 0x35, 0x84, 0x67, 0xC8, 0xBE, 0xDB, 0xAC, 0xB2,
+	0x0C, 0x94, 0x88, 0xE1, 0xC4, 0x36, 0xD1, 0x6B, 0xB9, 0x4C,
+	0xAE, 0xB0, 0x55, 0xF8, 0xBE, 0xD4, 0x7D, 0x16, 0x76, 0x84,
+	0x2E, 0x46, 0x0B, 0xF6, 0x0D, 0x43, 0xB6, 0xBB, 0x5F, 0x98,
+	0x02, 0x26, 0xC0, 0x00, 0x02, 0x35, 0x79, 0x26, 0x91, 0x8C,
+	0x34, 0x8D, 0x69, 0x6E, 0x7F, 0x6B, 0xBF, 0xBD, 0x81, 0x3F,
+	0x9C, 0x94, 0x0C, 0x65, 0x47, 0xC5, 0x08, 0xA7, 0x14, 0x6F,
+	0x5A, 0xAC, 0x7C, 0xAC, 0x0C, 0x15, 0xD5, 0x6F, 0xBF, 0xDC,
+	0xCE, 0x97, 0xD0, 0xD5, 0xEB, 0x1D, 0x3C, 0x7A, 0xEB, 0x2A,
+	0x4E, 0x76, 0x08, 0xF2, 0xEA, 0x3A, 0xA0, 0xB8, 0xFC, 0xA0,
+	0x74, 0x92, 0x8F, 0x86, 0xB1, 0x15, 0x0D, 0x7D, 0x92, 0x0F,
+	0x64, 0xCE, 0xCA, 0xC1, 0xC4, 0x20, 0xA2, 0x48, 0x2D, 0xB0,
+	0x47, 0x24, 0xF1, 0x20, 0x77, 0xDF, 0x87, 0x0D, 0xFA, 0xC6,
+	0x89, 0xEE, 0xBD, 0x5E, 0xD5, 0x85, 0x64, 0xBC, 0x40, 0x6E,
+	0x86, 0x01, 0x3D, 0xB6, 0x83, 0x8C, 0xAA, 0xF3, 0x2D, 0x3A,
+	0xBB, 0x0D, 0xE6, 0xA5, 0xC0, 0x64, 0x07, 0xCB, 0x57, 0x81,
+	0x7E, 0xD8, 0x3C, 0x3D, 0x4A, 0x9F, 0x8E, 0xF0, 0x57, 0x2E,
+	0x5E, 0x41, 0x42, 0x00, 0xB0, 0xC7, 0x4E, 0x17, 0xED, 0xC6,
+	0xAB, 0x73, 0x71, 0x65, 0x1D, 0x60, 0x34, 0x2A, 0x2B, 0xAF,
+	0x59, 0x82, 0x5E, 0x16, 0x48, 0x48, 0x0F, 0x86, 0x62, 0x0C,
+	0x84, 0x56, 0x00, 0x03, 0x2A, 0xA6, 0x2C, 0x21, 0xD0, 0x70,
+	0xF9, 0xE5, 0x37, 0x0E, 0x81, 0x20, 0x36, 0x4E, 0x86, 0x8D,
+	0xCF, 0xED, 0xBD, 0x0D, 0x49, 0x75, 0x0E, 0x5B, 0x80, 0xF7,
+	0xAF, 0x40, 0x56, 0x8B, 0xD8, 0xFC, 0xC6, 0xE4, 0x6D, 0xD6,
+	0x2E, 0x0D, 0xD0, 0x76, 0x75, 0x39, 0x3E, 0xF0, 0xEA, 0xC5,
+	0x23, 0x12, 0x06, 0x45, 0xEA, 0x04, 0x6D, 0xC1, 0xA2, 0x95,
+	0x95, 0x40, 0xD6, 0x6B, 0x65, 0xD6, 0x7D, 0x62, 0xA5, 0xB4,
+	0x6B, 0x6C, 0x24, 0x3E, 0xFB, 0xAB, 0x71, 0x4D, 0xFC, 0x24,
+	0x9F, 0x71, 0x8C, 0x04, 0x9A, 0xEE, 0x6D, 0x72, 0x3A, 0x01,
+	0x11, 0xC1, 0x01, 0xB2, 0xC2, 0xC8, 0xBA, 0x7D, 0x53, 0x56,
+	0x0D, 0x3F, 0x35, 0xF6, 0x86, 0x46, 0x7C, 0x67, 0xBF, 0x83,
+	0x04, 0x01, 0x98, 0xBC, 0x06, 0x08, 0xF3, 0x89, 0x88, 0x8E,
+	0x93, 0xB3, 0xA9, 0x21, 0x18, 0x71, 0xFF, 0xFC, 0x4E, 0xF7,
+	0xFE, 0x1A, 0x5D, 0xC9, 0x21, 0xF6, 0x3B, 0x27, 0x2C, 0x26,
+	0x37, 0xE2, 0x4F, 0x8C, 0x94, 0x77, 0xC7, 0x0D, 0xB9, 0x74,
+	0xCD, 0x9F, 0xE1, 0x70, 0xFD, 0x35, 0x11, 0xA2, 0xB6, 0xAC,
+	0x39, 0x3D, 0xC9, 0x57, 0x94, 0x3F, 0x10, 0x89, 0x9F, 0x0F,
+	0x7D, 0x49, 0x0E, 0xFE, 0x84, 0x34, 0x87, 0x5B, 0xA5, 0xA0,
+	0x5E, 0x0D, 0xE4, 0x05, 0x5A, 0x45, 0x8B, 0x31, 0x28, 0xF0,
+	0x80, 0x7A, 0xF9, 0x56, 0xE7, 0x60, 0xB0, 0x31, 0xBB, 0x75,
+	0x7E, 0x30, 0x74, 0x53, 0x14, 0xF6, 0xDE, 0x24, 0x9E, 0xE0,
+	0xB9, 0x9F, 0xE6, 0xB0, 0x5D, 0x5B, 0x7A, 0xF3, 0xFD, 0x0D,
+	0x4C, 0xCA, 0xAD, 0x01, 0xE4, 0x3F, 0xFE, 0x1D, 0x03, 0xE7,
+	0xD4, 0xC6, 0xC1, 0xE9, 0xF5, 0x9E, 0x72, 0x9C, 0x4A, 0x09,
+	0x85, 0x2C, 0xBE, 0x46, 0x49, 0xE1, 0x0F, 0xBF, 0x27, 0xF2,
+	0x81, 0xC3, 0x33, 0x95, 0xEC, 0xBE, 0x37, 0x2B, 0x65, 0xA5,
+	0xEC, 0xF7, 0x69, 0x23, 0x3B, 0xA6, 0xA6, 0xC3, 0xC7, 0x9F,
+	0x9B, 0x79, 0xE6, 0x37, 0xB4, 0xDB, 0x33, 0x3B, 0xC5, 0x19,
+	0x50, 0x7B, 0xBB, 0x7B, 0x4B, 0xFF, 0x0A, 0x3A, 0x0F, 0xDE,
+	0x9D, 0x1F, 0x70, 0xE0, 0x9C, 0x37, 0x9B, 0x61, 0x01, 0xD9,
+	0xCB, 0x9F, 0xC7, 0x1F, 0x9B, 0x25, 0x7D, 0x18, 0xF0, 0x6F,
+	0x12, 0x54, 0xC2, 0x17, 0x8F, 0xB2, 0x1F, 0x5D, 0x0F, 0x73,
+	0xB2, 0xEE, 0xE9, 0x0E, 0xC4, 0xA1, 0x70, 0x48, 0xDF, 0x0B,
+	0xB4, 0xDD, 0xFF, 0xC7, 0x01, 0xA6, 0xBC, 0x08, 0xCE, 0x0E,
+	0xB4, 0x4A, 0xAE, 0xFF, 0x88, 0xA6, 0x4D, 0x60, 0xC7, 0x55,
+	0x38, 0x74, 0x3C, 0x1D, 0x8F, 0x82, 0xD3, 0xD3, 0x31, 0x60,
+	0xE4, 0xB2, 0x24, 0x76, 0xE7, 0xD8, 0x53, 0x05, 0x20, 0x3E,
+	0x5C, 0xEF, 0x17, 0x4C, 0x20, 0x6F, 0x6A, 0x6D, 0x10, 0xA3,
+	0xA4, 0xE9, 0xFB, 0x76, 0x66, 0x99, 0x5D, 0xD1, 0x34, 0x52,
+	0x42, 0xBF, 0x02, 0x26, 0xC0, 0x00, 0x02, 0x9E, 0xED, 0xAE,
+	0xE5, 0x23, 0x85, 0x5C, 0xFF, 0xAD, 0x6E, 0x89, 0x02, 0x33,
+	0x97, 0x74, 0x05, 0x59, 0x1E, 0x73, 0x4E, 0xD3, 0x9A, 0x97,
+	0xD3, 0x85, 0x2B, 0x12, 0xFB, 0xA2, 0xF0, 0xA4, 0x4C, 0x2A,
+	0x58, 0xFB, 0x56, 0x6C, 0xE9, 0xA6, 0x04, 0x07, 0x9F, 0xBC,
+	0x76, 0x66, 0x01, 0x80, 0xB8, 0x1E, 0x4A, 0x8A, 0x0C, 0x76,
+	0x8A, 0x3C, 0x5F, 0x25, 0xAD, 0x83, 0xF3, 0x10, 0x02, 0xE1,
+	0x38, 0x4B, 0xFA, 0x81, 0xD2, 0xC5, 0x6D, 0x18, 0xA7, 0xD8,
+	0x0A, 0x4E, 0xC9, 0xC7, 0xA3, 0x19, 0x52, 0x0D, 0xBB, 0xA9,
+	0xDE, 0x9C, 0x90, 0x57, 0x71, 0x1A, 0x37, 0xA8, 0x70, 0x4D,
+	0x75, 0x7E, 0x34, 0x90, 0x74, 0x0E, 0x02, 0xC8, 0x8A, 0x80,
+	0x3D, 0x06, 0x67, 0xF4, 0xF2, 0xD4, 0x15, 0x66, 0x0D, 0x23,
+	0xAE, 0x46, 0x0A, 0x23, 0x7B, 0x36, 0x96, 0x48, 0x7D, 0x99,
+	0xF4, 0x09, 0xE3, 0xA9, 0x53, 0xAC, 0x94, 0xB7, 0x23, 0x7E,
+	0x57, 0xCF, 0x90, 0xCD, 0x13, 0x0D, 0x50, 0xBD, 0xC9, 0xE4,
+	0xC2, 0x22, 0x5F, 0x28, 0x11, 0xF8, 0x1F, 0x42, 0x33, 0xEE,
+	0xF3, 0xB4, 0xED, 0x8F, 0xF4, 0xA0, 0xAE, 0xF5, 0xAE, 0x56,
+	0x59, 0xC3, 0x65, 0xDB, 0xF2, 0x51, 0x6D, 0x15, 0xA3, 0xAF,
+	0xA5, 0xC7, 0x9F, 0x7A, 0xE8, 0xCC, 0xB4, 0xD8, 0xCA, 0x39,
+	0x3F, 0x79, 0xB3, 0x86, 0xDB, 0x37, 0x52, 0xDA, 0x5E, 0xDB,
+	0x7F, 0x53, 0x60, 0x43, 0x75, 0x53, 0x93, 0xD4, 0xA2, 0xE2,
+	0xE7, 0xB7, 0x42, 0xF0, 0x97, 0xA5, 0xB5, 0x52, 0xD3, 0xCF,
+	0xE7, 0x70, 0x6F, 0x10, 0xD4, 0x85, 0xC4, 0x4B, 0x3D, 0x09,
+	0xE1, 0x02, 0xB8, 0xED, 0xA5, 0xCC, 0x7B, 0x2D, 0x68, 0xEF,
+	0xEF, 0x9E, 0x87, 0x8C, 0xB7, 0xC9, 0x85, 0xA8, 0x01, 0xC2,
+	0xCF, 0x43, 0xB5, 0x6D, 0x30, 0x2A, 0x9F, 0x06, 0x96, 0xE0,
+	0x43, 0xEC, 0x3F, 0xC1, 0x2F, 0x7D, 0x4D, 0x85, 0x76, 0xD3,
+	0xF7, 0xFA, 0xC8, 0x84, 0x20, 0xA8, 0x3C, 0xD9, 0x3E, 0x4A,
+	0xB4, 0x87, 0x05, 0xCF, 0x9B, 0x51, 0x68, 0xF9, 0x49, 0xBA,
+	0x4D, 0x68, 0x97, 0x6E, 0x79, 0xDB, 0x04, 0x51, 0x66, 0x6F,
+	0xF9, 0x59, 0x2D, 0x55, 0x96, 0x13, 0x59, 0x52, 0x30, 0xB8,
+	0x73, 0xD1, 0x12, 0x33, 0x31, 0xEC, 0x4C, 0x0C, 0x8E, 0xD4,
+	0x47, 0xE7, 0x30, 0xC6, 0x98, 0xB5, 0x5B, 0x35, 0x1B, 0xAC,
+	0x51, 0xBB, 0xFA, 0xC3, 0x8D, 0x3E, 0x89, 0x83, 0x1C, 0xED,
+	0xB1, 0x03, 0x9C, 0xC7, 0x5C, 0x89, 0xF9, 0xC2, 0xE3, 0x45,
+	0x91, 0xDB, 0x41, 0x0A, 0x22, 0xD1, 0x90, 0x39, 0xD6, 0x9D,
+	0x0A, 0xD8, 0x36, 0xDC, 0xDB, 0xDD, 0x63, 0x22, 0xF8, 0x7B,
+	0x4D, 0x90, 0x4C, 0x27, 0x0F, 0xCC, 0x16, 0x0E, 0x32, 0x46,
+	0xD7, 0x20, 0x5A, 0x43, 0xC4, 0xC5, 0x37, 0x2E, 0xEB, 0x3F,
+	0x42, 0x2C, 0xFA, 0x99, 0xE2, 0xF9, 0x70, 0xB3, 0xC3, 0xCF,
+	0x4C, 0x67, 0xEB, 0x7C, 0x9D, 0xAF, 0x96, 0x15, 0x97, 0xD2,
+	0x07, 0x3B, 0xF6, 0xEF, 0x2F, 0x98, 0xAA, 0x1D, 0x45, 0xDC,
+	0x11, 0xBA, 0xF6, 0x0C, 0x18, 0x64, 0x80, 0xF2, 0x6B, 0xBD,
+	0x3C, 0x85, 0xC1, 0xCD, 0x78, 0xD0, 0x62, 0x79, 0x0F, 0xCD,
+	0xCA, 0x3D, 0x94, 0x0A, 0x11, 0xEF, 0x11, 0x86, 0xFA, 0x3F,
+	0x31, 0xB2, 0xF1, 0x2C, 0x74, 0x1B, 0x57, 0x05, 0xD4, 0x4F,
+	0xAF, 0xE7, 0xCB, 0x60, 0x9E, 0x78, 0x82, 0xAD, 0xF3, 0x34,
+	0x6A, 0x2F, 0xDC, 0xA1, 0xC9, 0xEA, 0x3E, 0x6E, 0x01, 0x80,
+	0x17, 0x5B, 0xCC, 0xBB, 0xED, 0xD0, 0x30, 0x11, 0xBE, 0xEE,
+	0x2E, 0x9F, 0xCE, 0xE1, 0xFF, 0x32, 0xB8, 0x7D, 0x40, 0xC8,
+	0x46, 0x0F, 0x41, 0x16, 0xE1, 0xB3, 0x98, 0x47, 0xCE, 0xE1,
+	0x41, 0xDE, 0x80, 0xA7, 0x56, 0x83, 0xA8, 0xDA, 0xC3, 0x49,
+	0x33, 0x6F, 0x93, 0x68, 0xA0, 0xC6, 0x1A, 0x0B, 0x82, 0x38,
+	0x56, 0xEE, 0xBB, 0x97, 0x5D, 0xBD, 0x8A, 0x32, 0x2D, 0xFE,
+	0x40, 0xC7, 0x0D, 0xCA, 0x32, 0x08, 0xCC, 0xE2, 0x18, 0x57,
+	0xBB, 0xC1, 0x60, 0x43, 0x02, 0x26, 0xC0, 0x00, 0x02, 0xAD,
+	0x9E, 0x61, 0x0D, 0x67, 0x25, 0xE4, 0x6E, 0x8F, 0x6D, 0xEA,
+	0x16, 0x98, 0xFA, 0x76, 0x6D, 0x6D, 0x3C, 0xED, 0x4B, 0x25,
+	0x60, 0xC6, 0xAB, 0x59, 0x91, 0x43, 0xAA, 0xAA, 0xEC, 0x8F,
+	0xA1, 0x3E, 0xB1, 0x78, 0x72, 0xEE, 0xD1, 0x91, 0xBA, 0xD9,
+	0x9B, 0xE3, 0x55, 0x61, 0x98, 0x46, 0x4B, 0xC5, 0x41, 0x3B,
+	0x9C, 0x88, 0x1D, 0x82, 0xD5, 0xD5, 0x99, 0x13, 0x64, 0x44,
+	0x00, 0xBD, 0xBE, 0xC4, 0xF6, 0x6A, 0x2D, 0xE3, 0xD0, 0xE7,
+	0x88, 0xD3, 0xA1, 0x48, 0x88, 0x84, 0x8A, 0x25, 0xAB, 0x90,
+	0x43, 0xFB, 0x3D, 0x1B, 0x06, 0xB2, 0xFD, 0x24, 0x58, 0x0C,
+	0xFA, 0x0A, 0xD3, 0x23, 0x73, 0xA7, 0xF8, 0x50, 0xC5, 0x1B,
+	0x3A, 0x75, 0xF4, 0x24, 0xA8, 0x52, 0xFB, 0x1B, 0x61, 0xAB,
+	0x79, 0x06, 0x54, 0xD9, 0x1D, 0x3A, 0x72, 0x4F, 0x8F, 0xD3,
+	0xC7, 0x71, 0xA8, 0x66, 0x80, 0x49, 0x8D, 0x50, 0xD1, 0xBF,
+	0xC8, 0x70, 0xAE, 0x4F, 0x64, 0x53, 0x26, 0x37, 0xDA, 0x6B,
+	0x62, 0xFE, 0xF9, 0x60, 0xAD, 0xAD, 0x49, 0x51, 0x37, 0x2E,
+	0x61, 0xA9, 0xAA, 0x72, 0xFD, 0x02, 0x20, 0x0B, 0xB0, 0xB0,
+	0x07, 0x95, 0x0C, 0x38, 0x13, 0xB6, 0xA4, 0x33, 0xFA, 0xFA,
+	0x12, 0xE1, 0x62, 0x00, 0x92, 0x46, 0x23, 0xAA, 0xD7, 0x9D,
+	0xBD, 0xAF, 0x15, 0xCA, 0x8C, 0x88, 0x2A, 0x4B, 0x1B, 0xA8,
+	0x06, 0xA0, 0xC2, 0x80, 0x8E, 0x98, 0x46, 0xA1, 0x84, 0x2C,
+	0x4A, 0x0F, 0xEA, 0x70, 0xE6, 0xDD, 0x17, 0x30, 0x8A, 0x41,
+	0x69, 0x8A, 0x1B, 0xC2, 0xC7, 0x18, 0xD5, 0xB3, 0x94, 0x4F,
+	0x51, 0x15, 0xCC, 0x37, 0x9A, 0x9E, 0xFD, 0x12, 0x40, 0xC1,
+	0xA3, 0x06, 0x0F, 0x36, 0xFC, 0x04, 0x18, 0x35, 0x40, 0x9C,
+	0x9E, 0x46, 0x5E, 0x14, 0xB6, 0xF7, 0xBF, 0xE5, 0x21, 0x12,
+	0xF2, 0xE2, 0x17, 0xB3, 0x63, 0x8C, 0xD1, 0xE3, 0xA9, 0x0A,
+	0x80, 0x1B, 0x74, 0x7A, 0x58, 0x91, 0x88, 0x9D, 0xAE, 0xE6,
+	0x05, 0x1D, 0x3C, 0x1E, 0xE9, 0x95, 0x08, 0x75, 0xEE, 0x20,
+	0xA8, 0x4B, 0x3D, 0x36, 0xAF, 0xB0, 0xFA, 0x94, 0x62, 0x5D,
+	0x9F, 0xD5, 0x50, 0x2A, 0x24, 0xFC, 0x1D, 0xDC, 0x39, 0xCB,
+	0x0D, 0x5A, 0xA1, 0xDA, 0xEF, 0xC9, 0xB3, 0x62, 0xF8, 0x7D,
+	0x0C, 0xE4, 0x6B, 0xEC, 0xF0, 0xF7, 0x96, 0x63, 0x58, 0x80,
+	0x55, 0x22, 0x6D, 0x42, 0x38, 0xE9, 0x1D, 0x69, 0xD5, 0x2F,
+	0x03, 0x3C, 0xCD, 0x27, 0x34, 0x99, 0x39, 0xF0, 0x5C, 0xE0,
+	0x23, 0x70, 0x85, 0x4B, 0x30, 0xBD, 0x21, 0x01, 0xF6, 0x06,
+	0x0B, 0xED, 0xBA, 0xA1, 0x6F, 0xE0, 0x6E, 0xD3, 0x78, 0xA8,
+	0x56, 0x94, 0x92, 0x84, 0xA8, 0x60, 0x35, 0xA8, 0x86, 0x56,
+	0x41, 0xEA, 0x12, 0x34, 0x86, 0x52, 0x18, 0x75, 0x43, 0x01,
+	0x0A, 0xCE, 0xBA, 0x04, 0xF7, 0x32, 0x09, 0x2D, 0xB1, 0xAC,
+	0x04, 0xB0, 0x4E, 0xEA, 0xBE, 0xDE, 0xDE, 0x95, 0x37, 0xDA,
+	0x86, 0x72, 0xFE, 0x10, 0x16, 0xBB, 0xA7, 0xE9, 0x67, 0xC9,
+	0x3C, 0x85, 0x18, 0xFF, 0xD7, 0x74, 0x25, 0x3A, 0x95, 0x04,
+	0xD5, 0x7F, 0x99, 0x41, 0x6A, 0x6A, 0x2C, 0xF6, 0x3E, 0x3C,
+	0x4B, 0xA7, 0xB9, 0xDA, 0x13, 0xFC, 0xF6, 0x46, 0xEF, 0x7E,
+	0xB4, 0xA6, 0x1B, 0x36, 0x93, 0x5B, 0xDA, 0xDB, 0x6A, 0xC7,
+	0x37, 0x58, 0x3C, 0x4F, 0x52, 0x7E, 0x39, 0xD7, 0xE2, 0xBA,
+	0x79, 0xA7, 0x9A, 0x05, 0x8A, 0xF5, 0x65, 0x86, 0xF4, 0x52,
+	0xBC, 0x79, 0x6D, 0xA9, 0xFE, 0xEE, 0xE6, 0xC5, 0x2B, 0x28,
+	0x62, 0x8E, 0xF6, 0x6E, 0xD5, 0x08, 0x90, 0x96, 0x72, 0x7A,
+	0x6B, 0x61, 0x8B, 0x6A, 0xE6, 0xCD, 0x05, 0x63, 0x12, 0x9A,
+	0xF7, 0x01, 0xAC, 0xF7, 0x8F, 0x1F, 0xE0, 0xCA, 0x1E, 0xF9,
+	0x86, 0xC1, 0xF6, 0x0D, 0x2D, 0x9F, 0x8A, 0x2C, 0x8B, 0x3C,
+	0xE4, 0x89, 0xDF, 0x72, 0x86, 0x17, 0xA8, 0x7F, 0x9D, 0x8B,
+	0x0D, 0x87, 0xCB, 0xC5, 0xAE, 0xE3, 0x90, 0xB1, 0xD9, 0x8B,
+	0x5E, 0x04, 0x97, 0xAA, 0x19, 0x85, 0x02, 0x26, 0xC0, 0x00,
+	0x02, 0x26, 0xDA, 0x00, 0x7E, 0x08, 0xC0, 0x08, 0x12, 0x9A,
+	0x78, 0x4E, 0x9D, 0xA7, 0xB0, 0x5E, 0x0D, 0x76, 0x6D, 0x4D,
+	0xC7, 0x89, 0x35, 0xDD, 0xB5, 0x58, 0x9F, 0x20, 0x3C, 0x41,
+	0x77, 0x9B, 0x85, 0x06, 0x21, 0xA4, 0x99, 0x56, 0xF9, 0x5B,
+	0x07, 0x01, 0x06, 0x1A, 0xE1, 0x1B, 0xC7, 0x9F, 0x46, 0x5D,
+	0x1F, 0xB8, 0xB2, 0x91, 0xA5, 0xC2, 0x01, 0x94, 0xFA, 0x53,
+	0x74, 0xFA, 0x6A, 0x5B, 0x63, 0x08, 0x2E, 0x24, 0xB0, 0xCF,
+	0x03, 0x40, 0x9C, 0xA1, 0xF2, 0xDB, 0xA2, 0x35, 0xD7, 0xCA,
+	0x78, 0x4E, 0x9D, 0x8B, 0x92, 0x4A, 0xD1, 0xEA, 0xF8, 0x14,
+	0xCA, 0xA0, 0x32, 0x55, 0x95, 0xA0, 0x1F, 0xB7, 0x1D, 0x8B,
+	0x8E, 0x8E, 0xA6, 0xF0, 0x2A, 0x30, 0x76, 0xB4, 0x9B, 0x6F,
+	0xAB, 0xBC, 0xC7, 0xA8, 0xF6, 0x2B, 0x9D, 0x1D, 0xC2, 0x24,
+	0x06, 0x10, 0x06, 0xE7, 0x59, 0x34, 0xE9, 0x30, 0xA8, 0xF5,
+	0x61, 0x55, 0xEC, 0xFB, 0xA1, 0x43, 0x17, 0x10, 0x08, 0xFF,
+	0x3C, 0x93, 0x03, 0xFF, 0x83, 0x35, 0x81, 0x77, 0x7E, 0x97,
+	0xC2, 0xA0, 0x53, 0x2A, 0x26, 0xD4, 0xDF, 0xC0, 0xA3, 0x21,
+	0x07, 0x14, 0x41, 0xD3, 0x7C, 0xE5, 0x40, 0x00, 0xDE, 0x32,
+	0xF5, 0xB9, 0xBB, 0x61, 0x44, 0xBC, 0xA4, 0xFD, 0x67, 0xAA,
+	0x69, 0xF4, 0x96, 0x93, 0xD2, 0xAF, 0xEA, 0xC5, 0x72, 0xDB,
+	0xEA, 0x88, 0x2A, 0x5F, 0xC5, 0xAB, 0x00, 0xFA, 0xA9, 0x32,
+	0x61, 0x58, 0xBE, 0xC0, 0x42, 0xA9, 0xFA, 0xB6, 0x44, 0xD6,
+	0x59, 0xF8, 0x26, 0x8B, 0xB9, 0x0A, 0xD9, 0xE2, 0x5B, 0x1B,
+	0x20, 0xD1, 0x34, 0x91, 0x81, 0xF3, 0xFF, 0xED, 0x6D, 0x81,
+	0xF9, 0x7D, 0xE3, 0x73, 0x37, 0xC1, 0x01, 0x12, 0x28, 0x9B,
+	0xEA, 0xDA, 0x0E, 0x3D, 0x68, 0x16, 0x23, 0xE1, 0x68, 0xFF,
+	0x1A, 0x59, 0xCC, 0x89, 0xF8, 0x44, 0x70, 0x13, 0xB2, 0x98,
+	0xB1, 0x31, 0xEA, 0xEC, 0x65, 0x21, 0x36, 0xEF, 0xCC, 0x85,
+	0x62, 0xC3, 0xEC, 0x62, 0xE9, 0x06, 0xEC, 0xB3, 0x47, 0x94,
+	0xE5, 0xF2, 0x6F, 0xFD, 0x80, 0xEE, 0x70, 0xB0, 0x06, 0x56,
+	0x8B, 0xF2, 0xDC, 0x7A, 0x52, 0x90, 0xC2, 0xE4, 0x77, 0xDD,
+	0xF7, 0xC2, 0x0C, 0x9C, 0xBE, 0x5A, 0x0F, 0xC6, 0x45, 0xB1,
+	0x3A, 0x63, 0x38, 0x2C, 0xD9, 0xC4, 0x45, 0x08, 0x44, 0x90,
+	0xE2, 0xBC, 0xA2, 0x5A, 0xE6, 0x2E, 0xFD, 0xCB, 0x36, 0x7F,
+	0xA9, 0xAC, 0x8C, 0x34, 0x1A, 0x3C, 0xE2, 0x9B, 0x24, 0x45,
+	0xE3, 0x9C, 0xCF, 0xF9, 0x96, 0xFE, 0x58, 0xB5, 0x29, 0x20,
+	0x0B, 0xC9, 0x5C, 0xAF, 0xCF, 0x7F, 0xCB, 0x8A, 0x14, 0xE1,
+	0xCD, 0xF7, 0x5B, 0x93, 0xBC, 0x7D, 0x7A, 0x3B, 0xD2, 0xF2,
+	0xFA, 0x2B, 0x57, 0x02, 0x9C, 0xAC, 0xA2, 0x16, 0x11, 0x2D,
+	0xDB, 0x3D, 0x42, 0x26, 0x87, 0xBE, 0x9F, 0x8B, 0x7B, 0x00,
+	0x20, 0x09, 0x41, 0x05, 0xB0, 0x42, 0x98, 0x44, 0xD6, 0xCC,
+	0x08, 0xA2, 0x20, 0x1F, 0x2A, 0x59, 0xB3, 0x05, 0x4F, 0xB4,
+	0xA6, 0xF8, 0xF8, 0xFD, 0x27, 0xBB, 0xC5, 0xC3, 0x52, 0x4D,
+	0x63, 0x37, 0xCF, 0xAE, 0x4C, 0x60, 0x1E, 0x98, 0x26, 0x12,
+	0x3D, 0xB9, 0xE6, 0x87, 0x09, 0x17, 0xB1, 0xE4, 0x81, 0x2C,
+	0x8E, 0x73, 0xA1, 0x40, 0x53, 0x96, 0xD8, 0x17, 0x7F, 0x39,
+	0xA8, 0x4F, 0xE9, 0xEF, 0x30, 0xE2, 0x5E, 0xEF, 0x9C, 0x13,
+	0x70, 0x21, 0x14, 0xA3, 0x5D, 0xEA, 0x43, 0xFB, 0xA6, 0x80,
+	0x70, 0xB9, 0x4B, 0x68, 0x9C, 0x5A, 0x82, 0x59, 0x00, 0xFA,
+	0x5E, 0x4C, 0x4F, 0x76, 0xB1, 0xF4, 0x45, 0xCD, 0xE6, 0x18,
+	0x09, 0xE2, 0x36, 0x8A, 0x60, 0x4B, 0xF4, 0x61, 0x55, 0xC4,
+	0xE9, 0x69, 0xC1, 0x03, 0x9E, 0x9C, 0xAF, 0x1C, 0xE5, 0xD1,
+	0xFF, 0x45, 0x16, 0x43, 0xD7, 0xE5, 0x4B, 0xCC, 0xEA, 0x24,
+	0x2E, 0xCE, 0xE3, 0x90, 0x17, 0xDB, 0xC4, 0x57, 0x4D, 0xF9,
+	0xCB, 0xEC, 0x09, 0x62, 0xBD, 0xD8, 0x7A, 0x89, 0x55, 0x92,
+	0x90, 0x7B, 0x22, 0x20, 0xD9, 0x9A, 0xC9, 0x19, 0x02, 0x26,
+	0xC0, 0x00, 0x02, 0x2E, 0xA2, 0xCF, 0xDE, 0xE3, 0xDE, 0xA9,
+	0x10, 0x3D, 0xEB, 0xD9, 0x4B, 0x51, 0x68, 0x41, 0x57, 0xCD,
+	0x7C, 0xF4, 0x28, 0x84, 0x22, 0x1C, 0xA7, 0xA6, 0x8A, 0xDD,
+	0x97, 0x5B, 0x8A, 0x07, 0x01, 0x97, 0x13, 0x20, 0x06, 0x12,
+	0xC9, 0xBB, 0x6D, 0x12, 0x25, 0x6D, 0x08, 0x13, 0x3C, 0x32,
+	0x48, 0xFE, 0x49, 0xD9, 0xC1, 0x3E, 0x00, 0x1C, 0xD9, 0xF0,
+	0xE2, 0xB3, 0xE0, 0x07, 0xE1, 0x8F, 0xDF, 0x75, 0xE0, 0xB9,
+	0x61, 0x1A, 0xBF, 0xAF, 0x66, 0xE0, 0xAB, 0x8A, 0x4B, 0x71,
+	0xCB, 0x4F, 0xB7, 0x4C, 0x30, 0xC8, 0xB0, 0xC4, 0xC0, 0x38,
+	0x73, 0xDD, 0x3C, 0xDC, 0x5D, 0x81, 0x40, 0x14, 0x23, 0x9C,
+	0xD2, 0x48, 0xF9, 0xCB, 0xC4, 0x1B, 0xD5, 0xC7, 0x85, 0xB0,
+	0x57, 0xC1, 0xF5, 0x41, 0x7A, 0x2E, 0xC6, 0x03, 0x86, 0x8C,
+	0x4E, 0xAF, 0x24, 0x21, 0xB9, 0x0B, 0xE9, 0x24, 0x12, 0x02,
+	0x3E, 0x35, 0x7C, 0x1D, 0x9A, 0x2D, 0x5E, 0xB7, 0xEE, 0x08,
+	0x34, 0x2C, 0x2B, 0xAD, 0x8D, 0x02, 0xF6, 0xFE, 0x06, 0x88,
+	0xD0, 0xA5, 0xA2, 0x1E, 0x5B, 0xD2, 0x88, 0x09, 0x9F, 0x43,
+	0xDF, 0xC4, 0x85, 0x59, 0x50, 0x7B, 0x94, 0xD9, 0xBB, 0xBE,
+	0xF5, 0x1D, 0x60, 0xD0, 0x90, 0x6F, 0xD5, 0x1E, 0x49, 0xF1,
+	0x76, 0x04, 0x96, 0xCA, 0x3F, 0x44, 0x64, 0xBE, 0x41, 0xE7,
+	0x4A, 0x6E, 0xA8, 0x11, 0x14, 0x21, 0xEA, 0x9E, 0x43, 0x6D,
+	0x2E, 0xF6, 0x49, 0x7A, 0x8C, 0xD6, 0xF1, 0x4A, 0xC3, 0x17,
+	0x16, 0x23, 0x3B, 0x02, 0x6A, 0xA7, 0x90, 0x1D, 0x8C, 0xBF,
+	0xB4, 0x25, 0xDA, 0xB6, 0x0F, 0x2A, 0x60, 0xF5, 0xC1, 0x7F,
+	0xFA, 0x1D, 0x0B, 0xAF, 0x28, 0x8A, 0x00, 0x8A, 0xBE, 0xA8,
+	0x72, 0x20, 0x5F, 0xEC, 0x3F, 0x16, 0x6E, 0xAB, 0xC4, 0xFC,
+	0x6B, 0x75, 0xD7, 0xFB, 0x73, 0x60, 0x7E, 0x25, 0xE5, 0xA3,
+	0x91, 0x6A, 0x33, 0xD3, 0x9E, 0xAC, 0xFB, 0x8C, 0xD1, 0xC6,
+	0x63, 0xF4, 0x3F, 0xB7, 0xD1, 0xD3, 0x88, 0x90, 0x4C, 0xA2,
+	0x7E, 0x6B, 0x19, 0x61, 0xCC, 0xAB, 0x48, 0xDD, 0x8D, 0xE2,
+	0x1B, 0xB7, 0x9E, 0x2F, 0x58, 0x10, 0x78, 0xAC, 0x94, 0xF6,
+	0xD6, 0x62, 0x4D, 0x66, 0x78, 0x67, 0x9F, 0x1B, 0x3A, 0x78,
+	0x4E, 0xA0, 0xDB, 0x47, 0x92, 0xC4, 0x43, 0x1A, 0x22, 0xFC,
+	0x26, 0x38, 0xA4, 0xF2, 0x7A, 0x52, 0x31, 0x71, 0x63, 0x16,
+	0x58, 0xF5, 0xA4, 0x4A, 0xCA, 0x73, 0xD5, 0x90, 0x39, 0x55,
+	0x8F, 0xB2, 0xC0, 0x3F, 0x3A, 0xEC, 0x69, 0xC4, 0x42, 0xCE,
+	0xB9, 0x1B, 0xA4, 0x32, 0x52, 0x14, 0x7C, 0xBB, 0xF6, 0xB3,
+	0x5A, 0x7C, 0xF1, 0x75, 0x1E, 0x4B, 0xB8, 0xB0, 0xB3, 0x8E,
+	0x13, 0x63, 0x7B, 0xF5, 0xB9, 0x93, 0x22, 0x98, 0xDF, 0x6C,
+	0xEC, 0x51, 0x4F, 0xC8, 0x0B, 0xA0, 0x14, 0x57, 0x75, 0x1B,
+	0xF6, 0xE9, 0x5D, 0xC2, 0x47, 0x65, 0xDF, 0x79, 0x0D, 0x48,
+	0xBE, 0x4F, 0x46, 0xF0, 0x37, 0xA5, 0x7C, 0xA3, 0x6B, 0x3E,
+	0xE6, 0xA2, 0x0E, 0x69, 0xAF, 0x3C, 0x46, 0x8A, 0x77, 0xD2,
+	0xBF, 0x2A, 0x16, 0x00, 0x17, 0x2F, 0x9C, 0x4E, 0xD8, 0xA8,
+	0x48, 0xD4, 0xCC, 0x0C, 0x29, 0xD1, 0x7A, 0xAE, 0x81, 0x4F,
+	0x04, 0x76, 0x53, 0xCF, 0x22, 0x76, 0x39, 0x61, 0xB6, 0x76,
+	0x42, 0xE6, 0x4E, 0x71, 0xB3, 0x06, 0xB9, 0x31, 0x04, 0x60,
+	0x88, 0x04, 0x02, 0x89, 0x72, 0x13, 0xD8, 0x8E, 0xD7, 0xE7,
+	0x88, 0xCC, 0x3B, 0x88, 0x4A, 0xC7, 0x96, 0x58, 0x12, 0xDA,
+	0x75, 0x15, 0xE2, 0x9A, 0xFA, 0x9E, 0x7C, 0x0E, 0xD6, 0x86,
+	0x64, 0x7F, 0x31, 0xE3, 0x5C, 0xD8, 0xCF, 0xC0, 0x6D, 0x9B,
+	0x1A, 0x1D, 0x8E, 0x90, 0xED, 0x8E, 0x7B, 0xFD, 0xAF, 0xE0,
+	0x85, 0xE2, 0x51, 0x49, 0xAE, 0xE6, 0x03, 0x78, 0x41, 0xB9,
+	0x05, 0xA0, 0xB8, 0x25, 0x03, 0x51, 0xD1, 0x93, 0x05, 0xE1,
+	0xAA, 0x19, 0x0F, 0x1A, 0xF0, 0xD6, 0x18, 0xB6, 0x23, 0xFD,
+	0xBC, 0x6E, 0x10, 0xA5, 0x18, 0xE9, 0x3B, 0xE5, 0xA4, 0x22,
+	0x02, 0x26, 0xC0, 0x00, 0x02, 0x55, 0x43, 0x38, 0x66, 0x6B,
+	0x96, 0x00, 0x6F, 0x33, 0xEE, 0x72, 0x7A, 0x9E, 0xD2, 0x5C,
+	0x1F, 0x87, 0x4C, 0xFC, 0xE9, 0x3C, 0xAB, 0xC7, 0x5E, 0x55,
+	0xD6, 0xEF, 0x78, 0xB1, 0x4D, 0xA7, 0x92, 0x3F, 0x57, 0x3B,
+	0xF5, 0x7F, 0xE0, 0xD6, 0xE0, 0xD0, 0x8D, 0xE5, 0xE1, 0xAE,
+	0x48, 0xC1, 0xF7, 0xF3, 0xC3, 0xA4, 0xF7, 0x8F, 0xE7, 0x6F,
+	0xB2, 0xB1, 0xA5, 0x6F, 0x6A, 0xCF, 0x5F, 0x3C, 0xF2, 0x50,
+	0x31, 0x19, 0x89, 0xF1, 0x74, 0x55, 0xA2, 0xFF, 0x7A, 0x5D,
+	0xCB, 0x96, 0xED, 0xE4, 0xEA, 0x28, 0x4B, 0xF7, 0xE4, 0x45,
+	0x7D, 0x99, 0xAF, 0xC5, 0xDB, 0xC1, 0x2D, 0xE8, 0xE9, 0xEA,
+	0x2B, 0xAD, 0x7E, 0x8E, 0x96, 0x25, 0xA0, 0x9E, 0xDA, 0x31,
+	0xE4, 0xCD, 0xC6, 0x8D, 0x69, 0x39, 0x04, 0x53, 0x1B, 0xCA,
+	0xEF, 0x96, 0x8E, 0xEF, 0xFB, 0x4E, 0xC8, 0x11, 0x8E, 0x42,
+	0x03, 0xC2, 0x96, 0x1A, 0x2C, 0xD8, 0xCF, 0x17, 0x05, 0x36,
+	0xF7, 0x02, 0xAB, 0xBD, 0x1A, 0xF3, 0x51, 0xC0, 0xE2, 0x1E,
+	0x0D, 0x8D, 0xE9, 0x81, 0x57, 0xD1, 0xA1, 0x9A, 0x2C, 0x7D,
+	0x43, 0xBD, 0x23, 0x50, 0xA9, 0x3D, 0x77, 0xC1, 0x5F, 0x2D,
+	0x3A, 0x61, 0x56, 0xE1, 0x47, 0xB4, 0x6C, 0xB1, 0xDF, 0xD7,
+	0x1E, 0x95, 0x00, 0x02, 0x5B, 0xDA, 0xBD, 0x39, 0x2A, 0x06,
+	0x98, 0x2B, 0x54, 0x63, 0xC9, 0xDB, 0x30, 0xF2, 0xB6, 0xB6,
+	0xC8, 0x22, 0xAB, 0xB5, 0x68, 0xA3, 0xB7, 0x94, 0x6C, 0x97,
+	0x5B, 0xC0, 0x6F, 0xA5, 0x11, 0xFD, 0x9A, 0x52, 0x5A, 0xB5,
+	0x3D, 0xEA, 0xC3, 0x23, 0xD1, 0xA7, 0x31, 0xA1, 0xCE, 0xA8,
+	0x4A, 0x7C, 0x5D, 0xF6, 0x21, 0xC1, 0x38, 0x73, 0xA3, 0x83,
+	0x00, 0x28, 0x9D, 0x76, 0x5A, 0xC5, 0x63, 0xDB, 0x47, 0x25,
+	0xAB, 0xD7, 0x25, 0xAE, 0x7D, 0x87, 0xF1, 0xA1, 0xE6, 0x9C,
+	0x83, 0x33, 0x30, 0xE1, 0xAD, 0x65, 0xFD, 0x0F, 0xBB, 0xD0,
+	0xEF, 0xF5, 0xC3, 0x19, 0x9B, 0x9D, 0x13, 0xBA, 0xEF, 0x9F,
+	0x13, 0x2F, 0x76, 0x55, 0x2C, 0x2A, 0xC3, 0x8B, 0x40, 0x79,
+	0x49, 0x02, 0x88, 0xE7, 0x4B, 0x57, 0xF5, 0xC5, 0x56, 0x30,
+	0xF2, 0xB8, 0x2D, 0x83, 0x6F, 0xB6, 0xBF, 0xE2, 0x7E, 0xFF,
+	0x18, 0x61, 0x11, 0x6B, 0x77, 0xCC, 0x04, 0x8B, 0xE4, 0x7C,
+	0xF9, 0x48, 0x9C, 0xE0, 0x10, 0x7F, 0x68, 0xFE, 0x40, 0xF0,
+	0x23, 0x5C, 0x13, 0x56, 0xD7, 0xCC, 0xDA, 0x83, 0xD6, 0x5C,
+	0xB2, 0xED, 0x3F, 0x4C, 0x1E, 0x0A, 0x2F, 0x9D, 0xA2, 0x08,
+	0x95, 0xB1, 0x80, 0xFB, 0x04, 0xAC, 0xED, 0x88, 0x01, 0xDC,
+	0x69, 0xC7, 0x2D, 0xE8, 0xEB, 0xD1, 0xCE, 0x8E, 0x32, 0x04,
+	0x0B, 0xA5, 0x1E, 0xFA, 0x47, 0xA2, 0x8F, 0xB6, 0xF4, 0xC8,
+	0xFE, 0x81, 0xFC, 0x68, 0xFF, 0x82, 0x9A, 0x9A, 0xB6, 0x2C,
+	0x58, 0x55, 0xEE, 0xFC, 0xBB, 0x23, 0x47, 0xA4, 0xEB, 0xF8,
+	0x08, 0xB1, 0xF0, 0xAA, 0xE3, 0x7A, 0xDC, 0xEF, 0xD6, 0xB4,
+	0x60, 0x39, 0x6F, 0x0F, 0x8A, 0x4C, 0x65, 0x48, 0x65, 0x78,
+	0x6D, 0xF8, 0x44, 0x13, 0xA2, 0x9A, 0x76, 0xE8, 0xA7, 0x06,
+	0x33, 0x54, 0x74, 0x73, 0xE4, 0x69, 0x66, 0x27, 0xA0, 0x66,
+	0xA0, 0x5A, 0x9E, 0x26, 0xF2, 0xA4, 0x3C, 0xA6, 0xCF, 0x86,
+	0x0F, 0x9D, 0x0A, 0x75, 0xC1, 0x9C, 0x34, 0xD1, 0x40, 0x21,
+	0x64, 0x62, 0x7B, 0xBF, 0xAE, 0xCD, 0x44, 0x17, 0x6D, 0x5F,
+	0x21, 0x02, 0x17, 0x1A, 0x2C, 0xA4, 0x18, 0x1D, 0x4F, 0x2E,
+	0xC8, 0xE2, 0xCF, 0xAE, 0x25, 0x4A, 0xC4, 0xA2, 0x5A, 0x2E,
+	0x10, 0x09, 0x69, 0xB2, 0xEA, 0xF9, 0xB9, 0x4C, 0x36, 0xA4,
+	0xD6, 0xCB, 0x03, 0x6E, 0x7B, 0xC1, 0xA4, 0x28, 0x1A, 0x09,
+	0xBF, 0xF1, 0xA1, 0x3F, 0x75, 0xB8, 0x5A, 0xF3, 0x9F, 0x12,
+	0x35, 0x4B, 0x16, 0x21, 0x3B, 0x8D, 0xF9, 0x87, 0xCB, 0x8A,
+	0xEC, 0x29, 0x1B, 0xF0, 0xB3, 0x96, 0x77, 0xB7, 0x7B, 0xA8,
+	0x6A, 0x98, 0xE4, 0x8B, 0x61, 0xB6, 0x47, 0xD7, 0x92, 0xB4,
+	0x0B, 0x47, 0x02, 0x26, 0xC0, 0x00, 0x02, 0x4B, 0x86, 0xD9,
+	0x89, 0x5B, 0x11, 0x29, 0x1D, 0x8E, 0x56, 0xC4, 0x4A, 0x0D,
+	0xD4, 0x9F, 0x43, 0x9F, 0xA2, 0x55, 0x58, 0xE1, 0xF6, 0xF6,
+	0x58, 0xFB, 0xCD, 0x3F, 0x06, 0x4C, 0xC2, 0x60, 0x6D, 0xB7,
+	0xB2, 0xFF, 0xFE, 0x89, 0x77, 0x7A, 0x1E, 0xA0, 0xC8, 0xDD,
+	0x7F, 0x3E, 0x6B, 0x38, 0x2F, 0x41, 0x2B, 0xDF, 0x42, 0x14,
+	0x50, 0x28, 0xEE, 0xDE, 0x3F, 0xD8, 0xFF, 0x09, 0x43, 0x7A,
+	0x22, 0x4F, 0xF3, 0xFC, 0x60, 0x7E, 0x2C, 0x1A, 0xB6, 0x9E,
+	0x21, 0x40, 0x76, 0x3B, 0x42, 0xFC, 0xBC, 0x1D, 0x00, 0xA4,
+	0x55, 0x95, 0x47, 0xBD, 0x6E, 0x31, 0xAB, 0x05, 0xAD, 0x38,
+	0x53, 0xB0, 0x24, 0x83, 0x7D, 0x0E, 0xA8, 0x40, 0xE6, 0x33,
+	0x6D, 0xEF, 0x72, 0x35, 0xCF, 0x3C, 0x11, 0x67, 0x1D, 0x28,
+	0xEF, 0x7B, 0x7A, 0x7A, 0x0E, 0xD2, 0x7F, 0xBA, 0xEB, 0xA0,
+	0x49, 0x46, 0x29, 0x40, 0x5B, 0x62, 0xA9, 0xED, 0xC9, 0xAC,
+	0xDD, 0xAF, 0xE9, 0xAF, 0xF9, 0x75, 0x70, 0xC7, 0xAD, 0xB2,
+	0xB6, 0x51, 0x08, 0x23, 0x89, 0x1F, 0xCC, 0xDE, 0xB7, 0x6B,
+	0x25, 0xC4, 0x77, 0x90, 0x01, 0xBA, 0x80, 0x62, 0x3E, 0xFF,
+	0x93, 0x00, 0x15, 0x43, 0x7D, 0xBE, 0x80, 0x83, 0xBB, 0xB0,
+	0xAA, 0x3B, 0xF2, 0x0A, 0x9D, 0x86, 0x23, 0xA4, 0xB7, 0xB7,
+	0x44, 0x30, 0xA7, 0x17, 0x66, 0x70, 0xEE, 0x2D, 0x1F, 0xDF,
+	0xBD, 0xD9, 0x14, 0x3E, 0x55, 0xC6, 0xC9, 0x5B, 0xC3, 0xF2,
+	0xE5, 0x10, 0xD5, 0x1A, 0x93, 0xF6, 0x76, 0xAB, 0x71, 0x87,
+	0xDE, 0xD5, 0x51, 0x99, 0x37, 0x6F, 0xEE, 0xB1, 0x63, 0xDA,
+	0x7F, 0x3B, 0xAC, 0x77, 0x1B, 0x4B, 0xA3, 0xE3, 0x77, 0x41,
+	0xEA, 0x23, 0xF3, 0xB9, 0x22, 0x75, 0x07, 0x8E, 0x64, 0x3E,
+	0x32, 0xA9, 0x28, 0xAA, 0x93, 0x8F, 0xE8, 0xDA, 0x60, 0xE9,
+	0xD7, 0x35, 0x7F, 0xD7, 0x8F, 0xC8, 0xE5, 0x5B, 0x61, 0x47,
+	0xD6, 0xD4, 0xA7, 0xFF, 0x25, 0x8F, 0x03, 0xC3, 0x03, 0x07,
+	0xED, 0x30, 0x45, 0x86, 0x73, 0x1E, 0x8F, 0x2F, 0x3D, 0xB4,
+	0xC0, 0x37, 0x7A, 0xE7, 0x80, 0xEA, 0xA0, 0xDB, 0x98, 0xAE,
+	0xF9, 0x24, 0x0C, 0x74, 0x36, 0x54, 0x13, 0x34, 0x30, 0xCF,
+	0x0E, 0xC8, 0x9D, 0x94, 0xE7, 0xAF, 0x6A, 0xC0, 0x32, 0x32,
+	0xA3, 0xDE, 0x3A, 0x5B, 0x72, 0x72, 0xE3, 0x8F, 0x91, 0xC5,
+	0x44, 0xAB, 0x86, 0x7B, 0xE0, 0x6C, 0x80, 0x84, 0x64, 0x1D,
+	0xC0, 0xF1, 0x28, 0x7C, 0x6A, 0x35, 0x76, 0xCF, 0x12, 0x56,
+	0x84, 0x1C, 0x21, 0x51, 0x33, 0x00, 0xFF, 0xB2, 0x64, 0x30,
+	0x44, 0x1C, 0xA5, 0x05, 0x09, 0xE2, 0x14, 0x8E, 0xF3, 0xD8,
+	0x91, 0x21, 0x60, 0xC0, 0x51, 0x68, 0x62, 0xF5, 0x7E, 0x06,
+	0xD5, 0xC0, 0xEE, 0xB8, 0x91, 0xF1, 0x52, 0x14, 0x6C, 0x27,
+	0xB6, 0x6A, 0x1C, 0x64, 0xBF, 0x59, 0x47, 0x64, 0x03, 0x8D,
+	0x4E, 0xEB, 0xA3, 0x73, 0x10, 0xE2, 0xBC, 0xA0, 0x30, 0x29,
+	0xE6, 0xF5, 0xED, 0x04, 0xCA, 0xAA, 0xC2, 0xBA, 0xDB, 0x8E,
+	0xBC, 0x00, 0x34, 0x3D, 0xB6, 0x12, 0xCB, 0xAF, 0xC0, 0x3D,
+	0x97, 0xF7, 0x5A, 0x1B, 0x83, 0x90, 0x91, 0xD0, 0xE2, 0xCF,
+	0xE6, 0x21, 0x07, 0xCF, 0x2E, 0xFD, 0x71, 0xA1, 0x10, 0x18,
+	0x67, 0x3F, 0x8F, 0xE2, 0x86, 0xFA, 0xA6, 0xDF, 0x6D, 0xE4,
+	0x31, 0x7D, 0x75, 0x12, 0x99, 0x23, 0xC7, 0xFB, 0xF2, 0x04,
+	0x76, 0x4C, 0x93, 0x9B, 0xB9, 0x89, 0x1D, 0x88, 0x5A, 0x0E,
+	0xDE, 0x5A, 0x27, 0x35, 0x88, 0xE7, 0x80, 0x14, 0x87, 0xCA,
+	0x23, 0xE6, 0xEF, 0xA8, 0xEA, 0x73, 0x7D, 0x93, 0x0C, 0x61,
+	0x81, 0x2E, 0x10, 0xDF, 0x13, 0x57, 0x96, 0xD9, 0x36, 0x68,
+	0x93, 0x42, 0x7A, 0x67, 0x60, 0x44, 0x57, 0xD8, 0x6C, 0x4B,
+	0xD4, 0xCC, 0x7E, 0x70, 0xE2, 0xCD, 0xC7, 0x14, 0x4A, 0xDE,
+	0x32, 0x35, 0x8B, 0x4B, 0x14, 0xE0, 0x8D, 0x5C, 0x33, 0x72,
+	0xC9, 0x5D, 0x1F, 0xF6, 0xD7, 0xC3, 0xCF, 0x72, 0xA1, 0x2C,
+	0x98, 0x2C, 0x0E, 0xEA, 0x02, 0x26, 0xC0, 0x00, 0x02, 0xEC,
+	0xFC, 0x5D, 0x99, 0x61, 0x74, 0x77, 0x64, 0xF2, 0x70, 0x18,
+	0x1A, 0x0B, 0x9F, 0x5A, 0x64, 0xE4, 0xCE, 0xA9, 0xCE, 0xCF,
+	0x15, 0x35, 0x0E, 0x90, 0x95, 0xD1, 0x78, 0xBC, 0x36, 0xDD,
+	0x32, 0xB0, 0x72, 0xCF, 0xCE, 0xFE, 0x8D, 0xAA, 0xF4, 0x19,
+	0x73, 0x80, 0x37, 0xB6, 0x7B, 0x88, 0xB5, 0x7F, 0x5B, 0x7E,
+	0xC7, 0x1F, 0x40, 0x5E, 0xCF, 0xC5, 0xE3, 0x75, 0x43, 0xCA,
+	0x9D, 0x7C, 0xA1, 0x5D, 0x12, 0xBE, 0x30, 0x0E, 0x2C, 0x6D,
+	0xE1, 0xD4, 0xD9, 0xC0, 0x90, 0x9F, 0x13, 0x6C, 0x00, 0x75,
+	0xC9, 0x98, 0xE8, 0x4A, 0x1E, 0x43, 0x27, 0xB2, 0x3D, 0x16,
+	0x5D, 0xF7, 0x18, 0xF6, 0xF2, 0x57, 0xA8, 0x54, 0x57, 0x50,
+	0xFD, 0x98, 0x0F, 0x99, 0x63, 0x9E, 0x94, 0x71, 0x8B, 0x6B,
+	0x6A, 0xAC, 0x27, 0x7A, 0xE5, 0xFE, 0x49, 0x5F, 0xA9, 0x3F,
+	0x72, 0x32, 0xE5, 0x67, 0x87, 0xE9, 0xCC, 0xBC, 0x64, 0xE9,
+	0x6B, 0x15, 0x06, 0x60, 0x32, 0x43, 0x49, 0x53, 0x47, 0xB2,
+	0x56, 0xCE, 0xBF, 0x5F, 0x9B, 0x16, 0x40, 0x7D, 0x90, 0x0E,
+	0xFB, 0xFE, 0x66, 0x58, 0xB3, 0xFC, 0x42, 0xB5, 0x90, 0xE6,
+	0xCA, 0x6C, 0xD0, 0x3C, 0xA0, 0x2D, 0x84, 0x5E, 0xA0, 0xE7,
+	0xD7, 0x8B, 0xB0, 0x42, 0x56, 0x3D, 0x48, 0xAF, 0x18, 0xEF,
+	0xAF, 0x27, 0x76, 0xE3, 0x26, 0x0B, 0xCA, 0xA0, 0x01, 0x4B,
+	0x79, 0xD1, 0xAC, 0xD5, 0x8B, 0xCD, 0x70, 0x9F, 0x6E, 0xFB,
+	0x72, 0xBB, 0x9B, 0xDA, 0x4A, 0xFA, 0x96, 0x45, 0x29, 0x59,
+	0x16, 0x4B, 0x57, 0xC1, 0x7B, 0x5D, 0x94, 0x5E, 0xDA, 0xC1,
+	0x2B, 0x3C, 0xD9, 0xD5, 0x6B, 0x23, 0xE7, 0x53, 0x9C, 0xAA,
+	0x89, 0x07, 0xFC, 0x66, 0xBC, 0xBC, 0xDD, 0x5D, 0xC7, 0xC0,
+	0x46, 0xAF, 0xF6, 0xCB, 0xBB, 0xD3, 0x37, 0xC1, 0x7F, 0xCD,
+	0xAE, 0x69, 0x1F, 0xCA, 0x20, 0x07, 0x76, 0x3F, 0xD0, 0x71,
+	0x4F, 0x19, 0x6A, 0x92, 0xA2, 0xD8, 0x81, 0xE7, 0x84, 0xC3,
+	0x24, 0x55, 0xF3, 0x1F, 0xA6, 0x8B, 0xAF, 0x11, 0xA6, 0xAC,
+	0x9B, 0x2D, 0x12, 0xD0, 0x0D, 0xBC, 0x20, 0x26, 0x01, 0x76,
+	0x39, 0xBF, 0xAB, 0x52, 0xD6, 0x93, 0x76, 0x29, 0x4C, 0xD8,
+	0x8F, 0xBA, 0xA9, 0xA1, 0xCE, 0x09, 0xCC, 0xB7, 0xC5, 0x34,
+	0xCC, 0xC1, 0x27, 0xE9, 0x47, 0xFB, 0x02, 0xC0, 0x0B, 0xB7,
+	0xE2, 0x1B, 0x9A, 0x05, 0x32, 0x99, 0x7E, 0xEF, 0xDA, 0xC3,
+	0xE2, 0xB3, 0x0D, 0x2F, 0xD7, 0x32, 0x14, 0xAA, 0x90, 0x00,
+	0x5B, 0x8F, 0xA9, 0x6D, 0xBD, 0x54, 0xAF, 0xE2, 0x47, 0x8C,
+	0x20, 0xD4, 0x14, 0x34, 0x13, 0x08, 0x17, 0x1B, 0xA2, 0x3B,
+	0xDC, 0x6D, 0x5A, 0x08, 0x04, 0x58, 0x38, 0xAC, 0x84, 0xBB,
+	0x22, 0x64, 0x6B, 0xE6, 0xB9, 0x46, 0x4A, 0xB6, 0x39, 0xD2,
+	0xF4, 0x6D, 0x13, 0x63, 0x7F, 0x79, 0x6F, 0x54, 0x38, 0x72,
+	0x1A, 0x3D, 0x45, 0x28, 0x14, 0x8F, 0x9D, 0xFE, 0x51, 0x02,
+	0x3F, 0x0C, 0xFD, 0xE4, 0x7A, 0xC4, 0xFC, 0x00, 0xF0, 0xF6,
+	0x7E, 0x98, 0x36, 0x40, 0x35, 0x92, 0x3A, 0x42, 0xBE, 0xA6,
+	0xAE, 0x3C, 0x55, 0xF5, 0x4E, 0x41, 0xF4, 0x22, 0x63, 0x80,
+	0x2E, 0xC9, 0x65, 0x73, 0x43, 0x2F, 0xE7, 0xF9, 0xC5, 0x5C,
+	0x21, 0xDD, 0xF5, 0x15, 0x38, 0xE4, 0xDD, 0x92, 0x08, 0x9D,
+	0x75, 0x65, 0x13, 0x28, 0xA5, 0xF9, 0x45, 0x13, 0xE0, 0x8F,
+	0xB2, 0x36, 0x91, 0xAA, 0xBE, 0x87, 0xD2, 0x78, 0x3F, 0xB0,
+	0xEE, 0x0C, 0x4C, 0x8C, 0xD7, 0x56, 0x85, 0x21, 0x43, 0x40,
+	0xC4, 0x26, 0x90, 0xC2, 0x63, 0xF0, 0xC3, 0x49, 0xA0, 0xF0,
+	0x2A, 0xCA, 0xA3, 0x9A, 0x39, 0xA6, 0xAA, 0x98, 0x2B, 0x8E,
+	0xBA, 0x0B, 0xD9, 0x21, 0xC4, 0xC9, 0x97, 0x1B, 0x57, 0x80,
+	0x49, 0x3E, 0xC4, 0x4B, 0xD8, 0x5E, 0xE2, 0x43, 0xC2, 0x13,
+	0x8D, 0x51, 0x28, 0x8B, 0x30, 0x7C, 0x17, 0xB0, 0x58, 0x15,
+	0x5F, 0x56, 0xF8, 0xF3, 0x8F, 0x9A, 0xC0, 0x9B, 0x27, 0x90,
+	0x23, 0x48, 0xED, 0x5E, 0x50, 0xE2, 0x02, 0x26, 0xC0, 0x00,
+	0x02, 0x02, 0xCA, 0xFA, 0x0D, 0x3A, 0xC4, 0xBF, 0x20, 0x04,
+	0xD3, 0xA1, 0x4F, 0xED, 0x80, 0x40, 0x81, 0x15, 0x67, 0x0D,
+	0x65, 0x3E, 0x52, 0x9C, 0x30, 0x20, 0xD2, 0xD8, 0xAC, 0xAF,
+	0x06, 0xE5, 0xDA, 0x8B, 0x8B, 0x3A, 0xCA, 0xDC, 0x59, 0x8F,
+	0x2F, 0x93, 0x53, 0x5B, 0xAC, 0xCE, 0x1F, 0xDF, 0x3B, 0x50,
+	0xBF, 0x70, 0xF1, 0x7A, 0xCC, 0xA2, 0x25, 0x88, 0xD1, 0xA0,
+	0xBC, 0x9D, 0x41, 0x1F, 0x9C, 0x0A, 0x95, 0x27, 0xE2, 0x71,
+	0x4C, 0x1C, 0x14, 0xDB, 0xEA, 0xCD, 0xA3, 0x7C, 0x39, 0x57,
+	0x69, 0x95, 0xA5, 0x04, 0x4F, 0xA3, 0xC0, 0x24, 0xC1, 0x5B,
+	0x39, 0xF4, 0x9F, 0xBC, 0xB2, 0xC3, 0x37, 0x28, 0x1F, 0xFA,
+	0xB9, 0xD7, 0xFF, 0x7A, 0xA2, 0x52, 0x03, 0x1F, 0x96, 0x5B,
+	0xC4, 0x83, 0x08, 0x75, 0xFF, 0xF6, 0xF2, 0xF9, 0x7C, 0x1D,
+	0x09, 0xB4, 0x3B, 0xAE, 0xCD, 0x2E, 0xF2, 0x6F, 0x2F, 0x4F,
+	0xBC, 0x2B, 0x5B, 0x6D, 0x9A, 0x1B, 0xE6, 0x5E, 0xF5, 0xA8,
+	0x93, 0x98, 0xDC, 0x6E, 0x5E, 0x17, 0xCA, 0xAB, 0x90, 0xFD,
+	0xFB, 0x68, 0x1F, 0x67, 0x88, 0x58, 0x85, 0x4F, 0xAA, 0xC3,
+	0x68, 0x40, 0xD5, 0xBC, 0xAC, 0x1D, 0x94, 0xC5, 0xB6, 0x01,
+	0x2A, 0xE8, 0xBD, 0xDD, 0xBB, 0x17, 0x9D, 0x0E, 0x55, 0x62,
+	0x45, 0xFB, 0x21, 0xB6, 0x71, 0x76, 0xEB, 0xCC, 0xF5, 0xE7,
+	0xF1, 0xCD, 0xB7, 0xCA, 0xBD, 0xFF, 0xA9, 0xF7, 0x1A, 0xAA,
+	0x1A, 0xCD, 0xC1, 0x71, 0x62, 0xE3, 0xDD, 0x09, 0x06, 0xAA,
+	0x23, 0xFD, 0xEF, 0x6B, 0xA7, 0x83, 0xD8, 0xE6, 0x70, 0x01,
+	0xF0, 0xEF, 0x69, 0xA9, 0x4B, 0x9B, 0x83, 0x57, 0x77, 0xAD,
+	0x51, 0xBE, 0xBA, 0xF6, 0x2A, 0x6F, 0x1F, 0x97, 0x9A, 0xFE,
+	0xA8, 0xE2, 0xAA, 0x20, 0x51, 0x95, 0xBA, 0xAE, 0x66, 0xB3,
+	0xA8, 0x61, 0xCF, 0x8B, 0xFA, 0x6B, 0x48, 0xC4, 0x22, 0xE1,
+	0xDF, 0x3A, 0x0D, 0xA9, 0x09, 0xF1, 0x66, 0x0C, 0x46, 0x74,
+	0x90, 0x8B, 0x68, 0x00, 0x4F, 0x4F, 0x3A, 0x90, 0x58, 0x56,
+	0xF4, 0x8A, 0x71, 0xB6, 0x1A, 0x91, 0x59, 0x17, 0x5C, 0xC0,
+	0x87, 0x82, 0x7E, 0xB0, 0x81, 0x90, 0xF1, 0x6A, 0x03, 0xB8,
+	0xA0, 0xAB, 0xDD, 0x63, 0x96, 0x48, 0x19, 0x37, 0x1F, 0x0F,
+	0x24, 0x7A, 0x70, 0x48, 0x7D, 0x28, 0x1F, 0xB3, 0xCD, 0x76,
+	0x53, 0x83, 0xC5, 0x53, 0xE8, 0xAB, 0x3A, 0xFC, 0x5B, 0x8A,
+	0xF0, 0x5A, 0x0F, 0xEF, 0xFF, 0xB0, 0xC1, 0x61, 0x61, 0x58,
+	0x4A, 0x8C, 0x1C, 0x20, 0xFC, 0x46, 0x07, 0x58, 0xF0, 0x20,
+	0x81, 0x66, 0x28, 0x0E, 0xC2, 0x16, 0xAB, 0x98, 0xFF, 0x6E,
+	0x24, 0xAC, 0x78, 0x42, 0xAE, 0x7D, 0xAB, 0x6F, 0xB4, 0x11,
+	0x1C, 0x0C, 0x40, 0xF8, 0xF4, 0x93, 0x63, 0xE4, 0x6A, 0xEB,
+	0xC5, 0xD9, 0x6E, 0x35, 0xC9, 0xA7, 0x2D, 0x49, 0xEA, 0x5D,
+	0x69, 0x73, 0x06, 0x1C, 0xC4, 0x7E, 0x46, 0xFD, 0x09, 0x88,
+	0x77, 0x77, 0xE7, 0xEB, 0x31, 0x34, 0x16, 0x72, 0x76, 0x1B,
+	0x4E, 0xF8, 0x67, 0x9F, 0xCA, 0x1C, 0x67, 0x4E, 0xD8, 0x88,
+	0xAA, 0x01, 0x27, 0x8E, 0x08, 0x70, 0xF8, 0x0B, 0x23, 0xF6,
+	0x84, 0x47, 0x2F, 0x4E, 0x5F, 0xB7, 0x2C, 0x39, 0xBF, 0x61,
+	0xEC, 0x6D, 0x24, 0x5C, 0x57, 0xBE, 0xAE, 0x19, 0x20, 0xBE,
+	0x55, 0x40, 0x1D, 0xB7, 0x5F, 0xC3, 0xF6, 0x5B, 0x19, 0xC6,
+	0x8A, 0x94, 0x23, 0x5C, 0x95, 0x33, 0x4C, 0x90, 0xE0, 0x46,
+	0xAC, 0x0A, 0x1D, 0x50, 0xFB, 0x0A, 0xAB, 0xA2, 0xEB, 0x2A,
+	0x21, 0xBF, 0x15, 0xD5, 0x9E, 0x80, 0x3B, 0x16, 0xB0, 0x3F,
+	0x6F, 0x6F, 0xF6, 0xBE, 0x92, 0xA1, 0x2F, 0x83, 0xA8, 0x3C,
+	0xA6, 0xE7, 0x86, 0xCD, 0x3B, 0x96, 0xCE, 0xF1, 0x36, 0x7C,
+	0x69, 0xD9, 0xD5, 0x0F, 0xC1, 0x4C, 0x7A, 0xE5, 0xAF, 0xAC,
+	0x86, 0x90, 0x98, 0x3D, 0x2B, 0x94, 0xA2, 0x7C, 0x5B, 0xF7,
+	0x27, 0xCD, 0xE5, 0x93, 0x60, 0x2C, 0x47, 0xE3, 0xFA, 0x18,
+	0xCB, 0xEB, 0xDB, 0x0A, 0x49, 0x99, 0x0F, 0xAE, 0x02, 0x26,
+	0xC0, 0x00, 0x02, 0xF3, 0x51, 0xA3, 0x96, 0x54, 0xDA, 0xE9,
+	0x09, 0x47, 0x82, 0x50, 0xB8, 0x82, 0x39, 0x98, 0x54, 0x81,
+	0x54, 0x91, 0x2C, 0xE6, 0xBC, 0x84, 0x03, 0x07, 0x26, 0x6D,
+	0x0F, 0x5E, 0x2B, 0x45, 0xF5, 0x1D, 0x7B, 0xD6, 0x14, 0x03,
+	0xD7, 0x09, 0x64, 0xEE, 0x05, 0xBA, 0xE0, 0x74, 0x67, 0x02,
+	0xF5, 0x7E, 0x42, 0x42, 0xEC, 0x56, 0xE0, 0x9E, 0x82, 0x88,
+	0x58, 0x3C, 0x96, 0xAF, 0x37, 0x95, 0x49, 0xC8, 0x87, 0xBD,
+	0xFE, 0x7A, 0x6B, 0x4D, 0x37, 0xEE, 0x7C, 0xAA, 0x18, 0x5F,
+	0x7E, 0x0B, 0x28, 0xA3, 0x95, 0x23, 0x42, 0xAB, 0xC1, 0xFA,
+	0x41, 0xAE, 0xD5, 0xBD, 0x67, 0xA6, 0xC4, 0x7C, 0xAC, 0x2D,
+	0xEF, 0x64, 0xC2, 0x5D, 0x30, 0x94, 0xF3, 0x97, 0x49, 0x00,
+	0x39, 0x28, 0x57, 0x5D, 0x31, 0xBB, 0x1D, 0x10, 0x17, 0xE7,
+	0x56, 0x55, 0xDF, 0x4C, 0xDD, 0xA6, 0x64, 0x02, 0xBC, 0x1C,
+	0x2B, 0x4C, 0x30, 0xBF, 0x89, 0x7C, 0xFC, 0x7E, 0x84, 0xBC,
+	0x51, 0x97, 0x6C, 0x74, 0x5B, 0x08, 0xE0, 0x96, 0x84, 0x81,
+	0xF3, 0x17, 0x6B, 0xD6, 0xF6, 0x66, 0x06, 0x1B, 0x33, 0x4D,
+	0xF8, 0xED, 0xC0, 0x53, 0x8B, 0x35, 0x6B, 0x85, 0x4F, 0x37,
+	0x0F, 0x87, 0xF3, 0x85, 0x72, 0xAE, 0xCB, 0x3A, 0x23, 0x97,
+	0xC0, 0xF6, 0xE7, 0x53, 0xDF, 0x57, 0x0E, 0x8E, 0x0B, 0x66,
+	0x2A, 0xA2, 0x9D, 0xA8, 0xE2, 0x60, 0x57, 0xCA, 0x27, 0x7E,
+	0xB1, 0xDB, 0x7B, 0x6A, 0xB0, 0xBE, 0xB5, 0x47, 0xEE, 0xE6,
+	0xBA, 0x0E, 0xB2, 0x71, 0x0B, 0xF7, 0xE4, 0x27, 0x9D, 0x25,
+	0xAA, 0x3F, 0xA9, 0x1A, 0x5B, 0xD9, 0x9D, 0xBB, 0x20, 0x32,
+	0x37, 0xE1, 0xD3, 0x4A, 0xBA, 0x45, 0x9E, 0x00, 0x10, 0x3F,
+	0x21, 0x6E, 0xA2, 0xCE, 0x30, 0xA0, 0x2A, 0x5B, 0x31, 0x51,
+	0x05, 0xA1, 0x51, 0xED, 0x89, 0x5E, 0xB1, 0x09, 0xE6, 0x71,
+	0xD8, 0x42, 0xFD, 0xA1, 0x04, 0x83, 0xFB, 0x09, 0x4F, 0x90,
+	0x4D, 0x7E, 0x5A, 0xB9, 0x4C, 0xC9, 0xA3, 0x57, 0x4E, 0x54,
+	0x98, 0xB3, 0xBD, 0xB7, 0x52, 0x9D, 0xDE, 0xF3, 0xD3, 0xE0,
+	0x9C, 0x2D, 0x97, 0x46, 0x1B, 0xF9, 0x75, 0x37, 0x5D, 0x0A,
+	0xA3, 0x4A, 0x18, 0x35, 0x80, 0xC5, 0x08, 0xA8, 0x37, 0x09,
+	0x44, 0x92, 0xB1, 0x74, 0xFE, 0x28, 0x95, 0x55, 0xB6, 0x08,
+	0xA0, 0x75, 0xE9, 0xA0, 0x4B, 0x8E, 0xE6, 0x61, 0x17, 0x2A,
+	0xED, 0x15, 0x0B, 0x6C, 0x7C, 0xC3, 0x82, 0x57, 0x90, 0xC5,
+	0xFF, 0xD8, 0xA5, 0xBF, 0xAA, 0xBE, 0xCF, 0x8E, 0x06, 0xFF,
+	0x27, 0xDA, 0x40, 0x24, 0xDD, 0xC0, 0xBE, 0x4E, 0x19, 0x9D,
+	0x23, 0xA2, 0x3A, 0x70, 0x64, 0xEB, 0xF6, 0xA7, 0xE9, 0x71,
+	0x57, 0xE9, 0x63, 0x03, 0xAE, 0xEC, 0x73, 0x21, 0x23, 0x8D,
+	0x61, 0x5A, 0x10, 0x54, 0xF9, 0x80, 0xE7, 0x47, 0x45, 0xD4,
+	0x8B, 0x16, 0xEE, 0x2B, 0xD8, 0xC1, 0xEE, 0x0F, 0x4F, 0x78,
+	0x40, 0x00, 0xB6, 0x25, 0x81, 0x2A, 0x37, 0x4D, 0x71, 0x92,
+	0xFA, 0x56, 0x3F, 0xDC, 0x91, 0x01, 0x27, 0xC7, 0x17, 0xFD,
+	0x27, 0x55, 0x6F, 0x32, 0x14, 0xE7, 0xEA, 0x18, 0xDA, 0x4A,
+	0x70, 0x10, 0xF8, 0x72, 0x78, 0xA1, 0xC1, 0x13, 0x5F, 0x1B,
+	0x98, 0x93, 0xC2, 0xBF, 0x29, 0xA3, 0x59, 0x79, 0x15, 0x57,
+	0x17, 0xE5, 0x66, 0x7A, 0x3B, 0x8E, 0xB3, 0x3B, 0x9E, 0xC0,
+	0x77, 0xBD, 0x2D, 0x95, 0x26, 0xF0, 0xD5, 0xB4, 0x30, 0xC8,
+	0x0D, 0xCA, 0xB5, 0xDE, 0xB2, 0x21, 0x27, 0x9A, 0x27, 0xAF,
+	0x89, 0xB4, 0x0D, 0x1B, 0x5A, 0x43, 0x3E, 0x69, 0x76, 0x25,
+	0xAC, 0x42, 0x23, 0x5F, 0x5A, 0xA6, 0xDB, 0xE6, 0x77, 0x9D,
+	0x2A, 0x99, 0x1B, 0xE7, 0x47, 0x05, 0x06, 0x47, 0x01, 0x14,
+	0x0D, 0xEA, 0xF5, 0x28, 0x3A, 0x5B, 0x87, 0xF0, 0xFB, 0x7C,
+	0x96, 0x39, 0x6C, 0x4A, 0x48, 0xA5, 0x7A, 0x94, 0xB0, 0xB8,
+	0xBB, 0x03, 0xDA, 0xEA, 0x4F, 0xD1, 0x5B, 0x8B, 0x9D, 0x0A,
+	0x5E, 0xAB, 0xD8, 0x89, 0x5C, 0x4D, 0xD1, 0xA7, 0xC4, 0x8A,
+	0x02, 0x26, 0xC0, 0x00, 0x02, 0x14, 0x04, 0xA6, 0x12, 0xC1,
+	0x4E, 0x67, 0x67, 0x6C, 0xEE, 0x9E, 0x7A, 0x55, 0x00, 0xCB,
+	0x12, 0x7B, 0x69, 0x4C, 0x94, 0x57, 0x73, 0x71, 0xC8, 0x45,
+	0xAA, 0x04, 0x75, 0x85, 0xED, 0x68, 0x7D, 0x09, 0xD5, 0x4A,
+	0xD0, 0x86, 0xDB, 0x0B, 0xC3, 0x80, 0xD1, 0x11, 0xB3, 0x59,
+	0xCF, 0xBD, 0x13, 0x7B, 0xD2, 0x30, 0xDF, 0xDD, 0x41, 0xD7,
+	0xBC, 0x34, 0x11, 0x85, 0x58, 0x2A, 0x8E, 0x2B, 0xDC, 0x00,
+	0x78, 0x94, 0x28, 0x52, 0xD9, 0x0C, 0x70, 0xCB, 0x7D, 0xE9,
+	0xCF, 0x7C, 0x11, 0x91, 0x09, 0xA8, 0xD7, 0xBC, 0xC8, 0xA1,
+	0xDF, 0xF3, 0xB4, 0x25, 0x3A, 0x88, 0x02, 0xF0, 0xBE, 0x8E,
+	0x89, 0x2B, 0xA6, 0x43, 0x88, 0xD0, 0xCC, 0x27, 0x91, 0x77,
+	0x8D, 0x01, 0x32, 0xA6, 0x0C, 0x3D, 0x86, 0x76, 0x03, 0x4F,
+	0x01, 0xF6, 0x02, 0xB3, 0xD0, 0x7A, 0x39, 0x78, 0x1E, 0xF2,
+	0x35, 0xB6, 0xB3, 0xC9, 0x50, 0xE7, 0x0A, 0xD1, 0x3C, 0xB4,
+	0xE2, 0x02, 0x60, 0x13, 0x8A, 0x0F, 0x15, 0xEE, 0x48, 0x67,
+	0x84, 0x9E, 0x8E, 0x56, 0x22, 0xB9, 0x0A, 0xE2, 0x36, 0xDE,
+	0x97, 0x4E, 0x9F, 0x0A, 0xE0, 0xB8, 0x2A, 0x0D, 0x07, 0x7F,
+	0xCE, 0x76, 0xEA, 0x58, 0x54, 0xBC, 0x7A, 0xA1, 0x87, 0x15,
+	0x3F, 0xCE, 0xDA, 0x58, 0xA4, 0x51, 0x36, 0x49, 0xB0, 0x23,
+	0xC0, 0x55, 0xFB, 0xE2, 0x47, 0xB6, 0xD6, 0x31, 0x90, 0xA9,
+	0x99, 0x2A, 0xC3, 0x59, 0xAE, 0x60, 0x03, 0xC2, 0x56, 0xC0,
+	0x03, 0xA9, 0x3E, 0xF0, 0xE9, 0x59, 0x30, 0xD5, 0x90, 0x15,
+	0x72, 0x32, 0x30, 0xD1, 0xFA, 0xDD, 0xB3, 0x09, 0xF0, 0x1A,
+	0xA3, 0x6E, 0x5E, 0xBB, 0xDE, 0x58, 0x08, 0x91, 0xFB, 0xA0,
+	0xEC, 0x45, 0x7F, 0x05, 0x90, 0x78, 0xCF, 0x6F, 0x66, 0xF4,
+	0x2A, 0x79, 0x93, 0x33, 0x17, 0x07, 0x86, 0xE6, 0xEC, 0xFD,
+	0xEC, 0x07, 0x74, 0x17, 0x26, 0x84, 0x52, 0x54, 0x9A, 0xBC,
+	0xDE, 0xEE, 0xD7, 0xE9, 0x2F, 0xA7, 0x60, 0xA6, 0x54, 0x74,
+	0xB9, 0x83, 0x6D, 0xE6, 0xB7, 0x46, 0xDC, 0xC8, 0x09, 0x36,
+	0x25, 0x1E, 0x8B, 0x61, 0x94, 0x2D, 0xBA, 0xE2, 0xAB, 0xE6,
+	0xD0, 0xDB, 0x9C, 0x13, 0x74, 0x25, 0xDA, 0xD7, 0x69, 0x69,
+	0xFA, 0x52, 0x3C, 0x15, 0xBB, 0xFC, 0x5D, 0xE2, 0x6E, 0xA5,
+	0x26, 0x35, 0x65, 0xF4, 0xE0, 0x29, 0x77, 0xCF, 0xAB, 0xF9,
+	0xAB, 0x8C, 0x9D, 0x7D, 0x60, 0xA4, 0xA0, 0x3D, 0x43, 0xB6,
+	0x9D, 0xAE, 0x04, 0x46, 0x8A, 0xE2, 0x3B, 0x4C, 0xC8, 0xA4,
+	0x5D, 0x61, 0xB4, 0x5B, 0x8B, 0x2E, 0xD5, 0x2A, 0x07, 0x27,
+	0x6A, 0x34, 0x04, 0xBA, 0xF8, 0x72, 0x32, 0x99, 0x97, 0x8C,
+	0xC0, 0xCD, 0x35, 0x68, 0xB8, 0xA9, 0x45, 0x76, 0xA5, 0xD4,
+	0x17, 0x36, 0xB1, 0x25, 0xF7, 0x47, 0x69, 0x30, 0x68, 0x14,
+	0x0B, 0x9C, 0x38, 0xB1, 0x29, 0x16, 0x88, 0xAD, 0xDF, 0x31,
+	0x7E, 0x3C, 0x5F, 0xA4, 0x0D, 0x86, 0x5A, 0x29, 0x37, 0xA9,
+	0x1B, 0xD5, 0x68, 0x9F, 0xE0, 0xE6, 0x32, 0x42, 0x12, 0x37,
+	0x99, 0xC5, 0xB8, 0xA1, 0xD3, 0x5B, 0x90, 0x9C, 0xAD, 0x86,
+	0x6B, 0x03, 0x82, 0x91, 0xD9, 0xF9, 0xDC, 0xD5, 0x41, 0x7B,
+	0xF3, 0xE4, 0x08, 0x92, 0xCA, 0x6A, 0xAA, 0xBD, 0xFE, 0x25,
+	0x50, 0xDC, 0x2C, 0x00, 0x65, 0x59, 0x9B, 0xD3, 0x30, 0xD2,
+	0x39, 0xC0, 0x4D, 0xFD, 0x8C, 0x9D, 0x88, 0xD3, 0x52, 0xD6,
+	0xC0, 0xA0, 0x1C, 0x08, 0x0B, 0x1F, 0x91, 0xAF, 0x60, 0x56,
+	0xED, 0x8B, 0x37, 0xD3, 0x15, 0x08, 0x5C, 0xEA, 0xFA, 0x03,
+	0x0A, 0x54, 0x92, 0x96, 0x34, 0x4F, 0x14, 0x0E, 0xD5, 0xB4,
+	0xA0, 0x2E, 0xC0, 0xEC, 0x93, 0x8F, 0xA5, 0xF3, 0x82, 0x5F,
+	0x0D, 0xA8, 0xBD, 0x28, 0x4B, 0x1C, 0x65, 0xC1, 0x97, 0x5B,
+	0xEE, 0x99, 0xC5, 0xC2, 0xB9, 0x34, 0x4D, 0xDB, 0x6E, 0x42,
+	0x26, 0x93, 0x49, 0x83, 0x36, 0x25, 0x72, 0x03, 0x08, 0xE2,
+	0xE6, 0x67, 0x01, 0xBC, 0x7A, 0x10, 0x7A, 0xBC, 0x6B, 0x0B,
+	0x4A, 0x94, 0x02, 0x26, 0xC0, 0x00, 0x02, 0x72, 0x08, 0xBA,
+	0x77, 0xE2, 0x2F, 0x48, 0xD4, 0x9E, 0xC4, 0x23, 0x45, 0x55,
+	0xF1, 0x0B, 0x1B, 0x50, 0x47, 0x8C, 0x40, 0x7C, 0xF7, 0xE4,
+	0xCF, 0xD6, 0x0A, 0x0A, 0xD3, 0x7F, 0x35, 0x85, 0x84, 0x78,
+	0xF2, 0x28, 0xEA, 0x14, 0x06, 0x2A, 0xC0, 0x53, 0x22, 0x45,
+	0x9B, 0xDA, 0xE9, 0xEE, 0x98, 0x5D, 0xEC, 0xEC, 0xEF, 0xA1,
+	0x1A, 0xDD, 0x7C, 0xE2, 0x29, 0xFF, 0x2B, 0x8A, 0x00, 0x49,
+	0xD6, 0x2E, 0x7C, 0x50, 0x26, 0x29, 0x65, 0x97, 0xB4, 0xA8,
+	0x6B, 0x38, 0x95, 0xC0, 0x7F, 0x41, 0xAD, 0xD5, 0xA2, 0x54,
+	0x37, 0xE1, 0x72, 0x3A, 0x28, 0x58, 0xCA, 0x88, 0xB4, 0xF8,
+	0x34, 0x43, 0xFF, 0xE4, 0xE4, 0xC2, 0x37, 0x0B, 0x72, 0x77,
+	0x2B, 0x94, 0x8C, 0xB8, 0xCD, 0x72, 0x1E, 0xDB, 0x0A, 0xFA,
+	0x86, 0x0E, 0xBC, 0x76, 0xDE, 0x89, 0x20, 0xBB, 0x1A, 0xC3,
+	0x07, 0xAA, 0x0F, 0x0D, 0xED, 0x58, 0x42, 0x74, 0x44, 0xD0,
+	0x89, 0x61, 0x25, 0xAF, 0xC0, 0x18, 0xFE, 0x16, 0xC9, 0x37,
+	0x03, 0x11, 0x11, 0xEC, 0x9F, 0xFF, 0x2B, 0x00, 0x4F, 0x37,
+	0xB6, 0xEC, 0x54, 0x0A, 0xA1, 0x68, 0xE5, 0x69, 0x38, 0xD5,
+	0x55, 0x9E, 0x94, 0xAF, 0x3D, 0x67, 0xFF, 0x4D, 0x5D, 0x66,
+	0x1D, 0xD0, 0x45, 0x1B, 0xF9, 0x23, 0x5F, 0xCF, 0x18, 0xFB,
+	0x3F, 0x13, 0x0A, 0x2E, 0x86, 0xC4, 0x44, 0x28, 0xAB, 0x72,
+	0x78, 0x77, 0x14, 0xCA, 0x70, 0xBF, 0x3E, 0x79, 0x47, 0xAB,
+	0x3D, 0x22, 0xB9, 0x57, 0xB8, 0x04, 0x4B, 0x62, 0x2A, 0x26,
+	0x4C, 0xEE, 0x80, 0xF4, 0x1C, 0x5C, 0xE3, 0xFF, 0x23, 0xC8,
+	0x7C, 0x27, 0x90, 0xC8, 0x61, 0xC3, 0x7C, 0xC8, 0x5B, 0x46,
+	0xB8, 0xCC, 0x8A, 0x67, 0xFC, 0xB9, 0xF1, 0xE7, 0x21, 0x68,
+	0x47, 0x37, 0x9D, 0xEB, 0x14, 0xC4, 0x55, 0x02, 0x43, 0xA6,
+	0xAA, 0x50, 0xE2, 0x78, 0x66, 0xE9, 0x55, 0x2D, 0x4C, 0x84,
+	0xDF, 0x81, 0xCF, 0x0C, 0xD4, 0x36, 0xCA, 0x3D, 0xF7, 0xEE,
+	0x2A, 0x5D, 0x10, 0xC9, 0xEA, 0x19, 0xF2, 0xF3, 0xBD, 0x42,
+	0xA9, 0xE1, 0xA6, 0xD1, 0x84, 0xE9, 0x1A, 0x26, 0xDC, 0xBE,
+	0x72, 0x43, 0xC7, 0x79, 0x92, 0xD9, 0x5F, 0x7C, 0x42, 0xCD,
+	0xFF, 0x76, 0xBE, 0xB9, 0x99, 0x60, 0x6B, 0x5E, 0xAD, 0xAC,
+	0x62, 0xAD, 0xFD, 0x58, 0x1C, 0x4E, 0xC6, 0x6D, 0xE7, 0xF9,
+	0x2E, 0xD1, 0xEC, 0x9F, 0x98, 0xAE, 0x4F, 0xB6, 0xE1, 0xB3,
+	0x77, 0xDD, 0xA4, 0x5D, 0x24, 0x76, 0xF0, 0xED, 0xBE, 0x19,
+	0xB1, 0x98, 0x85, 0x08, 0xAB, 0xF0, 0x39, 0x94, 0x1D, 0x12,
+	0xCA, 0x8B, 0xD2, 0xCC, 0x97, 0x44, 0xCB, 0x89, 0x9B, 0x66,
+	0x50, 0x51, 0x64, 0x9E, 0xB1, 0x9E, 0x2C, 0xAA, 0xE5, 0x91,
+	0x59, 0x53, 0xB1, 0x5E, 0xB3, 0xBB, 0x99, 0x00, 0x53, 0xA9,
+	0xC1, 0x6C, 0x59, 0x46, 0xFD, 0xCB, 0x53, 0x83, 0xDD, 0x37,
+	0xA1, 0xA3, 0x65, 0x26, 0xC6, 0x48, 0x6D, 0x15, 0xE8, 0xC1,
+	0xE3, 0x45, 0x10, 0x6E, 0x8A, 0xE1, 0xDB, 0x10, 0xDB, 0x58,
+	0x16, 0x5C, 0x31, 0x2E, 0x06, 0xA8, 0xAE, 0xD7, 0xB2, 0x11,
+	0x55, 0x07, 0x2E, 0x57, 0x57, 0x02, 0x48, 0xC0, 0x8B, 0x59,
+	0x8C, 0xBE, 0x1A, 0x47, 0x52, 0x3E, 0xD0, 0x05, 0xEA, 0xBC,
+	0x86, 0xEA, 0x31, 0xD9, 0x58, 0x52, 0xCF, 0x7D, 0xD2, 0x30,
+	0x4E, 0x0D, 0x24, 0x6F, 0x39, 0xF6, 0xEB, 0xC8, 0x5D, 0xE4,
+	0xFF, 0x8D, 0xB9, 0x71, 0x02, 0x71, 0x67, 0x89, 0xFA, 0xB8,
+	0x4F, 0xC9, 0x77, 0x78, 0x60, 0x36, 0xDF, 0x0E, 0x96, 0xAC,
+	0x4F, 0x44, 0x8A, 0x2C, 0xE5, 0x8C, 0xC3, 0x96, 0x79, 0xE2,
+	0x43, 0x75, 0xF5, 0x59, 0xC0, 0x81, 0x0A, 0x54, 0xC2, 0xA3,
+	0x28, 0x8A, 0x32, 0xCE, 0x91, 0x5A, 0x91, 0x06, 0x45, 0xEB,
+	0x34, 0x1A, 0x87, 0xF9, 0x57, 0x91, 0x0D, 0x34, 0x7F, 0x82,
+	0x91, 0x82, 0xC5, 0x26, 0xCB, 0xB3, 0x4F, 0xF2, 0x20, 0x6A,
+	0x02, 0x95, 0x73, 0x7B, 0x4F, 0x4E, 0xAF, 0x8A, 0x40, 0x83,
+	0xFE, 0xF9, 0xD2, 0xFD, 0x02, 0x26, 0xC0, 0x00, 0x02, 0x0E,
+	0xA2, 0xA8, 0x59, 0xF0, 0x82, 0x17, 0x4C, 0x0E, 0xF3, 0x83,
+	0xA1, 0xB6, 0x36, 0x83, 0xCB, 0xFB, 0xA2, 0x66, 0x53, 0x65,
+	0x40, 0x40, 0xAA, 0x3D, 0x82, 0x62, 0x54, 0x0A, 0x27, 0x6A,
+	0xD6, 0x07, 0xAF, 0x91, 0xCF, 0x9B, 0x89, 0x58, 0xBC, 0xCE,
+	0x74, 0x87, 0x9C, 0x7E, 0x30, 0xF3, 0x06, 0x2B, 0xF1, 0xB4,
+	0x70, 0x9D, 0xAA, 0x41, 0xD7, 0x25, 0x75, 0xE5, 0x72, 0x25,
+	0x00, 0xC7, 0x21, 0x9D, 0xEE, 0xD1, 0x24, 0x16, 0x0B, 0x12,
+	0x22, 0x88, 0xB8, 0x9D, 0xA5, 0x38, 0xA0, 0x50, 0x39, 0x27,
+	0xAE, 0x10, 0xF6, 0x9A, 0x0B, 0x77, 0x56, 0x3F, 0x96, 0xDF,
+	0x22, 0xE5, 0xEA, 0xAC, 0x8F, 0xDF, 0xDD, 0x78, 0xEF, 0x5A,
+	0x7B, 0x50, 0x72, 0x98, 0x92, 0xDD, 0x94, 0xB5, 0xDB, 0x99,
+	0xCE, 0xF2, 0x7A, 0xF3, 0xFA, 0x80, 0xD3, 0xCD, 0x1F, 0xCA,
+	0xA2, 0x2E, 0x21, 0x94, 0xF2, 0xB3, 0x71, 0x7C, 0x07, 0xE6,
+	0xB9, 0x68, 0x1E, 0x13, 0x02, 0x15, 0xC8, 0x34, 0xA0, 0xB5,
+	0xD9, 0x95, 0x1A, 0x9B, 0x57, 0xE7, 0xAF, 0xB0, 0xE1, 0xA7,
+	0x95, 0xF2, 0x36, 0xA3, 0xF9, 0xC5, 0x2C, 0xF0, 0xC3, 0xE1,
+	0xD1, 0x26, 0xA1, 0x8F, 0xE6, 0x07, 0xFB, 0x1F, 0x03, 0xFF,
+	0xA5, 0x81, 0xF5, 0x5D, 0x21, 0x3B, 0x93, 0x66, 0x1A, 0x78,
+	0x6F, 0xD4, 0x77, 0xB3, 0x91, 0x26, 0x6F, 0x1F, 0x5A, 0x8B,
+	0x0F, 0x07, 0xEA, 0x24, 0x5F, 0x5E, 0x68, 0x9F, 0x89, 0x75,
+	0x00, 0x23, 0x1C, 0x80, 0x55, 0x86, 0x93, 0x58, 0x94, 0x41,
+	0x37, 0x0D, 0x23, 0xD3, 0x09, 0x72, 0x40, 0x79, 0xA2, 0x52,
+	0x0D, 0xA3, 0x40, 0x3F, 0x54, 0x7E, 0x59, 0x55, 0x5B, 0x7D,
+	0x0C, 0x52, 0xAA, 0x97, 0x0C, 0xC6, 0xCB, 0x0B, 0x6C, 0x83,
+	0x45, 0x28, 0x62, 0x09, 0x0A, 0x74, 0x27, 0x1D, 0x4D, 0x02,
+	0x07, 0xB3, 0xA5, 0x83, 0x9A, 0x43, 0xB3, 0x68, 0xF7, 0x97,
+	0x3E, 0xD7, 0x34, 0x04, 0x83, 0xC7, 0x6F, 0x64, 0xB8, 0x0B,
+	0xB9, 0xE9, 0x94, 0x46, 0xB9, 0x4D, 0xA7, 0xB4, 0x26, 0xF7,
+	0x9C, 0x05, 0x94, 0x8B, 0xBE, 0x93, 0x03, 0xA7, 0x73, 0x65,
+	0xAB, 0xC5, 0xE1, 0x2B, 0x3B, 0x4C, 0x56, 0x1F, 0x11, 0x7B,
+	0xD3, 0xC0, 0x77, 0x48, 0x42, 0x27, 0x8D, 0x2A, 0xAA, 0x1E,
+	0x18, 0x41, 0x76, 0xA1, 0x80, 0x99, 0x52, 0x50, 0x66, 0x7B,
+	0x27, 0x4B, 0x49, 0xA1, 0xE8, 0xCA, 0xF1, 0x3E, 0x60, 0x2E,
+	0x93, 0xEF, 0x4A, 0x20, 0x3C, 0xC4, 0xBB, 0x14, 0xD3, 0x8F,
+	0x14, 0xAF, 0xC0, 0xF8, 0x4B, 0xC6, 0x49, 0x1A, 0x3B, 0x17,
+	0x43, 0xC2, 0xAB, 0xF0, 0x01, 0xFC, 0x6E, 0x67, 0x86, 0xAC,
+	0xE4, 0x6F, 0xF2, 0x26, 0xF2, 0xEC, 0x15, 0xA1, 0x96, 0x81,
+	0xDD, 0xCF, 0xCA, 0xB4, 0xE1, 0x5A, 0xA0, 0xF5, 0xBB, 0x70,
+	0xEB, 0xF9, 0xA6, 0x28, 0x66, 0xC3, 0xBE, 0xB9, 0xBD, 0xDD,
+	0xEF, 0x8E, 0x9E, 0x3C, 0x91, 0x50, 0x38, 0x61, 0x40, 0x25,
+	0x4D, 0xCD, 0xA0, 0xAF, 0xFE, 0x57, 0xB8, 0x96, 0xDD, 0x2B,
+	0x52, 0x29, 0x91, 0x7A, 0x31, 0xE8, 0x9A, 0xBB, 0xC9, 0x70,
+	0x2B, 0xE1, 0x40, 0x3A, 0x9F, 0xB7, 0x31, 0xBE, 0xE5, 0x46,
+	0xDA, 0x8A, 0xDE, 0x13, 0x22, 0x87, 0x70, 0xFE, 0x96, 0x40,
+	0x9F, 0xC1, 0x2B, 0xFE, 0x83, 0x31, 0xE9, 0xA5, 0x4C, 0x37,
+	0xEB, 0xFD, 0xFB, 0x2C, 0xBD, 0x0C, 0x1F, 0xB2, 0x62, 0x32,
+	0x0E, 0x76, 0x9A, 0x2C, 0xC2, 0x84, 0x34, 0xA0, 0x6D, 0x72,
+	0x21, 0x47, 0xF9, 0x3E, 0xC6, 0x5C, 0xEE, 0xB6, 0xE1, 0xD9,
+	0x2E, 0xDF, 0x50, 0xD6, 0x2C, 0x9B, 0x44, 0xBE, 0xF0, 0x01,
+	0x8E, 0xB4, 0x34, 0x38, 0x9C, 0x6C, 0x3E, 0x26, 0xB2, 0x4C,
+	0x8E, 0xF0, 0x41, 0x2F, 0x07, 0x0E, 0xE9, 0x69, 0x1C, 0x0A,
+	0x00, 0x05, 0xB0, 0x09, 0xA7, 0x07, 0x18, 0x41, 0xD1, 0xF7,
+	0x22, 0xE4, 0x85, 0x64, 0xB7, 0x83, 0xF7, 0xB1, 0xE2, 0xAC,
+	0x2E, 0xD9, 0x83, 0x81, 0x18, 0xCB, 0xBD, 0xEE, 0xD9, 0x09,
+	0x99, 0xBA, 0x95, 0x66, 0x1F, 0xBA, 0x02, 0x26, 0xC0, 0x00,
+	0x02, 0x67, 0x72, 0x24, 0xB5, 0xFE, 0x8C, 0x50, 0x84, 0x47,
+	0x41, 0x6A, 0x29, 0x1F, 0x17, 0xB2, 0x9E, 0x02, 0x67, 0x70,
+	0x55, 0x03, 0x3F, 0x8F, 0x07, 0x20, 0x91, 0x6B, 0x22, 0x7F,
+	0x06, 0xC3, 0xC9, 0x0A, 0xB5, 0x07, 0x0D, 0x91, 0x5F, 0x87,
+	0x6D, 0xE2, 0xEE, 0x2B, 0x01, 0xE7, 0x45, 0x3F, 0x89, 0x1C,
+	0x8B, 0x12, 0x33, 0x23, 0x61, 0x64, 0x3F, 0x4B, 0xF1, 0x27,
+	0x0E, 0x8B, 0x7B, 0x7E, 0x64, 0x2E, 0xDE, 0xE0, 0x3F, 0x3E,
+	0x5C, 0xAE, 0x8C, 0x73, 0xB2, 0x8B, 0x62, 0x0F, 0xF9, 0xEB,
+	0xF0, 0x74, 0xBD, 0xB9, 0xCC, 0x43, 0x80, 0xC3, 0x05, 0x31,
+	0x53, 0x6F, 0x72, 0x42, 0x8E, 0x14, 0xAD, 0xF0, 0x45, 0x36,
+	0x88, 0xE4, 0xF9, 0x0F, 0xD9, 0xCA, 0x1E, 0x82, 0xC2, 0x89,
+	0x44, 0xC3, 0x69, 0xC6, 0xDD, 0x27, 0xB5, 0xCA, 0xCF, 0x56,
+	0x23, 0x5D, 0x50, 0xF9, 0x69, 0x87, 0xCF, 0x4D, 0x2F, 0xA8,
+	0xEE, 0xD4, 0x55, 0x2A, 0xC7, 0x3A, 0x2D, 0x03, 0xCD, 0x38,
+	0xDE, 0x4F, 0x29, 0x91, 0x14, 0xAD, 0x39, 0x05, 0x77, 0x5F,
+	0x41, 0x48, 0x30, 0x63, 0xE6, 0x81, 0x40, 0x68, 0x75, 0x8D,
+	0xC5, 0x70, 0x2D, 0xC9, 0xB9, 0x10, 0x75, 0xF3, 0x28, 0x91,
+	0x99, 0x97, 0x16, 0x2E, 0x7C, 0xAD, 0x50, 0x80, 0x40, 0x00,
+	0xEE, 0x8F, 0x59, 0xA1, 0x8F, 0x82, 0xDE, 0x1E, 0xDB, 0x56,
+	0xA1, 0xD6, 0x2E, 0x06, 0x9D, 0x42, 0xCF, 0xA0, 0xB7, 0x1F,
+	0x37, 0x22, 0x02, 0x2E, 0x33, 0xAE, 0xE4, 0x7B, 0x7C, 0xC6,
+	0x11, 0x5E, 0xF6, 0xA5, 0x5B, 0x54, 0x8B, 0x28, 0x54, 0x01,
+	0x4C, 0x41, 0x49, 0x8E, 0xAD, 0x22, 0xBB, 0x67, 0x7A, 0xF3,
+	0xEC, 0xE3, 0x93, 0xE4, 0x3A, 0x71, 0xB2, 0x82, 0xC4, 0x8A,
+	0x7B, 0x99, 0xA7, 0x6B, 0x69, 0x28, 0xE3, 0xC5, 0x89, 0xF7,
+	0x3E, 0xF3, 0xC5, 0xB2, 0x40, 0x91, 0xF8, 0x6A, 0xE3, 0x63,
+	0xB1, 0x5C, 0xE3, 0x79, 0xFF, 0x41, 0xE8, 0x2F, 0xCA, 0x11,
+	0xA2, 0xED, 0x86, 0x59, 0x53, 0x9D, 0xF9, 0xE1, 0x15, 0x5D,
+	0x38, 0x32, 0x69, 0x60, 0x45, 0x20, 0x74, 0xF5, 0xF6, 0x24,
+	0xA2, 0x4E, 0xAE, 0xB5, 0x2F, 0xE2, 0xEE, 0xBD, 0xD3, 0x27,
+	0xE1, 0x90, 0x89, 0x89, 0xA3, 0x7E, 0x2B, 0x73, 0x63, 0xB8,
+	0x36, 0xFA, 0x17, 0x0C, 0x8F, 0x0F, 0xE8, 0xBE, 0xDC, 0x8D,
+	0x52, 0x34, 0xB3, 0x52, 0x0E, 0xB1, 0x97, 0x8D, 0x69, 0xC8,
+	0x27, 0x2E, 0xBC, 0xFC, 0xDB, 0x6C, 0x98, 0xE8, 0x50, 0xF1,
+	0x7A, 0x14, 0xE7, 0xA4, 0x11, 0xD2, 0xDA, 0x71, 0xCB, 0x77,
+	0x88, 0x7B, 0xEE, 0x24, 0x52, 0xF4, 0x83, 0x2F, 0x1B, 0x25,
+	0x73, 0x7D, 0x57, 0xAE, 0x78, 0x42, 0xC7, 0x7F, 0x84, 0xDB,
+	0x67, 0x7A, 0x81, 0xAB, 0xB5, 0xC4, 0x41, 0x38, 0xA0, 0x8D,
+	0x8C, 0x50, 0x1F, 0x56, 0xF6, 0x9A, 0x2B, 0x57, 0x89, 0x20,
+	0xA9, 0xE9, 0x1E, 0x55, 0x22, 0xD7, 0x88, 0xFA, 0x5D, 0x5F,
+	0x51, 0x5C, 0x7C, 0x17, 0x6E, 0x1D, 0x1A, 0xE3, 0xE6, 0x24,
+	0x67, 0xFE, 0xAA, 0xEF, 0x28, 0x25, 0xCA, 0xD7, 0x9B, 0x44,
+	0x3A, 0x55, 0x6B, 0x2E, 0xDE, 0x7D, 0xD0, 0x1E, 0x16, 0xD6,
+	0xA5, 0xA6, 0x97, 0xE0, 0x35, 0x90, 0x13, 0xD4, 0x16, 0x53,
+	0xA2, 0x66, 0xCB, 0x12, 0xEE, 0xED, 0xA1, 0x42, 0x2C, 0x6A,
+	0xF5, 0x13, 0x63, 0x5B, 0x2A, 0x0C, 0x8C, 0x3A, 0xC4, 0xAA,
+	0x77, 0xFD, 0x03, 0x29, 0x47, 0x2E, 0x4E, 0xCE, 0x26, 0x2E,
+	0xE2, 0x87, 0xD5, 0x49, 0xBE, 0xCE, 0x07, 0x71, 0x8F, 0xBB,
+	0xDF, 0x5E, 0x73, 0x17, 0x28, 0x1B, 0x34, 0x55, 0xA2, 0xB1,
+	0x99, 0x72, 0x90, 0xFD, 0xDF, 0xB3, 0xC7, 0x63, 0xFE, 0x1B,
+	0x75, 0x6B, 0x6D, 0x73, 0xDE, 0x21, 0xD0, 0x18, 0xBE, 0x87,
+	0xE8, 0xDA, 0x74, 0x1E, 0x78, 0x65, 0x6D, 0x30, 0x3B, 0xF1,
+	0xEF, 0xE3, 0x32, 0xD6, 0xF8, 0x77, 0x31, 0xAB, 0x72, 0x72,
+	0xF1, 0x43, 0x5C, 0x9F, 0xF1, 0x99, 0xA9, 0xB7, 0xD6, 0xEA,
+	0x12, 0x4C, 0x96, 0x7E, 0x87, 0x76, 0xD2, 0xAB, 0x02, 0x26,
+	0xC0, 0x00, 0x02, 0x91, 0x0F, 0xB9, 0x72, 0xF7, 0x06, 0x0A,
+	0x2A, 0x92, 0x77, 0x84, 0x0C, 0xBE, 0x44, 0x6D, 0x58, 0x6C,
+	0xBC, 0xE0, 0x19, 0x8A, 0xFC, 0x4C, 0x93, 0xDD, 0xB7, 0xC5,
+	0x45, 0xBF, 0x0A, 0x66, 0x29, 0xEF, 0x95, 0x78, 0x07, 0x6D,
+	0xD0, 0xAA, 0x6C, 0x32, 0xE9, 0xF8, 0xEA, 0x1A, 0x74, 0x79,
+	0x51, 0x39, 0x25, 0xCB, 0x00, 0x7C, 0xD0, 0xE7, 0xBB, 0xC4,
+	0x09, 0xC2, 0xFC, 0x0F, 0xA2, 0x29, 0x45, 0x30, 0x3F, 0x89,
+	0x76, 0x36, 0xF2, 0x92, 0xAF, 0xAF, 0x60, 0xC3, 0x93, 0x3E,
+	0x55, 0x6B, 0x87, 0xAE, 0xBF, 0x6E, 0x2C, 0x54, 0xFD, 0xAF,
+	0x74, 0x4F, 0x0F, 0xAA, 0xC7, 0x4F, 0x4C, 0x6B, 0x18, 0xFE,
+	0xC6, 0x84, 0x27, 0xC0, 0x78, 0xD2, 0xD9, 0xE3, 0x7B, 0x41,
+	0x1C, 0x1C, 0xBF, 0xDA, 0xDF, 0xCC, 0x49, 0x41, 0xC0, 0xC0,
+	0x65, 0xE0, 0x8F, 0x44, 0x19, 0xE4, 0x78, 0xAD, 0xCD, 0xC5,
+	0x5A, 0x9D, 0x11, 0x22, 0x43, 0xD7, 0x6E, 0x39, 0xD5, 0x2B,
+	0xA7, 0x73, 0x3F, 0x99, 0xA8, 0xA3, 0x02, 0x73, 0x99, 0xF0,
+	0x62, 0x87, 0xF4, 0x8B, 0xD7, 0x4F, 0x47, 0x9C, 0x18, 0x72,
+	0x98, 0xB0, 0x33, 0x1B, 0x5E, 0x29, 0x04, 0xEA, 0x71, 0x6B,
+	0x45, 0xCB, 0xC0, 0x9E, 0x15, 0x6E, 0x92, 0xDA, 0x50, 0xC3,
+	0x58, 0x07, 0x29, 0x5E, 0xC5, 0xBD, 0x3B, 0xCE, 0xAC, 0x11,
+	0xE5, 0xBB, 0x3D, 0x7E, 0xB8, 0xC3, 0x1F, 0x94, 0x9F, 0xD9,
+	0x63, 0x35, 0x56, 0x23, 0x45, 0xAF, 0x23, 0xF0, 0x0B, 0x7B,
+	0xE3, 0xFB, 0x81, 0x2E, 0xD3, 0x20, 0xE3, 0x1D, 0x97, 0x84,
+	0xC1, 0x88, 0x77, 0x87, 0x3C, 0xAB, 0xE9, 0x1E, 0x69, 0x04,
+	0x7D, 0x7B, 0xE6, 0x6B, 0xDB, 0xE9, 0xF2, 0xB6, 0x66, 0x10,
+	0x0F, 0x4D, 0x57, 0x3F, 0xF5, 0x3E, 0xDA, 0xEA, 0xBC, 0xD4,
+	0x5B, 0xA1, 0x20, 0xB0, 0x69, 0xC0, 0x8A, 0xA1, 0x28, 0xC0,
+	0xEF, 0xFE, 0x2D, 0x0B, 0xF8, 0x06, 0x23, 0x4B, 0x1C, 0x77,
+	0x0A, 0x10, 0xBF, 0xA7, 0xD9, 0x24, 0x9E, 0xA2, 0x1B, 0x90,
+	0x6C, 0xFD, 0x85, 0x3A, 0xD3, 0xC6, 0x39, 0xA7, 0xA2, 0x28,
+	0xC5, 0xC1, 0x2F, 0xD2, 0x28, 0xDC, 0x4F, 0x63, 0x0D, 0x6B,
+	0x54, 0xB4, 0x27, 0x95, 0xC3, 0xC1, 0xE0, 0x08, 0xB0, 0x9D,
+	0x7F, 0x6C, 0xFE, 0xF5, 0x65, 0xCE, 0x0E, 0xCE, 0x24, 0xCD,
+	0xAE, 0x4C, 0x0F, 0x82, 0x54, 0x48, 0xAF, 0x37, 0xAE, 0x64,
+	0x31, 0x07, 0xEE, 0xE6, 0x6B, 0xEF, 0xAF, 0x7F, 0x2A, 0x07,
+	0x2E, 0xB6, 0xD0, 0xAC, 0x70, 0x87, 0x19, 0x9E, 0xD3, 0xFB,
+	0x89, 0xBD, 0xBA, 0xFF, 0xB9, 0x92, 0x4B, 0x25, 0x65, 0xA3,
+	0x09, 0xCD, 0xFE, 0x32, 0x19, 0xF3, 0xF4, 0x05, 0xA4, 0x13,
+	0xDF, 0x65, 0xA3, 0x4C, 0xE8, 0xF3, 0x3C, 0xA3, 0x11, 0x95,
+	0xEA, 0xC3, 0x34, 0xCA, 0xC6, 0xB9, 0x34, 0x6B, 0x53, 0x18,
+	0xCC, 0xF9, 0x44, 0x28, 0x1E, 0x90, 0x74, 0xA6, 0xB1, 0x59,
+	0x4D, 0xAE, 0x18, 0x53, 0x1D, 0x60, 0xCF, 0xCC, 0x15, 0xDA,
+	0x4E, 0x2B, 0x6F, 0x8F, 0x4E, 0x39, 0x89, 0xE3, 0x67, 0x05,
+	0xB5, 0x9C, 0x36, 0x5B, 0x3C, 0xA0, 0x9F, 0x46, 0x24, 0xE7,
+	0x61, 0x42, 0x1C, 0xA7, 0xD7, 0x27, 0x5B, 0x5C, 0xF5, 0xFD,
+	0x5F, 0x03, 0x79, 0x5F, 0x36, 0xA0, 0x85, 0x13, 0x40, 0x48,
+	0x8C, 0x44, 0xB4, 0x64, 0x54, 0x83, 0xD8, 0xB6, 0x83, 0xB8,
+	0x4E, 0x46, 0xCF, 0x98, 0xA5, 0x1C, 0xAA, 0xF0, 0x03, 0xD6,
+	0x26, 0x80, 0x0F, 0x2A, 0xC5, 0xF4, 0xD1, 0x28, 0x0C, 0x5F,
+	0xF8, 0x63, 0x8D, 0x68, 0x26, 0x3A, 0xE5, 0x5D, 0xAE, 0x17,
+	0x64, 0xF2, 0x60, 0x73, 0x6D, 0xBD, 0x75, 0x90, 0xD2, 0x50,
+	0xC4, 0x9A, 0x4C, 0x3E, 0x4B, 0xAE, 0x57, 0xBE, 0xCD, 0x42,
+	0xC1, 0xA7, 0xCB, 0xAD, 0x73, 0x15, 0xF6, 0x69, 0x36, 0xB5,
+	0xC3, 0x15, 0x1D, 0xC0, 0x09, 0x4B, 0x6B, 0x4F, 0xA3, 0xD2,
+	0xAF, 0x9E, 0xF4, 0x9A, 0xC1, 0x5F, 0xF5, 0x0A, 0x95, 0x93,
+	0xA4, 0x57, 0xA9, 0x61, 0x8D, 0x98, 0xB1, 0x19, 0xCC, 0x95,
+	0x02, 0x26, 0xC0, 0x00, 0x02, 0x6E, 0x4C, 0x0F, 0xB4, 0x2D,
+	0xBC, 0x3A, 0x51, 0xAE, 0x16, 0xBA, 0xEC, 0x72, 0x04, 0x3E,
+	0x8D, 0x3D, 0x4E, 0x0E, 0x29, 0x4B, 0x6F, 0x00, 0xF5, 0xE2,
+	0x12, 0x0B, 0xAC, 0x73, 0x7E, 0xA5, 0x12, 0x8D, 0x59, 0x45,
+	0x73, 0xC8, 0xB9, 0x57, 0xCB, 0x78, 0xAD, 0xA3, 0xBD, 0x95,
+	0x18, 0x04, 0x86, 0xB9, 0xFE, 0x9F, 0xBF, 0x67, 0x03, 0x08,
+	0xA9, 0x91, 0xF3, 0x71, 0x1A, 0x6C, 0xD2, 0x74, 0xAA, 0x40,
+	0xCC, 0x30, 0x7D, 0x0B, 0x78, 0xEF, 0xC7, 0xDC, 0x95, 0xC3,
+	0x29, 0x5D, 0x18, 0xBC, 0x38, 0x7C, 0xFE, 0x65, 0xEF, 0x44,
+	0xF0, 0x61, 0x91, 0x3E, 0x59, 0x75, 0x96, 0x84, 0x75, 0xD9,
+	0xA2, 0x99, 0xDB, 0xFA, 0x9B, 0x7D, 0x09, 0x06, 0x8D, 0xDA,
+	0xCC, 0xA1, 0x6E, 0x2E, 0xDB, 0x12, 0x83, 0xA6, 0x2E, 0x9C,
+	0xC8, 0x5A, 0xE9, 0xBB, 0xC3, 0x70, 0x16, 0x0C, 0x6E, 0x2A,
+	0xDA, 0xD0, 0xDF, 0xF4, 0xAF, 0xAA, 0x42, 0x0A, 0x16, 0x8C,
+	0x73, 0xAA, 0xAD, 0x75, 0x7B, 0xCC, 0x29, 0xB5, 0x18, 0xB9,
+	0x58, 0xBF, 0xDB, 0x91, 0x44, 0x74, 0x25, 0x3E, 0x54, 0xC3,
+	0x2D, 0x8A, 0x2E, 0x85, 0xD0, 0x92, 0x02, 0xAE, 0xA1, 0xF9,
+	0x70, 0xC5, 0x33, 0x49, 0x57, 0xE1, 0x90, 0x48, 0x54, 0x73,
+	0x04, 0xAD, 0x1E, 0x41, 0xE8, 0xD7, 0x24, 0xFE, 0x85, 0x83,
+	0x47, 0x0F, 0x9C, 0x33, 0xF9, 0xF5, 0x10, 0xAD, 0x42, 0xFA,
+	0x7B, 0xE7, 0x1C, 0x35, 0xB3, 0x8D, 0x0E, 0x2E, 0xD7, 0xCB,
+	0x40, 0x32, 0x9C, 0x64, 0x3A, 0x68, 0x33, 0xF3, 0xBE, 0xD9,
+	0xCD, 0xC9, 0x73, 0xEB, 0x67, 0x6E, 0x52, 0x25, 0x2F, 0xD9,
+	0x7A, 0x93, 0x8B, 0x1D, 0x9D, 0xB2, 0xAF, 0xF3, 0xEE, 0x6F,
+	0xB5, 0xC7, 0x8F, 0xD5, 0x4F, 0xC9, 0x7C, 0xAC, 0x05, 0x9A,
+	0x16, 0x82, 0x04, 0xC4, 0xF5, 0x47, 0xD7, 0x61, 0xC7, 0xBC,
+	0x8D, 0x76, 0xA9, 0xFA, 0xA6, 0x17, 0x32, 0x3A, 0x2C, 0x93,
+	0x4D, 0x0B, 0x57, 0x50, 0xF5, 0xD8, 0xE6, 0xB2, 0x52, 0x4F,
+	0xE5, 0x1F, 0xDB, 0xA0, 0x17, 0xEF, 0x44, 0x9A, 0x8D, 0xBF,
+	0x8D, 0xB4, 0x66, 0x11, 0xF2, 0xB1, 0x51, 0x50, 0xB4, 0xDE,
+	0xE0, 0x30, 0x5B, 0x1F, 0x92, 0xAC, 0x30, 0x43, 0xB3, 0x1F,
+	0x32, 0xDC, 0x84, 0x2F, 0x29, 0xE9, 0x78, 0xBC, 0x5A, 0xA2,
+	0x9A, 0xA8, 0xFC, 0xE2, 0xB4, 0xE7, 0x8C, 0xCC, 0x65, 0xA9,
+	0x37, 0x85, 0xD8, 0x0B, 0xB3, 0xA3, 0x4F, 0x28, 0xBE, 0x4D,
+	0x45, 0x97, 0xAA, 0x2E, 0xEC, 0x6D, 0x4C, 0x9E, 0x19, 0x5F,
+	0xD1, 0x47, 0x87, 0x8A, 0x76, 0xCF, 0x20, 0xCC, 0xDC, 0xC5,
+	0x37, 0xDD, 0x45, 0xE8, 0x13, 0xFD, 0x72, 0x92, 0x7E, 0x97,
+	0xA4, 0xA7, 0x58, 0xC1, 0x0E, 0xB6, 0x9E, 0x20, 0xCC, 0xD3,
+	0x5F, 0x94, 0x25, 0xD3, 0xB8, 0xB0, 0x51, 0x82, 0x45, 0x64,
+	0x4B, 0x6D, 0xCB, 0x9F, 0xC6, 0x5F, 0xDD, 0x1D, 0x1B, 0xB0,
+	0x7D, 0xEB, 0xEC, 0x85, 0xB0, 0x90, 0x36, 0xE0, 0xE5, 0x5F,
+	0x66, 0xA3, 0x69, 0x72, 0x2C, 0x35, 0x52, 0x45, 0x8A, 0xD9,
+	0x31, 0xCB, 0xD9, 0xDD, 0xF0, 0x62, 0x6A, 0x4B, 0x47, 0xEF,
+	0x13, 0xD7, 0x65, 0x17, 0xC4, 0xE9, 0xD1, 0xA3, 0xF4, 0x5E,
+	0x17, 0x73, 0x4C, 0xA5, 0x81, 0xD7, 0xBD, 0xB3, 0x34, 0x98,
+	0x61, 0x01, 0x50, 0x1D, 0x7D, 0x7A, 0x82, 0x38, 0x93, 0x9F,
+	0x0A, 0xAC, 0x42, 0x5B, 0x10, 0x4C, 0x57, 0x10, 0x4A, 0x97,
+	0xD3, 0xCC, 0x8F, 0x23, 0xD1, 0xA6, 0xCB, 0xAD, 0x47, 0x8F,
+	0x41, 0x24, 0x2B, 0xEB, 0xB9, 0x0B, 0x71, 0x1C, 0x27, 0x31,
+	0x91, 0x21, 0x77, 0xA2, 0x01, 0x2D, 0x6F, 0x9B, 0x99, 0x5F,
+	0xAC, 0xD4, 0x8E, 0x1D, 0xBB, 0x2C, 0xA3, 0xA1, 0xA2, 0xC3,
+	0x2A, 0xAD, 0x6B, 0xA4, 0x62, 0xAA, 0xAE, 0xEA, 0xEE, 0x10,
+	0x30, 0xB3, 0x9E, 0x2A, 0x13, 0x09, 0xF8, 0xC4, 0x2B, 0x8C,
+	0xE1, 0x51, 0x62, 0xE7, 0x5D, 0xE8, 0x00, 0x50, 0x46, 0x7E,
+	0xC7, 0x9A, 0x3F, 0x21, 0xD9, 0x0C, 0xB3, 0xA7, 0x2E, 0x5F,
+	0x4B, 0x42, 0x02, 0x26, 0xC0, 0x00, 0x02, 0x12, 0xA7, 0x07,
+	0x49, 0x33, 0x98, 0x05, 0x3D, 0xD0, 0x14, 0xD2, 0x03, 0xA9,
+	0xA5, 0x66, 0x6B, 0x53, 0x43, 0x97, 0x83, 0x21, 0x8F, 0x46,
+	0x67, 0x3C, 0x86, 0xDB, 0x7B, 0xBA, 0xD2, 0xC5, 0xB4, 0x09,
+	0x0F, 0x2D, 0xD3, 0x4E, 0xD2, 0xB7, 0xFC, 0x75, 0x52, 0x16,
+	0x8A, 0x56, 0x5A, 0xCC, 0xE6, 0xFE, 0x5C, 0xE8, 0xAE, 0x48,
+	0x7F, 0x81, 0xF2, 0x46, 0x00, 0xE5, 0x53, 0xAF, 0xC7, 0x01,
+	0x12, 0x9A, 0xF9, 0xDC, 0x96, 0x79, 0xC6, 0x61, 0xC6, 0xAC,
+	0xCE, 0x0B, 0x6C, 0x9F, 0xFD, 0x16, 0xCA, 0xD1, 0xD6, 0xAB,
+	0xE4, 0xCB, 0x64, 0x88, 0xF7, 0x17, 0x7F, 0xCD, 0xBB, 0x8F,
+	0xF9, 0x5C, 0x75, 0x7C, 0x3D, 0xBE, 0x03, 0x68, 0x30, 0xA8,
+	0xC7, 0x82, 0x62, 0xDD, 0x5A, 0x42, 0x3D, 0x8D, 0x02, 0xD1,
+	0x68, 0xF2, 0x04, 0x0B, 0xFA, 0xC2, 0x23, 0xB9, 0x26, 0xAA,
+	0x5F, 0x43, 0x7D, 0xE5, 0xD2, 0x97, 0xB8, 0xD5, 0x6F, 0xBE,
+	0x56, 0xC6, 0xCA, 0xE7, 0x56, 0xDA, 0x14, 0x4A, 0xA6, 0x35,
+	0x3F, 0xBF, 0xBC, 0x9D, 0xCD, 0x51, 0x55, 0x98, 0xAB, 0xC0,
+	0x42, 0xC8, 0x7D, 0x67, 0xB3, 0xDD, 0x2B, 0x6B, 0xA0, 0x06,
+	0x9F, 0x13, 0x79, 0xBC, 0xE2, 0xC8, 0x9E, 0xC3, 0xFF, 0x94,
+	0x9E, 0x3D, 0x60, 0xAE, 0xB3, 0x28, 0x44, 0xC5, 0xE1, 0xD8,
+	0x40, 0x7F, 0xC0, 0x8F, 0x93, 0xFC, 0xDA, 0xEC, 0x70, 0x14,
+	0xB1, 0x07, 0xA1, 0x21, 0x6D, 0xA2, 0xA3, 0xEF, 0x80, 0xF1,
+	0xC4, 0xCC, 0xA1, 0x77, 0xD9, 0xA3, 0xD9, 0x31, 0xFB, 0xC5,
+	0xE5, 0xDE, 0xC1, 0xF2, 0x6F, 0xFC, 0x73, 0x35, 0xC4, 0x1D,
+	0x2C, 0x15, 0x57, 0x64, 0x57, 0x4A, 0x0D, 0x4F, 0xCB, 0xD3,
+	0x3E, 0x12, 0x82, 0x5C, 0xFC, 0xED, 0x7B, 0xA1, 0x3F, 0x72,
+	0x1E, 0x6B, 0x12, 0x6A, 0xB9, 0x55, 0xD2, 0xC3, 0x04, 0x52,
+	0x01, 0xBB, 0x54, 0x20, 0x0A, 0xA5, 0xDA, 0xDD, 0x2D, 0x56,
+	0xF4, 0xD0, 0x08, 0x62, 0x1E, 0x68, 0x30, 0x40, 0x57, 0x8A,
+	0xC2, 0xDD, 0xBF, 0x0D, 0x7B, 0x28, 0xE0, 0x82, 0x1A, 0x3F,
+	0xDC, 0xEA, 0x07, 0xC4, 0x32, 0x74, 0x14, 0x18, 0x9C, 0x00,
+	0x9C, 0x91, 0xC0, 0x7A, 0x0A, 0x18, 0x89, 0xAD, 0xA8, 0x3D,
+	0x42, 0x21, 0x0F, 0x08, 0x8D, 0xA4, 0xD5, 0xA7, 0x08, 0x09,
+	0x3C, 0x21, 0x7E, 0x4E, 0x17, 0xB9, 0x1A, 0x80, 0x22, 0x45,
+	0x33, 0x43, 0x24, 0xDD, 0xC4, 0x66, 0xD2, 0xB4, 0x4E, 0x40,
+	0xD5, 0x5F, 0xEA, 0x86, 0x9F, 0x8B, 0x41, 0x9D, 0xD0, 0x96,
+	0xC9, 0x64, 0x32, 0x39, 0xA1, 0x89, 0x56, 0x7E, 0x1D, 0x22,
+	0x08, 0x08, 0xB5, 0x60, 0x1F, 0x52, 0x41, 0xA4, 0x8F, 0xC0,
+	0x52, 0x6B, 0xA7, 0xBB, 0x52, 0x0E, 0x96, 0xEE, 0x62, 0x62,
+	0x1A, 0xCF, 0x4C, 0x65, 0x59, 0x32, 0x2D, 0x3C, 0x1D, 0x40,
+	0x57, 0xB0, 0xE9, 0xF2, 0xBA, 0x04, 0xD2, 0xBE, 0x22, 0xA9,
+	0x93, 0x8E, 0xC2, 0x32, 0x06, 0x20, 0xDC, 0x9F, 0xE5, 0xC2,
+	0x57, 0xFC, 0xC5, 0xDE, 0xE7, 0xD3, 0xCA, 0xB6, 0xD8, 0x85,
+	0xB2, 0xE1, 0xAD, 0x23, 0x47, 0x02, 0x3F, 0xD7, 0xBD, 0x51,
+	0x2A, 0x6B, 0x33, 0x2D, 0x23, 0x6D, 0xD5, 0x72, 0x1F, 0xEC,
+	0x8F, 0x7F, 0x1B, 0x22, 0x2D, 0x9E, 0x44, 0x58, 0xE0, 0xA3,
+	0x50, 0x54, 0xCF, 0x6B, 0x5E, 0x59, 0x7A, 0xF0, 0xDA, 0x2E,
+	0x9C, 0xC4, 0xD3, 0xD9, 0x83, 0x56, 0xBB, 0x09, 0x58, 0xFF,
+	0x00, 0xDD, 0xDA, 0x57, 0x5C, 0xC3, 0xED, 0x10, 0x6E, 0xD6,
+	0xD0, 0xF0, 0xB9, 0xD1, 0x2C, 0x1E, 0x4E, 0x33, 0xA7, 0x44,
+	0x9C, 0x87, 0xB2, 0x91, 0x16, 0x2C, 0x44, 0x1E, 0x66, 0x79,
+	0x06, 0x12, 0x26, 0xB6, 0x36, 0x1F, 0xBA, 0x56, 0x9F, 0xAB,
+	0x64, 0x63, 0xE4, 0x90, 0x75, 0x72, 0xF9, 0x35, 0x77, 0x2B,
+	0x38, 0xE5, 0x4F, 0x29, 0xF1, 0x4C, 0xD8, 0xBD, 0x20, 0x60,
+	0x65, 0x26, 0x57, 0xCE, 0x52, 0x4B, 0x18, 0xD4, 0xDF, 0xCE,
+	0xC0, 0x78, 0x60, 0x83, 0xD4, 0xDF, 0xE9, 0xA2, 0x61, 0x37,
+	0x78, 0x7D, 0xEB, 0xE5, 0x02, 0x26, 0xC0, 0x00, 0x02, 0x47,
+	0xA5, 0x8E, 0xA4, 0x38, 0x2C, 0xDC, 0x61, 0xFB, 0xD1, 0x29,
+	0xFD, 0x30, 0xA5, 0xEE, 0xB0, 0x2F, 0xF6, 0x53, 0x4B, 0x4E,
+	0xE9, 0x26, 0x67, 0x28, 0xC0, 0x06, 0x59, 0x13, 0x88, 0xF8,
+	0x9B, 0xE8, 0x6B, 0x9E, 0x5A, 0xCF, 0x8D, 0x8D, 0xE1, 0x80,
+	0x1A, 0xE1, 0x4A, 0x59, 0x92, 0x6A, 0x57, 0x38, 0x79, 0x1E,
+	0x5D, 0xA4, 0x35, 0xA5, 0xD3, 0x80, 0x41, 0x97, 0x69, 0xB7,
+	0xDF, 0xE8, 0x07, 0xFA, 0xA6, 0x64, 0xFD, 0xB2, 0xD0, 0x66,
+	0xB4, 0x35, 0x52, 0xCC, 0xC9, 0x82, 0xCF, 0xFA, 0xB3, 0xE0,
+	0xE6, 0x96, 0x35, 0xEF, 0xD5, 0xF6, 0xA1, 0x0B, 0xAD, 0xE0,
+	0x50, 0x7D, 0x9B, 0x36, 0x8D, 0xD2, 0x6E, 0x27, 0x14, 0x2D,
+	0x6D, 0xCE, 0xC2, 0xF8, 0xDA, 0x64, 0xDC, 0xFD, 0xC8, 0x79,
+	0x72, 0x00, 0xE3, 0xF9, 0x3F, 0x40, 0x0D, 0x0F, 0x40, 0x3A,
+	0xE3, 0xFE, 0xEA, 0x93, 0x18, 0x7F, 0x2D, 0xFA, 0x7C, 0x6B,
+	0xCB, 0x45, 0x8C, 0xD5, 0x8E, 0xE3, 0x95, 0x4C, 0xF9, 0x60,
+	0x83, 0x8E, 0x07, 0xC0, 0x17, 0xE9, 0x6C, 0xAF, 0x2C, 0x08,
+	0x04, 0xF5, 0x8B, 0xB7, 0xB8, 0x09, 0xAD, 0x91, 0x02, 0x9A,
+	0x28, 0x25, 0xE7, 0x80, 0x5C, 0xCB, 0x69, 0xA0, 0xDA, 0x43,
+	0x4F, 0x4C, 0x4A, 0xA1, 0xCB, 0x45, 0x0E, 0x2F, 0x87, 0x77,
+	0x43, 0x7E, 0x0E, 0x42, 0xE7, 0x21, 0x2B, 0x73, 0x90, 0x21,
+	0x7B, 0x9B, 0x87, 0xEC, 0x27, 0x76, 0xFF, 0x9F, 0xEB, 0x79,
+	0xF9, 0x70, 0xE6, 0x73, 0x51, 0x4B, 0x8D, 0xE4, 0xB6, 0x76,
+	0xFF, 0x23, 0x71, 0xD9, 0x87, 0x43, 0x29, 0xE4, 0xA0, 0xDE,
+	0xB7, 0xCF, 0x92, 0x03, 0x84, 0x07, 0x17, 0xA1, 0xE6, 0x7B,
+	0x43, 0x14, 0xA3, 0x30, 0xC0, 0x1B, 0x44, 0x91, 0xCF, 0x80,
+	0x48, 0x92, 0x2B, 0x6D, 0x59, 0x8E, 0x63, 0x8C, 0xE8, 0xC3,
+	0xA9, 0x04, 0x33, 0x3F, 0x75, 0x6A, 0x2B, 0x7B, 0xEC, 0x74,
+	0x26, 0xAD, 0x34, 0x68, 0xB9, 0x9F, 0x63, 0xEE, 0xEA, 0x42,
+	0x0D, 0xC7, 0x24, 0x7B, 0xD4, 0x5E, 0x5A, 0x91, 0xF1, 0x41,
+	0x2E, 0x6B, 0x0D, 0xB9, 0x75, 0xCE, 0x51, 0x1E, 0x6E, 0xF2,
+	0x6B, 0x9C, 0xD4, 0xBD, 0xAF, 0x54, 0x63, 0x1A, 0xA0, 0x29,
+	0x65, 0x22, 0x04, 0x9D, 0xE2, 0x6F, 0x37, 0x4B, 0xC2, 0xC2,
+	0x62, 0x1B, 0x94, 0xE0, 0xF9, 0xC8, 0xB0, 0x94, 0x43, 0x29,
+	0x0D, 0x4F, 0x23, 0x4A, 0xBA, 0x83, 0x15, 0x97, 0x96, 0xC8,
+	0x0A, 0x85, 0xD2, 0x80, 0x8B, 0x0C, 0x16, 0x57, 0x32, 0xCA,
+	0xA4, 0xF6, 0x20, 0xB5, 0x49, 0x30, 0xCC, 0xD3, 0x1C, 0xAB,
+	0xE0, 0xAE, 0x52, 0x7B, 0x71, 0x40, 0x80, 0xAC, 0x30, 0x78,
+	0xEE, 0x5A, 0xD3, 0x82, 0x3F, 0x51, 0x34, 0xE8, 0x38, 0xD4,
+	0x8D, 0x09, 0xEB, 0xDC, 0x9E, 0x82, 0xF7, 0xE2, 0xAA, 0xCD,
+	0x2D, 0x17, 0x0C, 0x08, 0x22, 0xAF, 0xED, 0xE4, 0xC0, 0xC1,
+	0xBB, 0x9C, 0x47, 0xC1, 0x23, 0x81, 0x03, 0x85, 0xDD, 0x00,
+	0x5C, 0x4D, 0x7F, 0xF1, 0x02, 0xF8, 0xA9, 0xA1, 0x8E, 0xB1,
+	0xCD, 0xFC, 0x6F, 0xC5, 0x0D, 0x37, 0xD9, 0x83, 0x15, 0x23,
+	0x14, 0x03, 0x54, 0x37, 0xFC, 0xAC, 0xB6, 0xC8, 0x0A, 0x47,
+	0x3F, 0x22, 0x6F, 0xD7, 0xFA, 0xBB, 0x8D, 0x17, 0xB2, 0x7C,
+	0x0F, 0x65, 0xB4, 0xA2, 0x3A, 0x5F, 0x55, 0x34, 0xEC, 0xCA,
+	0x89, 0xDD, 0xD4, 0x44, 0x77, 0x30, 0x9A, 0x20, 0x6A, 0x1A,
+	0x9D, 0xBE, 0x39, 0x25, 0x2E, 0xE2, 0x0C, 0xDD, 0xE0, 0x50,
+	0x8F, 0xD7, 0x38, 0x01, 0xB1, 0x25, 0xC1, 0xFD, 0x06, 0xD0,
+	0x60, 0xC9, 0xEB, 0x1D, 0x77, 0x6D, 0xA2, 0x18, 0xB2, 0x0B,
+	0x03, 0xE6, 0xF7, 0x07, 0x51, 0xFC, 0xAF, 0xE9, 0xD4, 0xFC,
+	0x80, 0x69, 0x1C, 0xE1, 0x82, 0x96, 0x39, 0x37, 0xC1, 0xD3,
+	0xB1, 0x81, 0x62, 0xB7, 0x20, 0x7F, 0xDF, 0xB7, 0x84, 0xD2,
+	0xCC, 0xFB, 0x7E, 0x90, 0xBB, 0x05, 0x1B, 0x81, 0xA2, 0xE0,
+	0x66, 0x11, 0x8A, 0x37, 0x93, 0x0F, 0x67, 0x81, 0x77, 0x03,
+	0xA6, 0xE2, 0x52, 0xB6, 0x0F, 0x9A, 0x02, 0x26, 0xC0, 0x00,
+	0x02, 0x1D, 0x9D, 0x63, 0xD2, 0x5B, 0xB0, 0x79, 0x8A, 0xF4,
+	0x7F, 0x08, 0x9B, 0x5E, 0xAB, 0x6E, 0xD1, 0xCC, 0x2B, 0x7C,
+	0xFF, 0x0D, 0x0E, 0xDD, 0x5F, 0xAA, 0x4C, 0x53, 0x45, 0x53,
+	0x48, 0xCD, 0xCD, 0xF7, 0xBA, 0x5B, 0xB9, 0x84, 0xBB, 0x00,
+	0xC2, 0xF0, 0xFB, 0x30, 0x5F, 0x04, 0x4E, 0x25, 0x4C, 0x06,
+	0x03, 0x8D, 0xC5, 0x37, 0xA6, 0x9D, 0x1C, 0xD8, 0x13, 0xA7,
+	0x96, 0xBE, 0xED, 0x22, 0xD7, 0xBA, 0x9F, 0x4C, 0x2E, 0xF9,
+	0xD0, 0x5B, 0xBB, 0xF8, 0xB8, 0x0A, 0xF3, 0xEC, 0x31, 0x3F,
+	0x84, 0x6E, 0x3A, 0x12, 0x8B, 0x6A, 0x2E, 0x28, 0xCE, 0xB8,
+	0x1A, 0xC6, 0xE6, 0x4A, 0xD9, 0x74, 0x04, 0x24, 0xD8, 0x79,
+	0x8D, 0x62, 0x0C, 0xB0, 0xAE, 0xAF, 0x67, 0xB4, 0xA1, 0x3D,
+	0x93, 0x1D, 0xA2, 0x52, 0x98, 0x3F, 0x57, 0x73, 0x94, 0xB6,
+	0x94, 0xBD, 0x0F, 0x42, 0x6A, 0x64, 0x7B, 0x17, 0xAC, 0x8D,
+	0x46, 0xD0, 0xE4, 0x1B, 0x8C, 0x56, 0xB6, 0x47, 0xCB, 0xFD,
+	0x56, 0x61, 0x6E, 0xA0, 0xBF, 0x6B, 0x8E, 0x68, 0x05, 0x55,
+	0xA4, 0xB3, 0x8C, 0x76, 0x48, 0x73, 0x4C, 0x8D, 0x9D, 0xA2,
+	0xA0, 0xA1, 0xFB, 0xD0, 0x33, 0x32, 0x39, 0xD2, 0x10, 0x1C,
+	0x3C, 0x93, 0xC9, 0xCA, 0x6A, 0x6E, 0x7C, 0xB6, 0xF1, 0x03,
+	0xF3, 0x45, 0x51, 0x05, 0x48, 0x30, 0xF0, 0xC6, 0x84, 0xFD,
+	0x4E, 0x3B, 0x03, 0xE0, 0x62, 0xB8, 0x53, 0x55, 0xB6, 0xB8,
+	0x02, 0x7C, 0xB9, 0xD5, 0x5C, 0xA2, 0x9B, 0x97, 0x8A, 0xA4,
+	0xDF, 0x42, 0xEB, 0x91, 0x2C, 0x98, 0x82, 0xA9, 0xAE, 0xB0,
+	0x13, 0xF6, 0x6E, 0x90, 0x42, 0xFE, 0xD3, 0xAA, 0x1E, 0xBA,
+	0x69, 0xFC, 0xF8, 0x20, 0xEA, 0x5D, 0xA8, 0xFE, 0x64, 0x56,
+	0x26, 0x4C, 0x6C, 0x69, 0x8F, 0xAC, 0x30, 0xCF, 0xAE, 0x8B,
+	0xD5, 0x63, 0x10, 0xDD, 0xCE, 0x6E, 0x0C, 0xAB, 0x31, 0x46,
+	0xDF, 0x8A, 0x33, 0x28, 0x8A, 0x1C, 0xEB, 0xBE, 0xAA, 0x71,
+	0x44, 0x5C, 0x89, 0xEA, 0x00, 0x34, 0x23, 0xEB, 0x18, 0x83,
+	0x7F, 0xB1, 0x9B, 0x3A, 0xBF, 0x08, 0x68, 0xB6, 0xC8, 0xE2,
+	0xD8, 0x2D, 0x5E, 0xA2, 0x99, 0xB9, 0xBC, 0xF8, 0x31, 0xD1,
+	0xFD, 0x31, 0xD4, 0x32, 0x05, 0x58, 0x5C, 0xFB, 0xCD, 0x8C,
+	0xFF, 0x75, 0x99, 0x93, 0xC8, 0x0C, 0xE8, 0xE8, 0x60, 0x11,
+	0xB8, 0x5F, 0x15, 0xB5, 0x89, 0x47, 0xE1, 0x1C, 0x23, 0x1B,
+	0x8E, 0x56, 0x02, 0xD3, 0x5F, 0xBD, 0xA9, 0x9F, 0x67, 0x06,
+	0xCA, 0x0C, 0x6E, 0x9C, 0xFB, 0x2D, 0x3A, 0xE3, 0xF6, 0x2C,
+	0x72, 0x86, 0xCD, 0x68, 0xAC, 0x7B, 0x22, 0xA3, 0x01, 0x15,
+	0x50, 0xB7, 0xA0, 0x05, 0x88, 0xD0, 0xDF, 0xBD, 0xDA, 0x3B,
+	0xC4, 0xFF, 0x40, 0xA1, 0x46, 0x55, 0x28, 0xB3, 0x0C, 0x1E,
+	0xF8, 0xE9, 0x0A, 0x39, 0xD1, 0x66, 0xDF, 0x5B, 0x2B, 0x2C,
+	0xCA, 0xA5, 0x36, 0x32, 0x0D, 0xAC, 0x8E, 0xDF, 0x75, 0x9A,
+	0xE5, 0x8B, 0xE5, 0x99, 0x6B, 0xD6, 0xB7, 0x83, 0x6B, 0xFE,
+	0xEA, 0xC9, 0x71, 0xB5, 0xB9, 0xAE, 0xBE, 0x74, 0xB6, 0x58,
+	0x28, 0x06, 0x23, 0xCF, 0x8D, 0x09, 0xBC, 0xE3, 0x18, 0x6C,
+	0xFA, 0x53, 0x02, 0xE8, 0x3D, 0x44, 0xB3, 0xFE, 0xB3, 0x11,
+	0x70, 0x10, 0xDF, 0xC3, 0x93, 0x64, 0x0F, 0x19, 0x35, 0xF0,
+	0x82, 0x3A, 0xE3, 0x04, 0xE3, 0x1D, 0xFE, 0x52, 0xE8, 0x52,
+	0xA1, 0x7B, 0x19, 0x23, 0x8E, 0x3F, 0x5D, 0x16, 0x60, 0xCB,
+	0x13, 0x1A, 0x26, 0x6D, 0xDB, 0x82, 0xEB, 0x72, 0xEE, 0x76,
+	0x77, 0x36, 0xEC, 0xEE, 0x09, 0x90, 0xAF, 0x35, 0x25, 0x5A,
+	0x29, 0x61, 0x7A, 0xE6, 0x8C, 0x6C, 0x2A, 0x3B, 0x3B, 0xC4,
+	0xC5, 0xD4, 0xCF, 0x41, 0x40, 0x04, 0xF3, 0x0F, 0x4B, 0x1B,
+	0x99, 0x7D, 0xCF, 0x1F, 0xC5, 0xEB, 0xC5, 0xF5, 0xA1, 0x16,
+	0xA2, 0x2A, 0x2E, 0xD5, 0x78, 0xC5, 0xAD, 0x9C, 0x48, 0x76,
+	0xF2, 0x58, 0xDE, 0x68, 0x19, 0x58, 0x8C, 0xEA, 0xF5, 0xD0,
+	0x54, 0x4F, 0x73, 0x60, 0x92, 0x71, 0x27, 0xF7, 0x02, 0x26,
+	0xC0, 0x00, 0x02, 0x24, 0xC2, 0xE1, 0xD7, 0x77, 0x1A, 0x4D,
+	0x5F, 0x7B, 0xC6, 0xC7, 0x52, 0x42, 0x9C, 0x26, 0xBE, 0x75,
+	0x2E, 0x37, 0x00, 0xD8, 0x2C, 0xEF, 0x37, 0xC2, 0xF8, 0x88,
+	0x89, 0xBA, 0x60, 0x35, 0xCE, 0xD5, 0xC4, 0x3D, 0x00, 0x6A,
+	0xF1, 0xE1, 0x66, 0x4C, 0xFF, 0x79, 0xC7, 0xDF, 0x04, 0x99,
+	0x02, 0xEB, 0x0E, 0x9D, 0xBE, 0x2C, 0x06, 0xB8, 0xE1, 0xC8,
+	0xAE, 0xC4, 0xE8, 0xB7, 0xE7, 0x66, 0xEF, 0x01, 0x72, 0x45,
+	0xB2, 0xBF, 0x69, 0xF7, 0xA2, 0x72, 0xEC, 0x91, 0x82, 0x9D,
+	0xE5, 0x91, 0x9A, 0x6D, 0x4D, 0x0D, 0x29, 0x58, 0xE3, 0xA2,
+	0xBB, 0x4F, 0x7B, 0xED, 0xA6, 0xEC, 0x0D, 0x91, 0xF6, 0xE7,
+	0x68, 0x61, 0xDF, 0x8A, 0x1A, 0x5A, 0x2A, 0x21, 0x51, 0x80,
+	0x31, 0xD5, 0xD6, 0xFB, 0xE5, 0x0D, 0x01, 0x49, 0x22, 0x05,
+	0xEE, 0xA2, 0x7A, 0xF6, 0x6C, 0xCD, 0x9D, 0x95, 0x79, 0x7E,
+	0x9D, 0x22, 0x91, 0x59, 0x31, 0x80, 0x55, 0xC9, 0x66, 0xC8,
+	0x33, 0x36, 0x56, 0x65, 0xCC, 0x26, 0x88, 0xE7, 0xC0, 0x01,
+	0xF4, 0x22, 0xF9, 0xE6, 0xF1, 0x18, 0x69, 0xAB, 0x93, 0x80,
+	0x95, 0xBF, 0xA4, 0xB7, 0x7F, 0x56, 0x7D, 0xC0, 0xEE, 0xA7,
+	0x01, 0x5B, 0x9B, 0xA6, 0x80, 0x5A, 0x17, 0x31, 0xC8, 0x93,
+	0xF6, 0x6F, 0xFD, 0x27, 0x9A, 0x09, 0xB8, 0x48, 0x04, 0xD5,
+	0x1F, 0xBB, 0x8B, 0xED, 0xB7, 0x08, 0x43, 0xBF, 0x82, 0xB1,
+	0xAF, 0xD9, 0x35, 0x03, 0xE8, 0x36, 0xB4, 0xCD, 0x74, 0x74,
+	0x30, 0x85, 0x73, 0x1F, 0x51, 0xED, 0xA5, 0xFD, 0x64, 0xFC,
+	0xF1, 0x22, 0x21, 0x36, 0x3C, 0x5E, 0x46, 0x74, 0x9D, 0x94,
+	0x2C, 0x0F, 0xDF, 0x2B, 0x6E, 0x5E, 0xA8, 0x7C, 0x80, 0xA4,
+	0x4C, 0xE4, 0x1A, 0xE2, 0x80, 0x29, 0x5F, 0x85, 0x76, 0x95,
+	0xD0, 0x2D, 0x26, 0x50, 0xB2, 0x14, 0x37, 0xA3, 0x3A, 0x4E,
+	0xB9, 0x68, 0xCB, 0x1D, 0x9A, 0x9B, 0x33, 0xD0, 0x3D, 0x1B,
+	0x0F, 0x3F, 0xA2, 0x95, 0xE0, 0x80, 0xA1, 0x39, 0x03, 0x14,
+	0x5F, 0x21, 0x27, 0x54, 0xB5, 0x4D, 0x1F, 0x7A, 0x9A, 0x1E,
+	0xB1, 0xC9, 0x63, 0xBE, 0xEC, 0x0C, 0xC1, 0x16, 0x80, 0x0F,
+	0xFD, 0x3B, 0x3F, 0xFD, 0x97, 0xF8, 0x4F, 0xD9, 0xFE, 0xC7,
+	0x6A, 0xE5, 0x40, 0x5B, 0xB8, 0x50, 0xA8, 0x94, 0x6F, 0x9F,
+	0xD8, 0x23, 0xE8, 0xBC, 0x16, 0x9B, 0xF8, 0xC5, 0x0C, 0x48,
+	0x28, 0x1B, 0x51, 0x8B, 0x1C, 0x9F, 0x37, 0x97, 0x6B, 0x0B,
+	0x1C, 0x2B, 0xCF, 0x7F, 0x9E, 0xC4, 0x54, 0x8F, 0x4D, 0xBF,
+	0x43, 0xBB, 0x40, 0x20, 0x79, 0x1F, 0x29, 0xF2, 0x43, 0x65,
+	0x0D, 0xC8, 0x16, 0xAC, 0xE4, 0xF3, 0x82, 0x67, 0x01, 0xD9,
+	0x19, 0x80, 0xAD, 0x16, 0x1F, 0xF6, 0xFA, 0xD3, 0xD8, 0x74,
+	0x6F, 0xE5, 0x00, 0x8E, 0x77, 0x95, 0x51, 0x83, 0xD4, 0xF2,
+	0x8B, 0x79, 0x2D, 0xBA, 0xB1, 0x10, 0x0C, 0x0F, 0xCC, 0x7D,
+	0x24, 0x7A, 0xF5, 0xDF, 0x54, 0x54, 0xC0, 0xAF, 0x80, 0x3D,
+	0x7E, 0x9C, 0x8F, 0x27, 0xA7, 0x0A, 0xE4, 0x8C, 0xB7, 0x5C,
+	0x61, 0xF4, 0xAD, 0xB3, 0xD8, 0xA9, 0x1B, 0xEC, 0x13, 0xCB,
+	0xD8, 0xD3, 0x81, 0xBA, 0x9D, 0xCA, 0xD9, 0xAE, 0xC4, 0x43,
+	0x69, 0xF4, 0xDE, 0xF9, 0xE0, 0xFE, 0x5D, 0x53, 0x6D, 0xDA,
+	0x5F, 0xED, 0x5F, 0x30, 0x81, 0x2C, 0xDE, 0x92, 0x04, 0xDE,
+	0x94, 0xBB, 0x45, 0xAF, 0x14, 0x84, 0xC9, 0xE3, 0xBD, 0xBD,
+	0x7F, 0x52, 0xE9, 0x6B, 0x34, 0xCA, 0x06, 0x3A, 0xE1, 0x79,
+	0x22, 0x3C, 0xA8, 0x34, 0xED, 0x7E, 0x26, 0x18, 0x84, 0xDB,
+	0x92, 0x48, 0xFD, 0xD6, 0x82, 0x04, 0x1D, 0x82, 0x1A, 0xA6,
+	0x28, 0x74, 0x31, 0xA5, 0x74, 0x1F, 0xD9, 0x0F, 0xF2, 0xC8,
+	0x4C, 0x38, 0x8F, 0xAF, 0x2A, 0xE0, 0x5F, 0xD6, 0xA4, 0x1C,
+	0xE3, 0xF8, 0x70, 0xD5, 0x4C, 0xF8, 0x3C, 0x92, 0x0A, 0x01,
+	0xEF, 0xB7, 0xEA, 0x57, 0xA5, 0x88, 0x4C, 0x10, 0x68, 0x99,
+	0xC8, 0x4F, 0x1D, 0x67, 0x8E, 0x43, 0x7D, 0x3D, 0x5E, 0x20,
+	0x02, 0x26, 0xC0, 0x00, 0x02, 0x68, 0x4F, 0x5F, 0x8D, 0xC4,
+	0x7F, 0x74, 0xCD, 0xFE, 0xFB, 0x21, 0x22, 0x03, 0x06, 0xFA,
+	0x2E, 0x4C, 0xFF, 0x35, 0xBB, 0x9E, 0x93, 0x44, 0x35, 0x8A,
+	0xFF, 0x97, 0x39, 0x36, 0x8D, 0x53, 0x4D, 0xFA, 0x04, 0xA8,
+	0x98, 0x13, 0x9C, 0xAA, 0x87, 0x0D, 0x8B, 0x50, 0x0D, 0x9C,
+	0xB1, 0xAC, 0x4C, 0x59, 0x9B, 0xA2, 0xE4, 0x4C, 0xFC, 0x46,
+	0xC5, 0xA6, 0x00, 0x4A, 0xA8, 0xD3, 0x24, 0x40, 0x9E, 0x48,
+	0x8F, 0xC0, 0x8C, 0x0E, 0x16, 0x02, 0x3C, 0xF5, 0x12, 0x3D,
+	0x97, 0xCE, 0xDE, 0x11, 0xBE, 0x46, 0xE8, 0x8F, 0x15, 0x3B,
+	0xB3, 0x1D, 0x74, 0xCB, 0xEE, 0x77, 0x2D, 0xEB, 0xAD, 0x87,
+	0x39, 0x85, 0xD7, 0xBC, 0x38, 0x87, 0x2A, 0x0B, 0xB5, 0xB0,
+	0xD1, 0x09, 0x7D, 0x12, 0xC6, 0x4D, 0x9A, 0xF8, 0x00, 0xC5,
+	0xA2, 0xF9, 0x9A, 0xFF, 0x30, 0x5D, 0x6E, 0x79, 0xD7, 0xBA,
+	0xB3, 0xCC, 0x2A, 0x43, 0x61, 0xAC, 0x38, 0x99, 0x10, 0xDF,
+	0x60, 0x94, 0x7B, 0x49, 0xD9, 0xC2, 0x4C, 0x6D, 0x3F, 0xD7,
+	0x38, 0x85, 0xE7, 0x91, 0x26, 0x9E, 0x7F, 0x7E, 0xA4, 0x91,
+	0x9B, 0x92, 0x02, 0xC1, 0x1F, 0xAF, 0x5C, 0x6B, 0xBA, 0x27,
+	0xAD, 0x33, 0xCC, 0xE6, 0x20, 0x23, 0x61, 0xBE, 0x4A, 0xDA,
+	0x28, 0x63, 0xB2, 0xE2, 0xAC, 0xA9, 0x51, 0x50, 0x9A, 0xAB,
+	0xCA, 0x8C, 0x5C, 0xF3, 0x0A, 0x44, 0x03, 0xA9, 0x94, 0x92,
+	0x1D, 0xC5, 0xB2, 0x09, 0xF3, 0x0E, 0xB3, 0x6A, 0x1D, 0x72,
+	0xDC, 0x71, 0x4A, 0xAE, 0x4E, 0x0B, 0x1B, 0xCF, 0xF3, 0xCF,
+	0x4B, 0x38, 0xD1, 0xCA, 0x27, 0xC2, 0x6A, 0x41, 0x0F, 0x3A,
+	0x1D, 0xCD, 0x3E, 0xB1, 0x1A, 0xF7, 0x16, 0x48, 0x4A, 0xAA,
+	0xA7, 0x28, 0x16, 0x07, 0x9B, 0xE0, 0x41, 0x99, 0xF1, 0x47,
+	0x8C, 0x48, 0x6C, 0x2D, 0x93, 0x9E, 0x47, 0x2B, 0x9A, 0x96,
+	0x20, 0x44, 0xF4, 0x2A, 0xCB, 0xB0, 0xDA, 0xBD, 0x17, 0x38,
+	0xCB, 0x45, 0x9F, 0x21, 0xA8, 0x93, 0x26, 0x67, 0x51, 0x36,
+	0x6F, 0x05, 0x4A, 0x08, 0x72, 0xFB, 0xA3, 0x98, 0xBF, 0x9E,
+	0x39, 0xEC, 0xAF, 0xDA, 0x8A, 0xFD, 0xC1, 0xB2, 0xC4, 0x4D,
+	0xFE, 0xCD, 0xBD, 0x7F, 0xF8, 0xCE, 0x4F, 0x7E, 0x4E, 0xBA,
+	0xD1, 0x87, 0x3E, 0x5F, 0x77, 0xA2, 0x96, 0x3E, 0x8B, 0x15,
+	0xDE, 0xE7, 0xBF, 0x7F, 0x97, 0x0F, 0xE1, 0xE7, 0x2F, 0x58,
+	0x5D, 0xEF, 0x56, 0x39, 0x66, 0x63, 0x61, 0x94, 0x3D, 0x31,
+	0xC8, 0x8D, 0xA8, 0xAC, 0xB5, 0x4C, 0x20, 0x1A, 0xD4, 0x18,
+	0x34, 0x61, 0xA2, 0x4F, 0x65, 0xB3, 0x12, 0xFE, 0xA9, 0x02,
+	0xCC, 0x47, 0x8F, 0x1C, 0x39, 0xFD, 0xDB, 0x08, 0x62, 0xFD,
+	0x74, 0x8D, 0xF9, 0xAA, 0x34, 0xCA, 0x20, 0x67, 0xE8, 0xBC,
+	0xAB, 0xED, 0x8C, 0x09, 0xC1, 0xA1, 0xE2, 0x3A, 0x41, 0xB7,
+	0x1D, 0x82, 0x99, 0xAA, 0x79, 0x93, 0xB5, 0x1D, 0x6A, 0xE8,
+	0xFC, 0x31, 0xBF, 0x67, 0xD8, 0xE9, 0x36, 0xD4, 0xBF, 0x9E,
+	0xBF, 0xAB, 0x13, 0x20, 0xE3, 0x01, 0x29, 0x60, 0x28, 0x19,
+	0xD2, 0x0E, 0xBC, 0x21, 0x3E, 0xD6, 0xC0, 0xC3, 0xDD, 0x64,
+	0xFC, 0x98, 0x45, 0x26, 0x9B, 0x5C, 0xCB, 0xE2, 0x76, 0x0A,
+	0x0D, 0x13, 0x1A, 0x7F, 0xEF, 0xE2, 0x44, 0xA3, 0xD8, 0xCE,
+	0xD6, 0x0E, 0x5A, 0xA8, 0x40, 0x7B, 0x9E, 0xA0, 0xBE, 0xD6,
+	0x63, 0x56, 0x77, 0x57, 0x69, 0x2C, 0xF8, 0xB6, 0x8D, 0x08,
+	0xF3, 0x80, 0xA1, 0x2F, 0x53, 0xE2, 0x2F, 0xFD, 0xE6, 0x86,
+	0x91, 0x83, 0x12, 0x7E, 0x73, 0xCF, 0xC8, 0x12, 0x58, 0xCD,
+	0x9B, 0x30, 0x2C, 0x1E, 0xB8, 0x1E, 0xA3, 0x66, 0x27, 0xE9,
+	0x33, 0xB2, 0x57, 0x9B, 0xF7, 0xFC, 0x04, 0xE1, 0xDF, 0xA4,
+	0xC5, 0x7A, 0x39, 0xCE, 0xDF, 0xEB, 0x03, 0x89, 0x37, 0xFB,
+	0xB0, 0x17, 0x12, 0x55, 0x52, 0x60, 0x25, 0xD1, 0xA6, 0x54,
+	0xED, 0xD2, 0xBA, 0xE9, 0x66, 0x5A, 0xCA, 0xE3, 0x71, 0xF8,
+	0xE7, 0x35, 0x1C, 0xAC, 0x00, 0x2C, 0xBD, 0x52, 0x6F, 0xE0,
+	0x96, 0x91, 0x02, 0x26, 0xC0, 0x00, 0x02, 0x02, 0xB1, 0x96,
+	0x3E, 0x04, 0x9B, 0x7A, 0x13, 0x3F, 0xA3, 0x05, 0x16, 0xBF,
+	0x79, 0xE5, 0x67, 0x77, 0x23, 0x1E, 0x4D, 0x4C, 0x26, 0x7C,
+	0x9D, 0x3E, 0xF5, 0x37, 0x49, 0xAC, 0x5C, 0xA7, 0x9F, 0xD7,
+	0x8B, 0x61, 0x4B, 0x21, 0xEC, 0x27, 0x9A, 0x62, 0x75, 0xD1,
+	0xCB, 0xEB, 0x58, 0x98, 0x84, 0xD1, 0xD9, 0xD8, 0x00, 0x0E,
+	0x38, 0xCB, 0x40, 0xE9, 0xC0, 0x87, 0x62, 0x6D, 0xD6, 0xBE,
+	0x5E, 0x47, 0x40, 0xCE, 0x39, 0xD2, 0x28, 0xFF, 0x32, 0x08,
+	0xFB, 0xF1, 0x86, 0xEF, 0xF1, 0x1F, 0xC7, 0x28, 0xE0, 0x2A,
+	0x9B, 0xAA, 0xA7, 0xEC, 0xBA, 0x63, 0x27, 0x98, 0xCC, 0x4C,
+	0x35, 0x48, 0xE2, 0x83, 0xE2, 0xE4, 0x7E, 0xCF, 0xF2, 0x38,
+	0xED, 0x1C, 0xE7, 0x17, 0xCB, 0xAC, 0xCC, 0xDA, 0xF5, 0x3B,
+	0xD3, 0xC5, 0xFE, 0xB5, 0x04, 0x3A, 0xFC, 0xF7, 0x66, 0x66,
+	0x89, 0xB5, 0xAD, 0x1C, 0x18, 0xFE, 0x63, 0xF6, 0x9E, 0x8D,
+	0x73, 0xDC, 0x9D, 0x54, 0xDD, 0x02, 0x3B, 0x1D, 0x3F, 0x3D,
+	0xD1, 0x4C, 0xCB, 0x3C, 0x09, 0x8E, 0x5A, 0x06, 0x5C, 0x03,
+	0x59, 0xF4, 0x7B, 0xF6, 0x39, 0x02, 0x2B, 0xDC, 0x76, 0x82,
+	0x2A, 0x33, 0x34, 0x34, 0x57, 0x9F, 0xC8, 0xF0, 0xF0, 0x14,
+	0x29, 0x0C, 0x6E, 0x92, 0x36, 0x56, 0x3B, 0xA6, 0x68, 0xF0,
+	0x3B, 0x3C, 0xA7, 0x8F, 0x60, 0x85, 0x5D, 0xAD, 0x14, 0xBF,
+	0xA7, 0x8B, 0x8E, 0xED, 0x20, 0x0A, 0x64, 0xB2, 0x05, 0xF9,
+	0x59, 0x45, 0xC0, 0x97, 0x2D, 0x0D, 0x3A, 0x77, 0xC0, 0xBD,
+	0xA2, 0x9F, 0xD4, 0x21, 0xA5, 0x23, 0x7D, 0x1A, 0xE2, 0x4D,
+	0x72, 0x44, 0xF6, 0x3E, 0x2A, 0x12, 0xF6, 0xB3, 0xDD, 0x15,
+	0x63, 0xCC, 0x7A, 0x5E, 0x60, 0xC2, 0xB0, 0xEE, 0x2C, 0x35,
+	0x08, 0x35, 0xE8, 0xA8, 0x08, 0x86, 0xA6, 0xC9, 0xA2, 0x84,
+	0xBF, 0x90, 0x14, 0x92, 0x95, 0x6A, 0x08, 0x39, 0x30, 0xB2,
+	0x94, 0x3E, 0x0D, 0xE9, 0x3B, 0x28, 0xC7, 0x89, 0x6F, 0xFE,
+	0xB9, 0x83, 0x00, 0xE9, 0x9A, 0xA5, 0x47, 0x82, 0xEB, 0xAE,
+	0xA8, 0x2F, 0xD4, 0x89, 0xDB, 0x00, 0xC0, 0xA3, 0xE8, 0x79,
+	0xC8, 0x5D, 0x90, 0xA5, 0x5F, 0xB6, 0x11, 0x42, 0x99, 0x1E,
+	0x7C, 0x9C, 0xB5, 0xA6, 0x90, 0x85, 0xE8, 0xED, 0x14, 0x55,
+	0x99, 0x13, 0x10, 0xFD, 0x94, 0xF6, 0x48, 0x86, 0x26, 0x5A,
+	0x36, 0x15, 0x53, 0xE5, 0x02, 0xD4, 0x46, 0xA4, 0x3B, 0x97,
+	0xB0, 0x65, 0x25, 0xD2, 0x52, 0x08, 0x7D, 0x12, 0x28, 0xC3,
+	0x0A, 0x26, 0xF1, 0xCD, 0x10, 0x90, 0xB0, 0x61, 0x6C, 0x31,
+	0xEE, 0xC4, 0x79, 0x86, 0x36, 0x94, 0x38, 0x26, 0xD8, 0xA0,
+	0x44, 0x90, 0x38, 0x08, 0xCA, 0xCA, 0x8A, 0xEF, 0x6D, 0xFD,
+	0xBF, 0xAC, 0xE2, 0x87, 0xC4, 0xD3, 0xB6, 0x68, 0xA5, 0x02,
+	0x05, 0xB4, 0xC1, 0xA3, 0x38, 0x60, 0x1B, 0x7F, 0xA5, 0xF2,
+	0xA8, 0x17, 0xB0, 0x17, 0x88, 0x0F, 0xE8, 0xE1, 0x25, 0x9C,
+	0x4E, 0x82, 0x37, 0x0C, 0xC3, 0xFF, 0x6D, 0x99, 0x9F, 0xB3,
+	0x8B, 0x92, 0x2B, 0x96, 0x6B, 0xD3, 0xDF, 0x3F, 0x45, 0xD8,
+	0xA2, 0x46, 0xAA, 0x06, 0x7D, 0xA7, 0x57, 0xEC, 0x87, 0x99,
+	0xFA, 0x2F, 0x93, 0x6D, 0x65, 0x77, 0xD3, 0x72, 0x2B, 0x3D,
+	0xFC, 0x9D, 0x0D, 0x2C, 0x88, 0x75, 0x37, 0x4B, 0x18, 0xA9,
+	0x2D, 0xA9, 0xD6, 0xE3, 0x75, 0xFA, 0x29, 0xCE, 0x91, 0x51,
+	0x74, 0xF9, 0x71, 0xFB, 0x0B, 0x1F, 0x24, 0x3D, 0xA8, 0xF3,
+	0x56, 0x67, 0x7A, 0x13, 0xAA, 0xFF, 0x1C, 0x6D, 0xDD, 0x0F,
+	0x14, 0xBC, 0x34, 0x35, 0xE0, 0xAF, 0x7A, 0x55, 0x8C, 0x9A,
+	0xE0, 0xA6, 0x35, 0x1F, 0xAB, 0xC3, 0xF7, 0x14, 0x7E, 0xFF,
+	0x13, 0x64, 0xAF, 0x1C, 0x11, 0x68, 0x25, 0x4D, 0x07, 0x05,
+	0x3F, 0x76, 0x61, 0x29, 0x32, 0xB5, 0xEF, 0xF7, 0x7E, 0xE8,
+	0x5C, 0xE2, 0xAA, 0x17, 0x3F, 0x5C, 0x48, 0xFA, 0x05, 0xB0,
+	0xDF, 0x1F, 0x2B, 0x9B, 0x25, 0xAA, 0xA8, 0x1F, 0x80, 0xF5,
+	0xE5, 0x9C, 0xC2, 0xF5, 0x02, 0x06, 0xC0, 0x00, 0x02, 0x96,
+	0xA3, 0xD9, 0x49, 0x25, 0x73, 0x8B, 0x32, 0xB3, 0xD6, 0x68,
+	0x6E, 0x3F, 0xDE, 0x58, 0xCB, 0xA8, 0x00, 0x34, 0xB2, 0x7D,
+	0x5A, 0x88, 0x7F, 0x1B, 0x3A, 0xA7, 0xD2, 0x56, 0x5B, 0x20,
+	0x6F, 0x6B, 0x43, 0x58, 0xC9, 0x48, 0x1F, 0x76, 0xE3, 0xA5,
+	0x79, 0x0D, 0xD3, 0xC7, 0xBB, 0x76, 0xE8, 0xC2, 0xD5, 0x77,
+	0x2B, 0x39, 0x93, 0x7F, 0x9B, 0x33, 0xB3, 0x0C, 0x12, 0x50,
+	0x8A, 0x95, 0xB3, 0x27, 0xCB, 0x49, 0xDB, 0x3C, 0x6A, 0xB9,
+	0x06, 0xD8, 0x31, 0x8E, 0x14, 0x6A, 0x3F, 0x5B, 0x03, 0x98,
+	0xD8, 0x5C, 0xCA, 0x46, 0x14, 0xDA, 0xAB, 0x51, 0xDF, 0x72,
+	0x3A, 0xAD, 0x8E, 0xDA, 0x9A, 0x44, 0x0E, 0x4C, 0xB0, 0x92,
+	0xF6, 0x6A, 0x0E, 0xC8, 0x37, 0x0F, 0x93, 0x73, 0xB0, 0xB5,
+	0x11, 0x12, 0x3F, 0xCF, 0x29, 0x50, 0x6B, 0xD9, 0x22, 0x2C,
+	0x76, 0x71, 0x07, 0xBC, 0x00, 0x10, 0xB8, 0x54, 0x6A, 0x9A,
+	0x59, 0x82, 0x4E, 0xE9, 0x02, 0x8B, 0x9C, 0xC9, 0x4B, 0xD3,
+	0x7F, 0xAD, 0xA5, 0xF9, 0x7C, 0xB4, 0x00, 0xB4, 0x5A, 0xAF,
+	0x23, 0x12, 0xF2, 0x5B, 0xB9, 0x2C, 0xFD, 0x73, 0xB9, 0xFC,
+	0x4B, 0x4F, 0xAF, 0xD2, 0x80, 0xC2, 0xF7, 0x15, 0xEC, 0xE1,
+	0x4B, 0xEF, 0xA3, 0x99, 0x59, 0x0C, 0xD5, 0x2F, 0x98, 0xF5,
+	0x38, 0xD2, 0xFC, 0xF3, 0x82, 0xA7, 0xE0, 0x15, 0x35, 0x27,
+	0xCD, 0xCF, 0xCE, 0xA4, 0x65, 0x92, 0x1E, 0x6C, 0x25, 0x8F,
+	0xB7, 0x78, 0x15, 0x5B, 0x7A, 0x9D, 0xB0, 0xEC, 0xDE, 0x0A,
+	0xF5, 0x0B, 0xCD, 0xD4, 0xF6, 0xC4, 0xD5, 0xA9, 0xC1, 0x4E,
+	0xE0, 0xA2, 0x8B, 0xC4, 0x43, 0x97, 0xAC, 0xC9, 0x41, 0xF2,
+	0x5A, 0x36, 0xD1, 0xD6, 0x7E, 0xC2, 0xD3, 0x06, 0xCB, 0x78,
+	0x47, 0x78, 0x05, 0x35, 0x61, 0xE6, 0xD4, 0xDC, 0x65, 0x75,
+	0x63, 0x5B, 0x71, 0xD7, 0x3C, 0x27, 0x9B, 0x26, 0x70, 0xAB,
+	0x4D, 0x97, 0xE5, 0x83, 0x7C, 0xEB, 0x5B, 0x8F, 0xD6, 0xBC,
+	0x84, 0x9D, 0xF8, 0x08, 0x65, 0x10, 0x6E, 0x48, 0xBE, 0xD2,
+	0x86, 0xC0, 0xEB, 0x08, 0x27, 0x38, 0xF8, 0x6E, 0x5D, 0xBA,
+	0x5B, 0xC6, 0x78, 0xED, 0xB1, 0x8D, 0x57, 0xFC, 0xA4, 0xDD,
+	0xF3, 0xDF, 0xB9, 0x36, 0x92, 0xB8, 0x00, 0x06, 0x5F, 0xAD,
+	0x04, 0xE3, 0x8D, 0x64, 0x64, 0x7A, 0xE0, 0x57, 0x4C, 0x68,
+	0x56, 0xDC, 0x1F, 0x93, 0xA5, 0xD7, 0xEE, 0xFC, 0x8A, 0xB9,
+	0x26, 0x99, 0xC5, 0x1A, 0x63, 0xD6, 0x9B, 0xBC, 0xA2, 0xF3,
+	0xE1, 0x84, 0xDC, 0xFB, 0x0C, 0x4F, 0xB4, 0x0D, 0x75, 0x8B,
+	0xDD, 0xB6, 0x76, 0x2C, 0x33, 0x46, 0xDD, 0x94, 0xE0, 0x8C,
+	0x37, 0x03, 0x14, 0x44, 0xC2, 0x0F, 0x6C, 0x03, 0xA6, 0x39,
+	0x1E, 0xB5, 0x00, 0x83, 0xC6, 0x59, 0x81, 0xD6, 0x11, 0x3A,
+	0x22, 0x6F, 0x74, 0x1C, 0x8B, 0x4C, 0xF3, 0x1C, 0x59, 0x2F,
+	0x19, 0x18, 0xB5, 0x20, 0x24, 0x9C, 0x14, 0x45, 0x7E, 0x98,
+	0xFB, 0x71, 0xC4, 0xCC, 0x19, 0x99, 0x28, 0x9E, 0x63, 0xC2,
+	0xD6, 0x0D, 0x47, 0x2A, 0x3B, 0x36, 0xB7, 0x8C, 0xF1, 0x98,
+	0x33, 0x96, 0x9D, 0x09, 0x99, 0x74, 0xE3, 0x41, 0xCD, 0x67,
+	0xCE, 0x11, 0xBA, 0x35, 0xE3, 0x44, 0x3D, 0xE0, 0xB9, 0x53,
+	0x79, 0x58, 0x0F, 0xC5, 0x98, 0xCC, 0xAB, 0xF8, 0x37, 0x5C,
+	0x96, 0xCE, 0xB5, 0xDA, 0xB5, 0x05, 0x79, 0xD6, 0x96, 0x82,
+	0xCA, 0x3F, 0x2C, 0x8A, 0x44, 0xCE, 0xCE, 0x99, 0xA2, 0x77,
+	0x9E, 0xE0, 0xFE, 0x58, 0x97, 0x5A, 0xDA, 0x8B, 0xB8, 0x0A,
+	0xA2, 0x3F, 0x26, 0x00, 0x5C, 0xAC, 0xD8, 0x33, 0x95, 0xBF,
+	0x43, 0x0D, 0x09, 0xB5, 0x9A, 0x89, 0x4C, 0x46, 0x83, 0xAF,
+	0xD1, 0xD3, 0x61, 0x33, 0xA1, 0x19, 0xD3, 0xD6, 0x81, 0xB0,
+	0xDA, 0x55, 0x4B, 0xD3,
+};
+
+const uint32_t gphDnldNfc_DlSeqSz = sizeof(gphDnldNfc_DlSequence);

+ 52 - 84
nfc/recovery_seq.c

@@ -16,14 +16,10 @@
  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  *
  ******************************************************************************/
-#if defined(RECOVERY_ENABLE)
 #include "recovery_seq.h"
 
-recovery_info_t g_recovery_info;
-recovery_frame_t g_recovery_frame;
-
-extern const uint32_t gphDnldNfc_DlSeqSz;     /* Recovery user buffer size */
-extern const uint8_t gphDnldNfc_DlSequence[]; /* Recovery user buffer */
+struct recovery_info g_recovery_info;
+struct recovery_frame g_recovery_frame;
 
 /** @brief Function to calculate crc value.
  *
@@ -31,16 +27,18 @@ extern const uint8_t gphDnldNfc_DlSequence[]; /* Recovery user buffer */
  *           dwLength: length of input buffer
  *  @return  calculated uint16_t crc valueof input buffer.
  */
-static uint16_t calcCrc16(uint8_t* pbuffer, uint32_t dwLength) {
+static uint16_t calcCrc16(uint8_t *pbuffer, uint32_t dwLength)
+{
 	uint32_t i = 0;
 	uint16_t crc_new = 0;
 	uint16_t crc = DL_INVALID_CRC_VALUE;
-	if(NULL == pbuffer) {
+
+	if (pbuffer == NULL) {
 		pr_err("%s, invalid params", __func__);
 		return crc;
 	}
 	for (i = 0; i < dwLength; i++) {
-		crc_new = (uint8_t)(crc >> MSB_POS) | (crc << MSB_POS );
+		crc_new = (uint8_t)(crc >> MSB_POS) | (crc << MSB_POS);
 		crc_new ^= pbuffer[i];
 		crc_new ^= (uint8_t)(crc_new & DL_CRC_MASK) >> 4;
 		crc_new ^= crc_new << 12;
@@ -52,29 +50,32 @@ static uint16_t calcCrc16(uint8_t* pbuffer, uint32_t dwLength) {
 
 /** @brief Function to build command frame for recover.
  *
- *  @return  status code of recovery_status_t type.
+ *  @return  status code of recovery_status type.
  */
-static recovery_status_t build_cmd_frame() {
+static enum recovery_status build_cmd_frame(void)
+{
 	uint16_t len = 0;
 	uint16_t wCrc = 0;
 	uint16_t writeOffset = 0;
+
 	pr_debug(" %s Entry", __func__);
-	if(gphDnldNfc_DlSeqSz == 0) {
+	if (gphDnldNfc_DlSeqSz == 0) {
 		pr_err(" %s invalid params", __func__);
 		return STATUS_FAILED;
 	}
 	memset(g_recovery_frame.p_buffer, 0x00, MAX_FRAME_SIZE);
 	g_recovery_frame.len = 0;
-	if(g_recovery_info.bFrameSegmented == false) {
+	if (g_recovery_info.bFrameSegmented == false) {
 		len = gphDnldNfc_DlSequence[g_recovery_info.currentReadOffset];
 		len <<= MSB_POS;
 		len |= gphDnldNfc_DlSequence[g_recovery_info.currentReadOffset + 1];
 	} else {
 		/* last frame was segmented frame
-		* read length reamaining length */
+		 * read length reamaining length
+		 */
 		len = g_recovery_info.wRemChunkBytes;
 	}
-	if(len > MAX_DATA_SIZE) {
+	if (len > MAX_DATA_SIZE) {
 		/* set remaining chunk */
 		g_recovery_info.wRemChunkBytes = (len - MAX_DATA_SIZE);
 		len = MAX_DATA_SIZE;
@@ -85,7 +86,7 @@ static recovery_status_t build_cmd_frame() {
 		/* clear chunk bit for length variable */
 		len = DL_CLR_HDR_FRAGBIT(len);
 		/* first chunk of segmented frame*/
-		if(!g_recovery_info.bFrameSegmented) {
+		if (!g_recovery_info.bFrameSegmented) {
 			/* ignore header from user buffer */
 			g_recovery_info.currentReadOffset += FW_HDR_LEN;
 			g_recovery_info.remBytes -= FW_HDR_LEN;
@@ -94,22 +95,23 @@ static recovery_status_t build_cmd_frame() {
 		g_recovery_info.bFrameSegmented = true;
 	} else {
 		/* last chunk of segmented frame */
-		if(g_recovery_info.bFrameSegmented) {
+		if (g_recovery_info.bFrameSegmented) {
 			/* write header with user chunk length */
 			g_recovery_frame.p_buffer[writeOffset++] = (len >> MSB_POS) & SHIFT_MASK;
 			g_recovery_frame.p_buffer[writeOffset++] = len & SHIFT_MASK;
 			g_recovery_frame.len += FW_HDR_LEN;
 		} else {
 			/* normal Frame with in supported size increase
-			* len to read header from user data */
+			 * len to read header from user data
+			 */
 			len += FW_HDR_LEN;
 		}
 		g_recovery_info.wRemChunkBytes = 0;
 		g_recovery_info.bFrameSegmented = false;
 	}
-	if(((writeOffset + len) > MAX_FRAME_SIZE) ||
+	if (((writeOffset + len) > MAX_FRAME_SIZE) ||
 		((g_recovery_info.currentReadOffset + len) > gphDnldNfc_DlSeqSz)) {
-		pr_err("%s frame offsets out of bound",__func__);
+		pr_err("%s frame offsets out of bound", __func__);
 		return STATUS_FAILED;
 	}
 	memcpy(&g_recovery_frame.p_buffer[writeOffset],
@@ -126,20 +128,21 @@ static recovery_status_t build_cmd_frame() {
 	return STATUS_SUCCESS;
 }
 
-/** @brief Function to tramsmit recovery frame.
+/** @brief Function to transmit recovery frame.
  *  @param   nfc_dev nfc driver object.
- *  @return  status code of recovery_status_t type.
+ *  @return  status code of recovery_status type.
  */
-static recovery_status_t transmit(nfc_dev_t* nfc_dev) {
-	char rsp_buf[MAX_BUFFER_SIZE];
+static enum recovery_status transmit(struct nfc_dev *nfc_dev)
+{
 	int ret = 0;
 	int frame_resp_len = 0;
 	uint16_t respCRC = 0;
 	uint16_t respCRCOffset = 0;
+	uint8_t *rsp_buf = nfc_dev->read_kbuf;
 
 	pr_debug("%s Entry", __func__);
-	if(NULL == nfc_dev || g_recovery_frame.len <= 0) {
-		pr_err("%s invalid Params ", __func__);
+	if (nfc_dev == NULL || g_recovery_frame.len <= 0) {
+		pr_err("%s invalid Params", __func__);
 		return STATUS_FAILED;
 	}
 	ret = nfc_dev->nfc_write(nfc_dev, g_recovery_frame.p_buffer,
@@ -148,17 +151,17 @@ static recovery_status_t transmit(nfc_dev_t* nfc_dev) {
 		pr_err(" %s: Write recovery frame error %d\n", __func__, ret);
 		return STATUS_FAILED;
 	}
-	pr_debug(" %s Reading response \n", __func__);
+	pr_debug(" %s Reading response\n", __func__);
 	memset(rsp_buf, 0x00, MAX_BUFFER_SIZE);
 	ret = nfc_dev->nfc_read(nfc_dev, rsp_buf, FW_HDR_LEN, NCI_CMD_RSP_TIMEOUT);
 	if (ret < FW_HDR_LEN) {
 		pr_err(" %s - Read recovery frame response error ret %d\n", __func__, ret);
 		return STATUS_FAILED;
 	}
-	if( rsp_buf[0] != FW_MSG_CMD_RSP ||
+	if (rsp_buf[0] != FW_MSG_CMD_RSP ||
 		rsp_buf[DL_FRAME_RESP_LEN_OFFSET] != DL_FRAME_RESP_LEN) {
-	  pr_err("%s, invalid response", __func__);
-	  return STATUS_FAILED;
+		pr_err("%s, invalid response", __func__);
+		return STATUS_FAILED;
 	}
 	frame_resp_len = rsp_buf[DL_FRAME_RESP_LEN_OFFSET] + FW_CRC_LEN;
 	ret = nfc_dev->nfc_read(nfc_dev, rsp_buf + FW_HDR_LEN, frame_resp_len, NCI_CMD_RSP_TIMEOUT);
@@ -167,22 +170,22 @@ static recovery_status_t transmit(nfc_dev_t* nfc_dev) {
 		return STATUS_FAILED;
 	}
 	pr_debug(" %s: recovery frame Response 0x%02x  0x%02x 0x%02x 0x%02x 0x%02x 0x%02x\n",
-		__func__, rsp_buf[0], rsp_buf[1],rsp_buf[2], rsp_buf[3], rsp_buf[4], rsp_buf[5]);
+		__func__, rsp_buf[0], rsp_buf[1], rsp_buf[2], rsp_buf[3], rsp_buf[4], rsp_buf[5]);
 	respCRCOffset = FW_HDR_LEN + rsp_buf[DL_FRAME_RESP_LEN_OFFSET];
 	respCRC = rsp_buf[respCRCOffset++];
 	respCRC <<= MSB_POS;
 	respCRC |= rsp_buf[respCRCOffset];
-	if(respCRC != calcCrc16(rsp_buf, DL_FRAME_RESP_LEN + FW_HDR_LEN)) {
+	if (respCRC != calcCrc16(rsp_buf, DL_FRAME_RESP_LEN + FW_HDR_LEN)) {
 		pr_err("%s, invalid response crc", __func__);
 		return STATUS_FAILED;
 	}
-	if(g_recovery_info.bFrameSegmented &&
+	if (g_recovery_info.bFrameSegmented &&
 		(rsp_buf[DL_FRAME_RESP_STAT_OFFSET] != DL_SEGMENTED_FRAME_RESP_STAT1
 		 && rsp_buf[DL_FRAME_RESP_STAT_OFFSET] != DL_SEGMENTED_FRAME_RESP_STAT2)) {
 		pr_err("%s, invalid stat flag in chunk response", __func__);
 		return STATUS_FAILED;
 	}
-	if(!g_recovery_info.bFrameSegmented &&
+	if (!g_recovery_info.bFrameSegmented &&
 		rsp_buf[DL_FRAME_RESP_STAT_OFFSET] != DL_NON_SEGMENTED_FRAME_RESP_STAT) {
 		pr_err("%s, invalid stat flag in response", __func__);
 		return STATUS_FAILED;
@@ -190,46 +193,14 @@ static recovery_status_t transmit(nfc_dev_t* nfc_dev) {
 	return STATUS_SUCCESS;
 }
 
-/** @brief Function to detect the fw state and print.
- *  @param   nfc_dev nfc driver object.
- *  @return  no return.
- */
-static void detect_fw_state(nfc_dev_t* nfc_dev) {
-	const char get_session_state_cmd[] = { 0x00, 0x04, 0xF2, 0x00, 0x00, 0x00, 0xF5, 0x33 };
-	char rsp_buf[MAX_BUFFER_SIZE];
-	int ret = 0;
-	pr_debug("%s:Sending GET_SESSION_STATE cmd \n", __func__);
-	ret = nfc_dev->nfc_write(nfc_dev, get_session_state_cmd,
-		sizeof(get_session_state_cmd), MAX_RETRY_COUNT);
-	if (ret <= 0) {
-		pr_err("%s: - nfc get session state cmd err ret %d\n", __func__, ret);
-		return;
-	}
-	memset(rsp_buf, 0x00, DL_GET_SESSION_STATE_RSP_LEN);
-	pr_debug("%s: Reading response of GET_SESSION_STATE cmd\n", __func__);
-	ret = nfc_dev->nfc_read(nfc_dev, rsp_buf, DL_GET_SESSION_STATE_RSP_LEN, NCI_CMD_RSP_TIMEOUT);
-	if (ret <= 0) {
-		pr_err("%s: - nfc get session state rsp err %d\n", __func__, ret);
-		return;
-	}
-	pr_debug("Response bytes are %02x,%02x,%02x,%02x,%02x,%02x,%02x,%02x",
-		rsp_buf[0], rsp_buf[1], rsp_buf[2], rsp_buf[3], rsp_buf[4], rsp_buf[5],
-			rsp_buf[6], rsp_buf[7]);
-	/*verify fw in non-teared state */
-	if (rsp_buf[GET_SESSION_STS_OFF] != NFCC_SESSION_STS_CLOSED) {
-		pr_err("%s NFCC is in teared state %d\n", __func__, __LINE__);
-	} else {
-		pr_info("%s NFCC is in recoverd state %d\n", __func__, __LINE__);
-	}
-}
-
 /** @brief Function to check input version with recovery fw version.
  *  @param   fw_major_version: input major_version to check.
  *  @return  true if input major_version matches with recovery fw major version
  *           otherwise returns false.
  */
-static bool check_major_version(uint8_t fw_major_version) {
-	if(gphDnldNfc_DlSeqSz < RECOVERY_FW_MJ_VER_OFFSET) {
+static bool check_major_version(uint8_t fw_major_version)
+{
+	if (gphDnldNfc_DlSeqSz < RECOVERY_FW_MJ_VER_OFFSET) {
 		/* Recovery data corrupted */
 		pr_err("%s Not able to extract major version from recovery fw\n", __func__);
 		return false;
@@ -239,43 +210,40 @@ static bool check_major_version(uint8_t fw_major_version) {
 
 /** @brief   Function to recover the nfcc.
  *  @param   nfc_dev nfc driver object.
- *  @return status code of type recovery_status_t.
+ *  @return status code of type recovery_status.
  */
-recovery_status_t do_recovery(nfc_dev_t *nfc_dev) {
-	recovery_status_t status = STATUS_SUCCESS;
+enum recovery_status do_recovery(struct nfc_dev *nfc_dev)
+{
+	enum recovery_status status = STATUS_SUCCESS;
+
 	g_recovery_info.remBytes = gphDnldNfc_DlSeqSz;
 	g_recovery_info.currentReadOffset = 0;
 	g_recovery_info.bFrameSegmented = false;
 	g_recovery_info.wRemChunkBytes = 0;
-
+	g_recovery_frame.p_buffer = nfc_dev->write_kbuf;
 	pr_debug("%s Entry", __func__);
-	if(NULL == nfc_dev) {
+	if (nfc_dev == NULL) {
 		pr_err("%s invalid params ", __func__);
 		return STATUS_FAILED;
 	}
-	if(!nfc_dev->recovery_required
-		|| !(check_major_version(nfc_dev->fw_major_version))) {
-		pr_err("%s recovery not required or unsupported version", __func__);
+	if (!(check_major_version(nfc_dev->fw_major_version))) {
+		pr_err("%s unsupported version", __func__);
 		status = STATUS_FAILED;
 		goto EXIT_RECOVERY;
 	}
-	while(g_recovery_info.remBytes > 0) {
+	while (g_recovery_info.remBytes > 0) {
 		status = build_cmd_frame();
-		if(status != STATUS_SUCCESS) {
+		if (status != STATUS_SUCCESS) {
 			pr_err(" %s Unable to create recovery frame");
 			break;
 		}
 		status = transmit(nfc_dev);
-		if(status != STATUS_SUCCESS) {
+		if (status != STATUS_SUCCESS) {
 			pr_err(" %s Unable to send recovery frame");
 			break;
 		}
 	}
 EXIT_RECOVERY:
-	detect_fw_state(nfc_dev);
-	/*set NCI mode for i2c products with dwl pin */
-	enable_dwnld_mode(nfc_dev, false);
 	pr_info("%s Recovery done status %d", __func__, status);
 	return status;
 }
-#endif

+ 15 - 16
nfc/recovery_seq.h

@@ -16,7 +16,7 @@
  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  *
  ******************************************************************************/
-#if defined(RECOVERY_ENABLE)
+#if IS_ENABLED(CONFIG_NXP_NFC_RECOVERY)
 
 #ifndef __RECOVERY_SEQ_H_
 #define __RECOVERY_SEQ_H_
@@ -26,18 +26,14 @@
 #define MAX_FRAME_SIZE 0x22A /* support for 256(0x100) & 554(0x22A) frame size*/
 
 #define MAX_DATA_SIZE \
-  (MAX_FRAME_SIZE - FW_CRC_LEN - FW_HDR_LEN)
+	(MAX_FRAME_SIZE - FW_CRC_LEN - FW_HDR_LEN)
 
-#define FW_ROM_CODE_VER_OFFSET 4
-#define FW_MAJOR_VER_OFFSET 7
-#define RECOVERY_FW_SUPPORTED_ROM_VER 0x01
-#define RECOVERY_FW_SUPPORTED_MAJOR_VER 0x10
 #define RECOVERY_FW_MJ_VER_OFFSET 5
 
 #define DL_SET_HDR_FRAGBIT(n) \
-  ((n) | (1 << 10)) /* Header chunk bit set macro */
+	((n) | (1 << 10)) /* Header chunk bit set macro */
 #define DL_CLR_HDR_FRAGBIT(n) \
-  ((n) & ~(1U << 10)) /* Header chunk bit clear macro */
+	((n) & ~(1U << 10)) /* Header chunk bit clear macro */
 
 #define DL_FRAME_RESP_LEN 0x04
 #define DL_FRAME_RESP_LEN_OFFSET 1
@@ -52,29 +48,32 @@
 #define MSB_POS 8
 
 /* Data buffer for frame to write */
-typedef struct recovery_frame {
+struct recovery_frame {
 	uint32_t len;
-	uint8_t p_buffer[MAX_FRAME_SIZE];
-} recovery_frame_t;
+	uint8_t *p_buffer;
+};
 
 /* Contains Info about user buffer and last data frame */
-typedef struct recovery_info {
+struct recovery_info {
 	uint32_t currentReadOffset; /* current offset within the user buffer to read/write */
 	uint32_t remBytes;          /* Remaining bytes to write */
 	uint16_t wRemChunkBytes;   /* Remaining bytes within the chunked frame */
 	bool bFrameSegmented;  /* Indicates the current frame is segmented */
-} recovery_info_t;
+};
 
 /* indicates the error codes for nfc recovery module */
-typedef enum recovery_status {
+enum recovery_status {
 	STATUS_SUCCESS = 0x00,
 	STATUS_FAILED = 0x01,
-} recovery_status_t;
+};
+
+extern const uint32_t gphDnldNfc_DlSeqSz;     /* Recovery user buffer size */
+extern const uint8_t gphDnldNfc_DlSequence[]; /* Recovery user buffer */
 
 /** @brief   Function to recover the nfcc.
  *  @param   nfc_dev nfc driver object.
  *  @return status code of type recovery_status_t.
  */
-recovery_status_t do_recovery(nfc_dev_t *nfc_dev);
+enum recovery_status do_recovery(struct nfc_dev *nfc_dev);
 #endif// end  __RECOVERY_SEQ_H_
 #endif