summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMarcel Ziswiler <marcel.ziswiler@toradex.com>2020-07-07 14:51:49 +0200
committerMarcel Ziswiler <marcel.ziswiler@toradex.com>2020-07-09 18:23:22 +0200
commit1554f7c30bb7b28ef36fa7b5b77c547edb1ba030 (patch)
tree9d80e52c390a18e25bbcdf0a3dc3869de5ecc98c
parent70115fee222012ca7c7ce796d772cac596b0927b (diff)
imx8: isi: ar0521: add initial driver
Add initial driver for the e-con Systems e-CAM50_CUIMX8. This is the driver part from the following patch we got from Yogaesh <yogaesh@e-consystems.com> on May 8, 2020: apalis_imx8qm_embedded_linux_eCAM50_support.patch Related-to: ELB-2793 Signed-off-by: Marcel Ziswiler <marcel.ziswiler@toradex.com>
-rw-r--r--drivers/media/platform/Kconfig9
-rw-r--r--drivers/media/platform/imx8/Kconfig5
-rw-r--r--drivers/media/platform/imx8/Makefile1
-rw-r--r--drivers/media/platform/imx8/ar0521.c3617
-rw-r--r--drivers/media/platform/imx8/ar0521.h291
-rw-r--r--drivers/media/platform/imx8/ecam50_cam_fw.txt2146
-rw-r--r--drivers/media/platform/imx8/mcu_firmware.h91
-rw-r--r--drivers/media/platform/imx8/mxc-isi-cap.c255
-rw-r--r--drivers/media/platform/imx8/mxc-mipi-csi2.c161
-rw-r--r--include/media/v4l2-subdev.h9
10 files changed, 6584 insertions, 1 deletions
diff --git a/drivers/media/platform/Kconfig b/drivers/media/platform/Kconfig
index 7b175866b23d..4e8a4344df8c 100644
--- a/drivers/media/platform/Kconfig
+++ b/drivers/media/platform/Kconfig
@@ -188,6 +188,15 @@ config VIDEO_TI_CAL
In TI Technical Reference Manual this module is referred as
Camera Interface Subsystem (CAMSS).
+config VIDEO_ECAM
+ tristate "e-con camera sensor support"
+ depends on I2C && VIDEO_V4L2 && VIDEO_V4L2_SUBDEV_API
+ ---help---
+ This config is used to enable codes which are used to
+ support econ camera and to disable ISI control codes.
+
+ To compile this driver as a module, choose M here: the module
+ will be called based on sensor name.
endif # V4L_PLATFORM_DRIVERS
diff --git a/drivers/media/platform/imx8/Kconfig b/drivers/media/platform/imx8/Kconfig
index 590a6d34d144..f839647e925a 100644
--- a/drivers/media/platform/imx8/Kconfig
+++ b/drivers/media/platform/imx8/Kconfig
@@ -40,6 +40,11 @@ config MXC_CAMERA_OV5640_MIPI_V3
depends on I2C
default y
+config MXC_CAMERA_AR0521
+ tristate "AR0521 Camera driver support"
+ depends on I2C && VIDEO_ECAM
+ default y
+
config GMSL_MAX9286
tristate "Maxim max9286 GMSL Deserializer Input support"
select SENSOR_OV10635
diff --git a/drivers/media/platform/imx8/Makefile b/drivers/media/platform/imx8/Makefile
index 16623341a1e6..06faccf8700b 100644
--- a/drivers/media/platform/imx8/Makefile
+++ b/drivers/media/platform/imx8/Makefile
@@ -8,6 +8,7 @@ obj-$(CONFIG_IMX8_MIPI_CSI2_SAM) += mxc-mipi-csi2-sam.o
ov5640_camera_v3-objs := ov5640_v3.o
obj-$(CONFIG_MXC_CAMERA_OV5640_V3) += ov5640_camera_v3.o
obj-$(CONFIG_MXC_CAMERA_OV5640_MIPI_V3) += ov5640_mipi_v3.o
+obj-$(CONFIG_MXC_CAMERA_AR0521) += ar0521.o
max9286_gmsl-objs := max9286.o
obj-$(CONFIG_GMSL_MAX9286) += max9286_gmsl.o
obj-$(CONFIG_IMX8_MEDIA_DEVICE) += mxc-media-dev.o
diff --git a/drivers/media/platform/imx8/ar0521.c b/drivers/media/platform/imx8/ar0521.c
new file mode 100644
index 000000000000..4938555e28c6
--- /dev/null
+++ b/drivers/media/platform/imx8/ar0521.c
@@ -0,0 +1,3617 @@
+/*
+ * ar0521.c - AR0521 sensor driver
+ * Copyright (c) 2020-2021, e-con Systems. All rights reserved.
+ *
+ * This program is free software; you can redistribute it and/or modify it
+ * under the terms and conditions of the GNU General Public License,
+ * version 2, as published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
+ * more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include <linux/module.h>
+#include <linux/delay.h>
+#include <linux/clk.h>
+#include <linux/i2c.h>
+#include <linux/of_gpio.h>
+#include <linux/pinctrl/consumer.h>
+#include <media/v4l2-device.h>
+#include <media/v4l2-ctrls.h>
+
+#include "ar0521.h"
+#include "mcu_firmware.h"
+
+#define AR0521_DEBUG 1
+
+/*!
+ * Maintains the information on the current state of the sensor.
+ */
+static struct ar0521 ar0521_data;
+
+static int pwdn_gpio, reset_gpio;
+
+int gpios_available(void)
+{
+ return (pwdn_gpio >= 0) && (reset_gpio >= 0);
+}
+
+/**********************************************************************
+ *
+ * START of AR0521 related code
+ *
+ **********************************************************************
+ */
+
+static int ar0521_write(struct i2c_client *client, u8 * val, u32 count)
+{
+ int ret;
+ struct i2c_msg msg = {
+ .addr = client->addr,
+ .flags = 0,
+ .len = count,
+ .buf = val,
+ };
+
+ ret = i2c_transfer(client->adapter, &msg, 1);
+ if (ret < 0) {
+ dev_err(&client->dev, "Failed writing register.\n");
+ dev_err(&client->dev, "addr: %x; val = %hhu, ret = %d!\n",
+ client->addr, *val, ret);
+ return ret;
+ }
+
+ return 0;
+}
+
+static int ar0521_read(struct i2c_client *client, u8 * val, u32 count)
+{
+ int ret;
+ struct i2c_msg msg = {
+ .addr = client->addr,
+ .flags = 0,
+ .buf = val,
+ };
+
+ msg.flags = I2C_M_RD;
+ msg.len = count;
+ ret = i2c_transfer(client->adapter, &msg, 1);
+ if (ret < 0)
+ goto err;
+
+ return 0;
+
+ err:
+ dev_err(&client->dev, "Failed reading register ret = %d!\n", ret);
+ return ret;
+}
+
+/*
+ * The MCU specific functions below depend on the sensor-specific
+ * functions above.
+ */
+
+/*
+ * ---------------------------------------------------------
+ * START of MCU realed functions
+ * ---------------------------------------------------------
+ */
+
+/*
+ * NOTE about modularizing this MCU related function.
+ *
+ * - The functions:
+ *
+ * x mcu_get_fw_version
+ * x mcu_bload_get_version
+ * x mcu_bload_erase_flash
+ * x mcu_bload_parse_send_cmd
+ * x mcu_bload_go
+ * x mcu_bload_read
+ * x mcu_count_or_list_ctrls
+ * x mcu_count_or_list_fmts
+ * x mcu_get_sensor_id
+ * x mcu_get_ctrl_ui
+ * x mcu_stream_config
+ * x mcu_isp_power_down
+ * x mcu_isp_power_wakeup
+ * x mcu_set_ctrl
+ * x mcu_get_ctrl
+ *
+ * seem to directly use platform specific functions:
+ *
+ * x ar0521_write
+ * x ar0521_read
+ *
+ * This could be passed in as a function pointer.
+ */
+
+static unsigned short int mcu_bload_calc_crc16(unsigned char *buf, int len)
+{
+ unsigned short int crc = 0;
+ int i = 0;
+
+ if (!buf || !(buf + len))
+ return 0;
+
+ for (i = 0; i < len; i++) {
+ crc ^= buf[i];
+ }
+
+ return crc;
+}
+
+static int mcu_bload_ascii2hex(unsigned char ascii)
+{
+ if (ascii <= '9') {
+ return (ascii - '0');
+ } else if ((ascii >= 'a') && (ascii <= 'f')) {
+ return (0xA + (ascii - 'a'));
+ } else if ((ascii >= 'A') && (ascii <= 'F')) {
+ return (0xA + (ascii - 'A'));
+ }
+ return -1;
+}
+
+static unsigned char errorcheck(char *data, unsigned int len)
+{
+ unsigned int i = 0;
+ unsigned char crc = 0x00;
+
+ for (i = 0; i < len; i++) {
+ crc ^= data[i];
+ }
+
+ return crc;
+}
+
+/*
+ * mcu_get_fw_version:
+ *
+ * Read the firmware version from the MCU.
+ *
+ * A success value (0) is returned when the MCU version could be successfully read.
+ * else a negative value indicating error is returned.
+ */
+static int mcu_get_fw_version(struct i2c_client *client, unsigned char *fw_version)
+{
+ uint32_t payload_len = 0;
+ uint8_t errcode = ERRCODE_SUCCESS, orig_crc = 0, calc_crc = 0;
+ int ret = 0, err = 0, loop;
+ /* Query firmware version from MCU */
+
+ /* lock semaphore */
+ mutex_lock(&mcu_i2c_mutex);
+
+ mc_data[0] = CMD_SIGNATURE;
+ mc_data[1] = CMD_ID_VERSION;
+ mc_data[2] = payload_len >> 8;
+ mc_data[3] = payload_len & 0xFF;
+ mc_data[4] = errorcheck(&mc_data[2], 2);
+
+ err = ar0521_write(client, mc_data, TX_LEN_PKT);
+ if (err != 0)
+ {
+ dev_err(&client->dev, "MCU CMD ID version Error- %d\n", err);
+ ret = -EIO;
+ goto exit;
+ }
+
+ mc_data[0] = CMD_SIGNATURE;
+ mc_data[1] = CMD_ID_VERSION;
+ err = ar0521_write(client, mc_data, 2);
+ if (err != 0) {
+ dev_err(&client->dev," %s(%d) MCU CMD ID Write PKT fw Version Error - %d \n", __func__,
+ __LINE__, err);
+ ret = -EIO;
+ goto exit;
+ }
+
+ err = ar0521_read(client, mc_ret_data, RX_LEN_PKT);
+ if (err != 0) {
+ dev_err(&client->dev," %s(%d) MCU CMD ID Read PKT fw Version Error - %d \n", __func__,
+ __LINE__, err);
+ ret = -EIO;
+ goto exit;
+ }
+
+ /* Verify CRC */
+ orig_crc = mc_ret_data[4];
+ calc_crc = errorcheck(&mc_ret_data[2], 2);
+ if (orig_crc != calc_crc) {
+ dev_err(&client->dev," %s(%d) MCU CMD ID fw Version Error CRC 0x%02x != 0x%02x \n",
+ __func__, __LINE__, orig_crc, calc_crc);
+ ret = -EINVAL;
+ goto exit;
+ }
+
+ errcode = mc_ret_data[5];
+ if (errcode != ERRCODE_SUCCESS) {
+ dev_err(&client->dev," %s(%d) MCU CMD ID fw Errcode - 0x%02x \n", __func__,
+ __LINE__, errcode);
+ ret = -EIO;
+ goto exit;
+ }
+
+ /* Read the actual version from MCU*/
+ payload_len =
+ ((mc_ret_data[2] << 8) | mc_ret_data[3]) + HEADER_FOOTER_SIZE;
+ memset(mc_ret_data, 0x00, payload_len);
+ err = ar0521_read(client, mc_ret_data, payload_len);
+ if (err != 0) {
+ dev_err(&client->dev," %s(%d) MCU fw CMD ID Read Version Error - %d \n", __func__,
+ __LINE__, err);
+ ret = -EIO;
+ goto exit;
+ }
+
+ /* Verify CRC */
+ orig_crc = mc_ret_data[payload_len - 2];
+ calc_crc = errorcheck(&mc_ret_data[2], 32);
+ if (orig_crc != calc_crc) {
+ dev_err(&client->dev," %s(%d) MCU fw CMD ID Version CRC ERROR 0x%02x != 0x%02x \n",
+ __func__, __LINE__, orig_crc, calc_crc);
+ ret = -EINVAL;
+ goto exit;
+ }
+
+ /* Verify Errcode */
+ errcode = mc_ret_data[payload_len - 1];
+ if (errcode != ERRCODE_SUCCESS) {
+ dev_err(&client->dev," %s(%d) MCU fw CMD ID Read Payload Error - 0x%02x \n", __func__,
+ __LINE__, errcode);
+ ret = -EIO;
+ goto exit;
+ }
+
+ for (loop = 0 ; loop < VERSION_SIZE ; loop++ )
+ *(fw_version+loop) = mc_ret_data[2+loop];
+
+ ret = ERRCODE_SUCCESS;
+exit:
+ /* unlock semaphore */
+ mutex_unlock(&mcu_i2c_mutex);
+
+ return ret;
+}
+
+/**
+ * mcu_verify_fw_version:
+ *
+ * Verify the firmware version obtained from the MCU and that found in the
+ * firmware text file present in our driver.
+ *
+ * The return value after verification is as follows:
+ *
+ * - If the version number matches a success value (0) is returned.
+ *
+ * - In case the version number mismatches, a negative value indicating error
+ * is returned.
+ *
+ * - In case the force update bit is set in firmware version in the text
+ * file, a positive value is returned.
+ */
+static int mcu_verify_fw_version(const unsigned char *const fw_version)
+{
+ int loop, i = 0, ret;
+ char txt_fw_version[32] = {0};
+ unsigned long txt_fw_pos = ARRAY_SIZE(g_mcu_fw_buf)-VERSION_FILE_OFFSET;
+
+ /* Get Text Firmware version*/
+ for(loop = txt_fw_pos; loop < (txt_fw_pos+64); loop=loop+2) {
+ *(txt_fw_version+i) = (mcu_bload_ascii2hex(g_mcu_fw_buf[loop]) << 4 |
+ mcu_bload_ascii2hex(g_mcu_fw_buf[loop+1]));
+ i++;
+ }
+
+ /* Check for forced/always update field in the text firmware version*/
+ if(txt_fw_version[17] == '1') {
+
+#ifdef AR0521_DEBUG
+ pr_info("Forced Update Enabled - Firmware Version - (%.32s) \n",
+ fw_version);
+#endif
+
+ ret = 2;
+ }
+ else {
+ for(i = 0; i < VERSION_SIZE; i++) {
+ if(txt_fw_version[i] != fw_version[i]) {
+
+ pr_info("Previous Firmware Version - (%.32s)\n", fw_version);
+
+ ret = -1;
+ break;
+ }
+ }
+
+ if (i == VERSION_SIZE)
+ ret = ERRCODE_SUCCESS;
+ }
+
+ return ret;
+}
+
+static int mcu_bload_get_version(struct i2c_client *client)
+{
+ int ret = 0;
+
+ /*----------------------------- GET VERSION -------------------- */
+
+ /* Write Get Version CMD */
+ g_bload_buf[0] = BL_GET_VERSION;
+ g_bload_buf[1] = ~(BL_GET_VERSION);
+
+ ret = ar0521_write(client, g_bload_buf, 2);
+ if (ret < 0) {
+ dev_err(&client->dev,"Write Failed \n");
+ return -1;
+ }
+
+ /* Wait for ACK or NACK */
+ ret = ar0521_read(client, g_bload_buf, 1);
+ if (ret < 0) {
+ dev_err(&client->dev,"Read Failed \n");
+ return -1;
+ }
+
+ if (g_bload_buf[0] != 'y') {
+ /* NACK Received */
+ dev_err(&client->dev," NACK Received... exiting.. \n");
+ return -1;
+ }
+
+ ret = ar0521_read(client, g_bload_buf, 1);
+ if (ret < 0) {
+ dev_err(&client->dev,"Read Failed \n");
+ return -1;
+ }
+
+ ret = ar0521_read(client, g_bload_buf, 1);
+ if (ret < 0) {
+ dev_err(&client->dev,"Read Failed\n");
+ return -1;
+ }
+
+ /* ---------------- GET VERSION END ------------------- */
+
+ return 0;
+}
+
+static int mcu_bload_erase_flash(struct i2c_client *client)
+{
+ unsigned short int pagenum = 0x0000;
+ int ret = 0, i = 0, checksum = 0;
+
+ /* --------------- ERASE FLASH --------------------- */
+
+ for (i = 0; i < NUM_ERASE_CYCLES; i++) {
+
+ checksum = 0x00;
+ /* Write Erase Pages CMD */
+ g_bload_buf[0] = BL_ERASE_MEM_NS;
+ g_bload_buf[1] = ~(BL_ERASE_MEM_NS);
+
+ ret = ar0521_write(client, g_bload_buf, 2);
+ if (ret < 0) {
+ dev_err(&client->dev,"Write Failed \n");
+ return -1;
+ }
+
+ /* Wait for ACK or NACK */
+ ret = ar0521_read(client, g_bload_buf, 1);
+ if (ret < 0) {
+ dev_err(&client->dev,"Read Failed \n");
+ return -1;
+ }
+
+ if (g_bload_buf[0] != RESP_ACK) {
+ /* NACK Received */
+ dev_err(&client->dev," NACK Received... exiting.. \n");
+ return -1;
+ }
+
+ g_bload_buf[0] = (MAX_PAGES - 1) >> 8;
+ g_bload_buf[1] = (MAX_PAGES - 1) & 0xFF;
+ g_bload_buf[2] = g_bload_buf[0] ^ g_bload_buf[1];
+
+ ret = ar0521_write(client, g_bload_buf, 3);
+ if (ret < 0) {
+ dev_err(&client->dev,"Write Failed \n");
+ return -1;
+ }
+
+ /* Wait for ACK or NACK */
+ ret = ar0521_read(client, g_bload_buf, 1);
+ if (ret < 0) {
+ dev_err(&client->dev,"Read Failed \n");
+ return -1;
+ }
+
+ if (g_bload_buf[0] != RESP_ACK) {
+ /* NACK Received */
+ dev_err(&client->dev," NACK Received... exiting.. \n");
+ return -1;
+ }
+
+ for (pagenum = 0; pagenum < MAX_PAGES; pagenum++) {
+ g_bload_buf[(2 * pagenum)] =
+ (pagenum + (i * MAX_PAGES)) >> 8;
+ g_bload_buf[(2 * pagenum) + 1] =
+ (pagenum + (i * MAX_PAGES)) & 0xFF;
+ checksum =
+ checksum ^ g_bload_buf[(2 * pagenum)] ^
+ g_bload_buf[(2 * pagenum) + 1];
+ }
+ g_bload_buf[2 * MAX_PAGES] = checksum;
+
+ ret = ar0521_write(client, g_bload_buf, (2 * MAX_PAGES) + 1);
+ if (ret < 0) {
+ dev_err(&client->dev,"Write Failed \n");
+ return -1;
+ }
+
+ poll_busy:
+ /* Wait for ACK or NACK */
+ ret = ar0521_read(client, g_bload_buf, 1);
+ if (ret < 0) {
+ dev_err(&client->dev,"Read Failed \n");
+ return -1;
+ }
+
+ if (g_bload_buf[0] == RESP_BUSY)
+ goto poll_busy;
+
+ if (g_bload_buf[0] != RESP_ACK) {
+ /* NACK Received */
+ dev_err(&client->dev," NACK Received... exiting.. \n");
+ return -1;
+ }
+
+#ifdef AR0521_DEBUG
+ pr_info(" ERASE Sector %d success !! \n", i + 1);
+#endif
+ }
+
+ /* ------------ ERASE FLASH END ----------------------- */
+
+ return 0;
+}
+
+static unsigned char mcu_bload_inv_checksum(unsigned char *buf, int len)
+{
+ unsigned int checksum = 0x00;
+ int i = 0;
+
+ if (!buf || !(buf + len))
+ return 0;
+
+ for (i = 0; i < len; i++) {
+ checksum = (checksum + buf[i]);
+ }
+
+ checksum &= (0xFF);
+ return (~(checksum) + 1);
+}
+
+static int mcu_bload_parse_send_cmd(struct i2c_client *client,
+ unsigned char *bytearray, int rec_len)
+{
+ IHEX_RECORD *ihex_rec = NULL;
+ unsigned char checksum = 0, calc_checksum = 0;
+ int i = 0, ret = 0;
+
+ if (!bytearray)
+ return -1;
+
+ ihex_rec = (IHEX_RECORD *) bytearray;
+ ihex_rec->addr = htons(ihex_rec->addr);
+
+ checksum = bytearray[rec_len - 1];
+
+ calc_checksum = mcu_bload_inv_checksum(bytearray, rec_len - 1);
+ if (checksum != calc_checksum) {
+ dev_err(&client->dev," Invalid Checksum 0x%02x != 0x%02x !! \n",
+ checksum, calc_checksum);
+ return -1;
+ }
+
+ if ((ihex_rec->rectype == REC_TYPE_ELA)
+ && (ihex_rec->addr == 0x0000)
+ && (ihex_rec->datasize = 0x02)) {
+ /* Upper 32-bit configuration */
+ g_bload_flashaddr = (ihex_rec->recdata[0] <<
+ 24) | (ihex_rec->recdata[1]
+ << 16);
+#ifdef AR0521_DEBUG
+ pr_info("Updated Flash Addr = 0x%08x \n",
+ g_bload_flashaddr);
+#endif
+
+ } else if (ihex_rec->rectype == REC_TYPE_DATA) {
+ /* Flash Data into Flashaddr */
+
+ g_bload_flashaddr =
+ (g_bload_flashaddr & 0xFFFF0000) | (ihex_rec->addr);
+ g_bload_crc16 ^=
+ mcu_bload_calc_crc16(ihex_rec->recdata, ihex_rec->datasize);
+
+ /* Write Erase Pages CMD */
+ g_bload_buf[0] = BL_WRITE_MEM_NS;
+ g_bload_buf[1] = ~(BL_WRITE_MEM_NS);
+
+ ret = ar0521_write(client, g_bload_buf, 2);
+ if (ret < 0) {
+ dev_err(&client->dev,"Write Failed \n");
+ return -1;
+ }
+
+ /* Wait for ACK or NACK */
+ ret = ar0521_read(client, g_bload_buf, 1);
+ if (ret < 0) {
+ dev_err(&client->dev,"Read Failed \n");
+ return -1;
+ }
+
+ if (g_bload_buf[0] != RESP_ACK) {
+ /* NACK Received */
+ dev_err(&client->dev," NACK Received... exiting.. \n");
+ return -1;
+ }
+
+ g_bload_buf[0] = (g_bload_flashaddr & 0xFF000000) >> 24;
+ g_bload_buf[1] = (g_bload_flashaddr & 0x00FF0000) >> 16;
+ g_bload_buf[2] = (g_bload_flashaddr & 0x0000FF00) >> 8;
+ g_bload_buf[3] = (g_bload_flashaddr & 0x000000FF);
+ g_bload_buf[4] =
+ g_bload_buf[0] ^ g_bload_buf[1] ^ g_bload_buf[2] ^
+ g_bload_buf[3];
+
+ ret = ar0521_write(client, g_bload_buf, 5);
+ if (ret < 0) {
+ dev_err(&client->dev,"Write Failed \n");
+ return -1;
+ }
+
+ /* Wait for ACK or NACK */
+ ret = ar0521_read(client, g_bload_buf, 1);
+ if (ret < 0) {
+ dev_err(&client->dev,"Read Failed \n");
+ return -1;
+ }
+
+ if (g_bload_buf[0] != RESP_ACK) {
+ /* NACK Received */
+ dev_err(&client->dev," NACK Received... exiting.. \n");
+ return -1;
+ }
+
+ g_bload_buf[0] = ihex_rec->datasize - 1;
+ checksum = g_bload_buf[0];
+ for (i = 0; i < ihex_rec->datasize; i++) {
+ g_bload_buf[i + 1] = ihex_rec->recdata[i];
+ checksum ^= g_bload_buf[i + 1];
+ }
+
+ g_bload_buf[i + 1] = checksum;
+
+ ret = ar0521_write(client, g_bload_buf, i + 2);
+ if (ret < 0) {
+ dev_err(&client->dev,"Write Failed \n");
+ return -1;
+ }
+
+ poll_busy:
+ /* Wait for ACK or NACK */
+ ret = ar0521_read(client, g_bload_buf, 1);
+ if (ret < 0) {
+ dev_err(&client->dev,"Read Failed \n");
+ return -1;
+ }
+
+ if (g_bload_buf[0] == RESP_BUSY)
+ goto poll_busy;
+
+ if (g_bload_buf[0] != RESP_ACK) {
+ /* NACK Received */
+ dev_err(&client->dev," NACK Received... exiting.. \n");
+ return -1;
+ }
+
+ } else if (ihex_rec->rectype == REC_TYPE_SLA) {
+ /* Update Instruction pointer to this address */
+
+ } else if (ihex_rec->rectype == REC_TYPE_EOF) {
+ /* End of File - Issue I2C Go Command */
+ return 0;
+ } else {
+
+ /* Unhandled Type */
+ dev_err(&client->dev,"Unhandled Command Type \n");
+ return -1;
+ }
+
+ return 0;
+}
+
+static int mcu_bload_update_fw(struct i2c_client *client)
+{
+ /* exclude NULL character at end of string */
+ unsigned long hex_file_size = ARRAY_SIZE(g_mcu_fw_buf) - 1;
+ unsigned char wbuf[MAX_BUF_LEN];
+ int i = 0, recindex = 0, ret = 0;
+
+ for (i = 0; i < hex_file_size; i++) {
+ if ((recindex == 0) && (g_mcu_fw_buf[i] == ':')) {
+ /* pr_info("Start of a Record \n"); */
+ } else if (g_mcu_fw_buf[i] == CR) {
+ /* No Implementation */
+ } else if (g_mcu_fw_buf[i] == LF) {
+ if (recindex == 0) {
+ /* Parsing Complete */
+ break;
+ }
+
+ /* Analyze Packet and Send Commands */
+ ret = mcu_bload_parse_send_cmd(client, wbuf, recindex);
+ if (ret < 0) {
+ dev_err(&client->dev,"Error in Processing Commands \n");
+ break;
+ }
+
+ recindex = 0;
+
+ } else {
+ /* Parse Rec Data */
+ if ((ret = mcu_bload_ascii2hex(g_mcu_fw_buf[i])) < 0) {
+ dev_err(&client->dev,
+ "Invalid Character - 0x%02x !! \n",
+ g_mcu_fw_buf[i]);
+ break;
+ }
+
+ wbuf[recindex] = (0xF0 & (ret << 4));
+ i++;
+
+ if ((ret = mcu_bload_ascii2hex(g_mcu_fw_buf[i])) < 0) {
+ dev_err(&client->dev,
+ "Invalid Character - 0x%02x !!!! \n",
+ g_mcu_fw_buf[i]);
+ break;
+ }
+
+ wbuf[recindex] |= (0x0F & ret);
+ recindex++;
+ }
+ }
+
+#ifdef AR0521_DEBUG
+ pr_info("Program FLASH Success !! - CRC = 0x%04x \n",
+ g_bload_crc16);
+#endif
+
+ /* ------------ PROGRAM FLASH END ----------------------- */
+
+ return ret;
+}
+
+static int mcu_bload_read(struct i2c_client *client,
+ unsigned int g_bload_flashaddr, char *bytearray,
+ unsigned int len)
+{
+ int ret = 0;
+
+ g_bload_buf[0] = BL_READ_MEM;
+ g_bload_buf[1] = ~(BL_READ_MEM);
+
+ ret = ar0521_write(client, g_bload_buf, 2);
+ if (ret < 0) {
+ dev_err(&client->dev,"Write Failed \n");
+ return -1;
+ }
+
+ /* Wait for ACK or NACK */
+ ret = ar0521_read(client, g_bload_buf, 1);
+ if (ret < 0) {
+ dev_err(&client->dev,"Read Failed \n");
+ return -1;
+ }
+
+ if (g_bload_buf[0] != RESP_ACK) {
+ /* NACK Received */
+ dev_err(&client->dev," NACK Received... exiting.. \n");
+ return -1;
+ }
+
+ g_bload_buf[0] = (g_bload_flashaddr & 0xFF000000) >> 24;
+ g_bload_buf[1] = (g_bload_flashaddr & 0x00FF0000) >> 16;
+ g_bload_buf[2] = (g_bload_flashaddr & 0x0000FF00) >> 8;
+ g_bload_buf[3] = (g_bload_flashaddr & 0x000000FF);
+ g_bload_buf[4] =
+ g_bload_buf[0] ^ g_bload_buf[1] ^ g_bload_buf[2] ^ g_bload_buf[3];
+
+ ret = ar0521_write(client, g_bload_buf, 5);
+ if (ret < 0) {
+ dev_err(&client->dev,"Write Failed \n");
+ return -1;
+ }
+
+ /* Wait for ACK or NACK */
+ ret = ar0521_read(client, g_bload_buf, 1);
+ if (ret < 0) {
+ dev_err(&client->dev,"Read Failed \n");
+ return -1;
+ }
+
+ if (g_bload_buf[0] != RESP_ACK) {
+ /* NACK Received */
+ dev_err(&client->dev," NACK Received... exiting.. \n");
+ return -1;
+ }
+
+ g_bload_buf[0] = len - 1;
+ g_bload_buf[1] = ~(len - 1);
+
+ ret = ar0521_write(client, g_bload_buf, 2);
+ if (ret < 0) {
+ dev_err(&client->dev,"Write Failed \n");
+ return -1;
+ }
+
+ /* Wait for ACK or NACK */
+ ret = ar0521_read(client, g_bload_buf, 1);
+ if (ret < 0) {
+ dev_err(&client->dev,"Read Failed \n");
+ return -1;
+ }
+
+ if (g_bload_buf[0] != RESP_ACK) {
+ /* NACK Received */
+ dev_err(&client->dev," NACK Received... exiting.. \n");
+ return -1;
+ }
+
+ ret = ar0521_read(client, bytearray, len);
+ if (ret < 0) {
+ dev_err(&client->dev,"Read Failed \n");
+ return -1;
+ }
+
+ return 0;
+}
+
+static int mcu_bload_verify_flash(struct i2c_client *client,
+ unsigned short int orig_crc)
+{
+ char bytearray[FLASH_READ_LEN];
+ unsigned short int calc_crc = 0;
+ unsigned int flash_addr = FLASH_START_ADDRESS, i = 0;
+
+ while ((i + FLASH_READ_LEN) <= FLASH_SIZE) {
+ memset(bytearray, 0x0, FLASH_READ_LEN);
+
+ if (mcu_bload_read(
+ client, flash_addr + i, bytearray, FLASH_READ_LEN) < 0) {
+ dev_err(&client->dev," i2c_bload_read FAIL !! \n");
+ return -1;
+ }
+
+ calc_crc ^= mcu_bload_calc_crc16(bytearray, FLASH_READ_LEN);
+ i += FLASH_READ_LEN;
+ }
+
+ if ((FLASH_SIZE - i) > 0) {
+ memset(bytearray, 0x0, FLASH_READ_LEN);
+
+ if (mcu_bload_read(
+ client, flash_addr + i, bytearray, (FLASH_SIZE - i)
+ ) < 0) {
+ dev_err(&client->dev," i2c_bload_read FAIL !! \n");
+ return -1;
+ }
+
+ calc_crc ^= mcu_bload_calc_crc16(bytearray, FLASH_READ_LEN);
+ }
+
+ if (orig_crc != calc_crc) {
+ dev_err(&client->dev," CRC verification fail !! 0x%04x != 0x%04x \n",
+ orig_crc, calc_crc);
+ }
+
+#ifdef AR0521_DEBUG
+ pr_info(" CRC Verification Success 0x%04x == 0x%04x \n",
+ orig_crc, calc_crc);
+#endif
+
+ return 0;
+}
+
+static int mcu_bload_go(struct i2c_client *client)
+{
+ int ret = 0;
+
+ g_bload_buf[0] = BL_GO;
+ g_bload_buf[1] = ~(BL_GO);
+
+ ret = ar0521_write(client, g_bload_buf, 2);
+ if (ret < 0) {
+ dev_err(&client->dev,"Write Failed \n");
+ return -1;
+ }
+
+ ret = ar0521_read(client, g_bload_buf, 1);
+ if (ret < 0) {
+ dev_err(&client->dev,"Failed Read 1 \n");
+ return -1;
+ }
+
+ /* Start Address */
+ g_bload_buf[0] = (FLASH_START_ADDRESS & 0xFF000000) >> 24;
+ g_bload_buf[1] = (FLASH_START_ADDRESS & 0x00FF0000) >> 16;
+ g_bload_buf[2] = (FLASH_START_ADDRESS & 0x0000FF00) >> 8;
+ g_bload_buf[3] = (FLASH_START_ADDRESS & 0x000000FF);
+ g_bload_buf[4] =
+ g_bload_buf[0] ^ g_bload_buf[1] ^ g_bload_buf[2] ^ g_bload_buf[3];
+
+ ret = ar0521_write(client, g_bload_buf, 5);
+ if (ret < 0) {
+ dev_err(&client->dev,"Write Failed \n");
+ return -1;
+ }
+
+ ret = ar0521_read(client, g_bload_buf, 1);
+ if (ret < 0) {
+ dev_err(&client->dev,"Failed Read 1 \n");
+ return -1;
+ }
+
+ if (g_bload_buf[0] != RESP_ACK) {
+ /* NACK Received */
+ dev_err(&client->dev," NACK Received... exiting.. \n");
+ return -1;
+ }
+
+ return 0;
+}
+
+static int mcu_fw_update(struct i2c_client *client, unsigned char *mcu_fw_version)
+{
+ int ret = 0;
+ g_bload_crc16 = 0;
+
+ /*
+ * TODO: Is this necessary? It seems redundant as it's already called before
+ * calling this function.
+ */
+ /* Read Firmware version from bootloader MCU */
+ ret = mcu_bload_get_version(client);
+ if (ret < 0) {
+ dev_err(&client->dev," Error in Get Version \n");
+ goto exit;
+ }
+
+#ifdef AR0521_DEBUG
+ pr_info(" Get Version SUCCESS !! \n");
+#endif
+
+ /* Erase firmware present in the MCU and flash new firmware*/
+ ret = mcu_bload_erase_flash(client);
+ if (ret < 0) {
+ dev_err(&client->dev," Error in Erase Flash \n");
+ goto exit;
+ }
+
+#ifdef AR0521_DEBUG
+ pr_info("Erase Flash Success !! \n");
+#endif
+
+ /* Read the firmware present in the text file */
+ if ((ret = mcu_bload_update_fw(client)) < 0) {
+ dev_err(&client->dev," Write Flash FAIL !! \n");
+ goto exit;
+ }
+
+ /* Verify the checksum for the update firmware */
+ if ((ret = mcu_bload_verify_flash(client, g_bload_crc16)) < 0) {
+ dev_err(&client->dev," verify_flash FAIL !! \n");
+ goto exit;
+ }
+
+ /* Reverting from bootloader mode */
+ /* I2C GO Command */
+ if ((ret = mcu_bload_go(client)) < 0) {
+ dev_err(&client->dev," i2c_bload_go FAIL !! \n");
+ goto exit;
+ }
+
+ if(mcu_fw_version) {
+
+#ifdef AR0521_DEBUG
+ pr_info("(%s) - Firmware Updated - (%.32s)\n",
+ __func__, mcu_fw_version);
+#endif
+
+ }
+ exit:
+ return ret;
+}
+
+static int mcu_count_or_list_ctrls(struct i2c_client *client,
+ ISP_CTRL_INFO * mcu_cam_ctrl, int *numctrls)
+{
+ uint32_t payload_len = 0;
+ uint8_t errcode = ERRCODE_SUCCESS, orig_crc = 0, calc_crc = 0;
+ uint16_t index = 0;
+ int ret = 0, err = 0;
+
+ /* lock semaphore */
+ mutex_lock(&mcu_i2c_mutex);
+
+ /* Array of Ctrl Info */
+ while (1) {
+ /* First Txn Payload length = 0 */
+ payload_len = 2;
+
+ mc_data[0] = CMD_SIGNATURE;
+ mc_data[1] = CMD_ID_GET_CTRL_INFO;
+ mc_data[2] = payload_len >> 8;
+ mc_data[3] = payload_len & 0xFF;
+ mc_data[4] = errorcheck(&mc_data[2], 2);
+
+ ar0521_write(client, mc_data, TX_LEN_PKT);
+
+ mc_data[0] = CMD_SIGNATURE;
+ mc_data[1] = CMD_ID_GET_CTRL_INFO;
+ mc_data[2] = index >> 8;
+ mc_data[3] = index & 0xFF;
+ mc_data[4] = errorcheck(&mc_data[2], 2);
+ err = ar0521_write(client, mc_data, 5);
+ if (err != 0) {
+ dev_err(&client->dev," %s(%d) Error - %d \n",
+ __func__, __LINE__, err);
+ ret = -EIO;
+ goto exit;
+ }
+
+ err = ar0521_read(client, mc_ret_data, RX_LEN_PKT);
+ if (err != 0) {
+ dev_err(&client->dev," %s(%d) Error - %d \n",
+ __func__, __LINE__, err);
+ ret = -EIO;
+ goto exit;
+ }
+
+ /* Verify CRC */
+ orig_crc = mc_ret_data[4];
+ calc_crc = errorcheck(&mc_ret_data[2], 2);
+ if (orig_crc != calc_crc) {
+ dev_err(&client->dev,
+ " %s(%d) CRC 0x%02x != 0x%02x \n",
+ __func__, __LINE__, orig_crc, calc_crc);
+ ret = -EINVAL;
+ goto exit;
+ }
+
+ if (((mc_ret_data[2] << 8) | mc_ret_data[3]) == 0) {
+ *numctrls = index;
+ break;
+ }
+
+ payload_len =
+ ((mc_ret_data[2] << 8) | mc_ret_data[3]) +
+ HEADER_FOOTER_SIZE;
+ errcode = mc_ret_data[5];
+ if (errcode != ERRCODE_SUCCESS) {
+ dev_err(&client->dev,
+ " %s(%d) Errcode - 0x%02x \n",
+ __func__, __LINE__, errcode);
+ ret = -EIO;
+ goto exit;
+ }
+
+ memset(mc_ret_data, 0x00, payload_len);
+ err = ar0521_read(client, mc_ret_data, payload_len);
+ if (err != 0) {
+ dev_err(&client->dev," %s(%d) Error - %d \n",
+ __func__, __LINE__, err);
+ ret = -1;
+ goto exit;
+ }
+
+ /* Verify CRC */
+ orig_crc = mc_ret_data[payload_len - 2];
+ calc_crc =
+ errorcheck(&mc_ret_data[2],
+ payload_len - HEADER_FOOTER_SIZE);
+ if (orig_crc != calc_crc) {
+ dev_err(&client->dev,
+ " %s(%d) CRC 0x%02x != 0x%02x \n",
+ __func__, __LINE__, orig_crc, calc_crc);
+ ret = -EINVAL;
+ goto exit;
+ }
+
+ /* Verify Errcode */
+ errcode = mc_ret_data[payload_len - 1];
+ if (errcode != ERRCODE_SUCCESS) {
+ dev_err(&client->dev,
+ " %s(%d) Errcode - 0x%02x \n",
+ __func__, __LINE__, errcode);
+ ret = -EINVAL;
+ goto exit;
+ }
+
+ if(mcu_cam_ctrl != NULL) {
+ int sorted_elem = index - 1, elem = index;
+
+ /* append ctrl info in array */
+ mcu_cam_ctrl[index].ctrl_id =
+ mc_ret_data[2] << 24 | mc_ret_data[3] << 16 | mc_ret_data[4]
+ << 8 | mc_ret_data[5];
+ mcu_cam_ctrl[index].ctrl_type = mc_ret_data[6];
+
+ switch (mcu_cam_ctrl[index].ctrl_type) {
+ case CTRL_STANDARD:
+ mcu_cam_ctrl[index].ctrl_data.std.ctrl_min =
+ mc_ret_data[7] << 24 | mc_ret_data[8] << 16
+ | mc_ret_data[9] << 8 | mc_ret_data[10];
+
+ mcu_cam_ctrl[index].ctrl_data.std.ctrl_max =
+ mc_ret_data[11] << 24 | mc_ret_data[12] <<
+ 16 | mc_ret_data[13]
+ << 8 | mc_ret_data[14];
+
+ mcu_cam_ctrl[index].ctrl_data.std.ctrl_def =
+ mc_ret_data[15] << 24 | mc_ret_data[16] <<
+ 16 | mc_ret_data[17]
+ << 8 | mc_ret_data[18];
+
+ mcu_cam_ctrl[index].ctrl_data.std.ctrl_step =
+ mc_ret_data[19] << 24 | mc_ret_data[20] <<
+ 16 | mc_ret_data[21]
+ << 8 | mc_ret_data[22];
+
+ mcu_cam_ctrl[index].mcu_ctrl_index = index;
+ break;
+
+ case CTRL_EXTENDED:
+ /* Not Implemented */
+ break;
+ }
+
+#ifdef AR0521_DEBUG
+ pr_info("Control: ID: 0x%x; Type: %u; min: %d; Max: %d; Def: %d; Step: %u\n",
+ mcu_cam_ctrl[index].ctrl_id,
+ mcu_cam_ctrl[index].ctrl_type,
+ mcu_cam_ctrl[index].ctrl_data.std.ctrl_min,
+ mcu_cam_ctrl[index].ctrl_data.std.ctrl_max,
+ mcu_cam_ctrl[index].ctrl_data.std.ctrl_def,
+ mcu_cam_ctrl[index].ctrl_data.std.ctrl_step
+ );
+#endif
+
+ ctrldb[index] = mcu_cam_ctrl[index].ctrl_id;
+
+ /*
+ * Keep the control list and control db sorted.
+ */
+ while(
+ sorted_elem >= 0 &&
+ (
+ mcu_cam_ctrl[sorted_elem].ctrl_id >
+ mcu_cam_ctrl[elem].ctrl_id
+ )
+ )
+ {
+ ISP_CTRL_INFO swap_ctrl_elem;
+ uint32_t swap_ctrldb_elem;
+
+ /*
+ * Swap the elements in the mcu_cam_ctrl list
+ */
+ memcpy(&swap_ctrl_elem, (mcu_cam_ctrl + sorted_elem), sizeof(ISP_CTRL_INFO));
+ memcpy((mcu_cam_ctrl + sorted_elem), (mcu_cam_ctrl + elem), sizeof(ISP_CTRL_INFO));
+ memcpy((mcu_cam_ctrl + elem), &swap_ctrl_elem, sizeof(ISP_CTRL_INFO));
+
+ /*
+ * Swap the elements in ctrldb
+ */
+ swap_ctrldb_elem = ctrldb[sorted_elem];
+ ctrldb[sorted_elem] = ctrldb[elem];
+ ctrldb[elem] = swap_ctrldb_elem;
+
+ elem = sorted_elem;
+ sorted_elem = elem - 1;
+ }
+ }
+ index++;
+ }
+
+ exit:
+ /* unlock semaphore */
+ mutex_unlock(&mcu_i2c_mutex);
+
+ return ret;
+}
+
+static int mcu_count_or_list_fmts(struct i2c_client *client, ISP_STREAM_INFO *stream_info, int *frm_fmt_size)
+{
+ uint32_t payload_len = 0, err = 0;
+ uint8_t errcode = ERRCODE_SUCCESS, orig_crc = 0, calc_crc = 0, skip = 0;
+ uint16_t index = 0, mode = 0;
+
+ int loop = 0, num_frates = 0, ret = 0;
+
+ /* Stream Info Variables */
+
+ /* lock semaphore */
+ mutex_lock(&mcu_i2c_mutex);
+
+ /* List all formats from MCU and append to mcu_ar0521_frmfmt array */
+
+ for (index = 0;; index++) {
+ /* First Txn Payload length = 0 */
+ payload_len = 2;
+
+ mc_data[0] = CMD_SIGNATURE;
+ mc_data[1] = CMD_ID_GET_STREAM_INFO;
+ mc_data[2] = payload_len >> 8;
+ mc_data[3] = payload_len & 0xFF;
+ mc_data[4] = errorcheck(&mc_data[2], 2);
+
+ ar0521_write(client, mc_data, TX_LEN_PKT);
+
+ mc_data[0] = CMD_SIGNATURE;
+ mc_data[1] = CMD_ID_GET_STREAM_INFO;
+ mc_data[2] = index >> 8;
+ mc_data[3] = index & 0xFF;
+ mc_data[4] = errorcheck(&mc_data[2], 2);
+ err = ar0521_write(client, mc_data, 5);
+ if (err != 0) {
+ dev_err(&client->dev," %s(%d) Error - %d \n",
+ __func__, __LINE__, err);
+ ret = -EIO;
+ goto exit;
+ }
+
+ err = ar0521_read(client, mc_ret_data, RX_LEN_PKT);
+ if (err != 0) {
+ dev_err(&client->dev," %s(%d) Error - %d \n",
+ __func__, __LINE__, err);
+ ret = -EIO;
+ goto exit;
+ }
+
+ /* Verify CRC */
+ orig_crc = mc_ret_data[4];
+ calc_crc = errorcheck(&mc_ret_data[2], 2);
+ if (orig_crc != calc_crc) {
+ dev_err(&client->dev,
+ " %s(%d) CRC 0x%02x != 0x%02x \n",
+ __func__, __LINE__, orig_crc, calc_crc);
+ ret = -EINVAL;
+ goto exit;
+ }
+
+ if (((mc_ret_data[2] << 8) | mc_ret_data[3]) == 0) {
+ if(stream_info == NULL) {
+ *frm_fmt_size = index;
+ } else {
+ *frm_fmt_size = mode;
+ }
+ break;
+ }
+
+ payload_len =
+ ((mc_ret_data[2] << 8) | mc_ret_data[3]) +
+ HEADER_FOOTER_SIZE;
+ errcode = mc_ret_data[5];
+ if (errcode != ERRCODE_SUCCESS) {
+ dev_err(&client->dev,
+ " %s(%d) Errcode - 0x%02x \n",
+ __func__, __LINE__, errcode);
+ ret = -EIO;
+ goto exit;
+ }
+
+ memset(mc_ret_data, 0x00, payload_len);
+ err = ar0521_read(client, mc_ret_data, payload_len);
+ if (err != 0) {
+ dev_err(&client->dev," %s(%d) Error - %d \n",
+ __func__, __LINE__, err);
+ ret = -1;
+ goto exit;
+ }
+
+ /* Verify CRC */
+ orig_crc = mc_ret_data[payload_len - 2];
+ calc_crc =
+ errorcheck(&mc_ret_data[2],
+ payload_len - HEADER_FOOTER_SIZE);
+ if (orig_crc != calc_crc) {
+ dev_err(&client->dev,
+ " %s(%d) CRC 0x%02x != 0x%02x \n",
+ __func__, __LINE__, orig_crc, calc_crc);
+ ret = -EINVAL;
+ goto exit;
+ }
+
+ /* Verify Errcode */
+ errcode = mc_ret_data[payload_len - 1];
+ if (errcode != ERRCODE_SUCCESS) {
+ dev_err(&client->dev,
+ " %s(%d) Errcode - 0x%02x \n",
+ __func__, __LINE__, errcode);
+ ret = -EIO;
+ goto exit;
+ }
+ if(stream_info != NULL) {
+ stream_info->fmt_fourcc =
+ mc_ret_data[2] << 24 | mc_ret_data[3] << 16 | mc_ret_data[4]
+ << 8 | mc_ret_data[5];
+ stream_info->width = mc_ret_data[6] << 8 | mc_ret_data[7];
+ stream_info->height = mc_ret_data[8] << 8 | mc_ret_data[9];
+ stream_info->frame_rate_type = mc_ret_data[10];
+
+ switch (stream_info->frame_rate_type) {
+ case FRAME_RATE_DISCRETE:
+ stream_info->frame_rate.disc.frame_rate_num =
+ mc_ret_data[11] << 8 | mc_ret_data[12];
+
+ stream_info->frame_rate.disc.frame_rate_denom =
+ mc_ret_data[13] << 8 | mc_ret_data[14];
+
+ break;
+
+ case FRAME_RATE_CONTINOUS:
+ dev_err(&client->dev,
+ " The Stream format at index 0x%04x has FRAME_RATE_CONTINOUS,"
+ "which is unsupported !! \n", index);
+
+ continue;
+ }
+
+ switch (stream_info->fmt_fourcc) {
+ /*
+ * We check for UYVY here instead of YUYV as the output from the sensor
+ * is UYVY. We swap it to YUYV only making changes in the platform driver.
+ */
+ case V4L2_PIX_FMT_UYVY:
+ /* ar0521_codes is already populated with V4L2_PIX_FMT_YUYV */
+ /* check if width and height are already in array - update frame rate only */
+ for (loop = 0; loop < (mode); loop++) {
+ if ((ar0521_data.mcu_cam_frmfmt[loop].size.width ==
+ stream_info->width)
+ && (ar0521_data.mcu_cam_frmfmt[loop].size.height ==
+ stream_info->height)) {
+
+ num_frates =
+ ar0521_data.mcu_cam_frmfmt[loop].num_framerates;
+ *((int *)(ar0521_data.mcu_cam_frmfmt[loop].framerates) + num_frates)
+ = (int)(stream_info->frame_rate.
+ disc.frame_rate_num /
+ stream_info->frame_rate.
+ disc.frame_rate_denom);
+
+ ar0521_data.mcu_cam_frmfmt[loop].num_framerates++;
+
+ streamdb[index] = loop;
+ skip = 1;
+ break;
+ }
+ }
+
+ if (skip) {
+ skip = 0;
+ continue;
+ }
+
+ /* Add Width, Height, Frame Rate array, Mode into mcu_ar0521_frmfmt array */
+ ar0521_data.mcu_cam_frmfmt[mode].size.width = stream_info->width;
+ ar0521_data.mcu_cam_frmfmt[mode].size.height = stream_info->height;
+
+ num_frates = ar0521_data.mcu_cam_frmfmt[mode].num_framerates;
+
+ *(ar0521_data.mcu_cam_frmfmt[mode].framerates + num_frates) =
+ (int)(stream_info->frame_rate.disc.frame_rate_num /
+ stream_info->frame_rate.disc.frame_rate_denom);
+
+ ar0521_data.mcu_cam_frmfmt[mode].num_framerates++;
+
+ ar0521_data.mcu_cam_frmfmt[mode].mode = mode;
+ ar0521_data.mcu_cam_frmfmt[mode].mode = mode;
+ streamdb[index] = mode;
+ mode++;
+ break;
+
+ default:
+ dev_err(&client->dev,
+ " The Stream format at index 0x%04x has format 0x%08x ,"
+ "which is unsupported !! \n", index,
+ stream_info->fmt_fourcc);
+ }
+ }
+ }
+
+ exit:
+ /* unlock semaphore */
+ mutex_unlock(&mcu_i2c_mutex);
+
+ return ret;
+}
+
+/*
+ * Function to initialise the data related to MCU. Needs to be called
+ * before trying to use them.
+ */
+static int mcu_data_init(struct device *dev, int frm_fmt_size)
+{
+ int loop = 0;
+
+ if (dev == NULL)
+ {
+ dev_err(dev, "%s: Invalid device parameter\n", __func__);
+ return -EINVAL;
+ }
+
+ mcu_ctrl_info = devm_kzalloc(dev, sizeof(ISP_CTRL_INFO) * num_ctrls, GFP_KERNEL);
+ if(!mcu_ctrl_info) {
+ dev_err(dev, "Unable to allocate memory \n");
+ return -ENOMEM;
+ }
+
+ ctrldb = devm_kzalloc(dev, sizeof(uint32_t) * num_ctrls, GFP_KERNEL);
+ if(!ctrldb) {
+ dev_err(dev, "Unable to allocate memory \n");
+ return -ENOMEM;
+ }
+
+ stream_info = devm_kzalloc(dev, sizeof(ISP_STREAM_INFO) * (frm_fmt_size + 1), GFP_KERNEL);
+
+ streamdb = devm_kzalloc(dev, sizeof(int) * (frm_fmt_size + 1), GFP_KERNEL);
+ if(!streamdb) {
+ dev_err(dev,"Unable to allocate memory \n");
+ return -ENOMEM;
+ }
+
+ ar0521_data.mcu_cam_frmfmt = devm_kzalloc(dev, sizeof(struct mcu_frmfmt) * (frm_fmt_size), GFP_KERNEL);
+ if(!ar0521_data.mcu_cam_frmfmt) {
+ dev_err(dev, "Unable to allocate memory \n");
+ return -ENOMEM;
+ }
+
+ for(; loop < frm_fmt_size; loop++) {
+ ar0521_data.mcu_cam_frmfmt[loop].framerates = devm_kzalloc(dev, sizeof(int) * MAX_NUM_FRATES, GFP_KERNEL);
+ if(!ar0521_data.mcu_cam_frmfmt[loop].framerates) {
+ dev_err(dev, "Unable to allocate memory \n");
+ return -ENOMEM;
+ }
+ }
+
+ return 0;
+}
+
+static int mcu_get_sensor_id(struct i2c_client *client, uint16_t * sensor_id)
+{
+ uint32_t payload_len = 0;
+ uint8_t errcode = ERRCODE_SUCCESS, orig_crc = 0, calc_crc = 0;
+
+ int ret = 0, err = 0;
+
+ /* lock semaphore */
+ mutex_lock(&mcu_i2c_mutex);
+
+ /* Read the version info. from Micro controller */
+
+ /* First Txn Payload length = 0 */
+ payload_len = 0;
+
+ mc_data[0] = CMD_SIGNATURE;
+ mc_data[1] = CMD_ID_GET_SENSOR_ID;
+ mc_data[2] = payload_len >> 8;
+ mc_data[3] = payload_len & 0xFF;
+ mc_data[4] = errorcheck(&mc_data[2], 2);
+
+ ar0521_write(client, mc_data, TX_LEN_PKT);
+
+ mc_data[0] = CMD_SIGNATURE;
+ mc_data[1] = CMD_ID_GET_SENSOR_ID;
+ err = ar0521_write(client, mc_data, 2);
+ if (err != 0) {
+ dev_err(&client->dev," %s(%d) Error - %d \n", __func__,
+ __LINE__, err);
+ ret = -EIO;
+ goto exit;
+ }
+
+ err = ar0521_read(client, mc_ret_data, RX_LEN_PKT);
+ if (err != 0) {
+ dev_err(&client->dev," %s(%d) Error - %d \n", __func__,
+ __LINE__, err);
+ ret = -EIO;
+ goto exit;
+ }
+
+ /* Verify CRC */
+ orig_crc = mc_ret_data[4];
+ calc_crc = errorcheck(&mc_ret_data[2], 2);
+ if (orig_crc != calc_crc) {
+ dev_err(&client->dev," %s(%d) CRC 0x%02x != 0x%02x \n",
+ __func__, __LINE__, orig_crc, calc_crc);
+ ret = -EINVAL;
+ goto exit;
+ }
+
+ errcode = mc_ret_data[5];
+ if (errcode != ERRCODE_SUCCESS) {
+ dev_err(&client->dev," %s(%d) Errcode - 0x%02x \n",
+ __func__, __LINE__, errcode);
+ ret = -EIO;
+ goto exit;
+ }
+
+ payload_len =
+ ((mc_ret_data[2] << 8) | mc_ret_data[3]) + HEADER_FOOTER_SIZE;
+
+ memset(mc_ret_data, 0x00, payload_len);
+ err = ar0521_read(client, mc_ret_data, payload_len);
+ if (err != 0) {
+ dev_err(&client->dev," %s(%d) Error - %d \n", __func__,
+ __LINE__, err);
+ ret = -EIO;
+ goto exit;
+ }
+
+ /* Verify CRC */
+ orig_crc = mc_ret_data[payload_len - 2];
+ calc_crc = errorcheck(&mc_ret_data[2], 2);
+ if (orig_crc != calc_crc) {
+ dev_err(&client->dev," %s(%d) CRC 0x%02x != 0x%02x \n",
+ __func__, __LINE__, orig_crc, calc_crc);
+ ret = -EINVAL;
+ goto exit;
+ }
+
+ /* Verify Errcode */
+ errcode = mc_ret_data[payload_len - 1];
+ if (errcode != ERRCODE_SUCCESS) {
+ dev_err(&client->dev," %s(%d) Errcode - 0x%02x \n",
+ __func__, __LINE__, errcode);
+ ret = -EIO;
+ goto exit;
+ }
+
+ *sensor_id = mc_ret_data[2] << 8 | mc_ret_data[3];
+
+ exit:
+ /* unlock semaphore */
+ mutex_unlock(&mcu_i2c_mutex);
+
+ return ret;
+}
+
+static int mcu_get_cmd_status(struct i2c_client *client,
+ uint8_t * cmd_id, uint16_t * cmd_status,
+ uint8_t * ret_code)
+{
+ uint32_t payload_len = 0;
+ uint8_t orig_crc = 0, calc_crc = 0;
+ int err = 0;
+
+ /* No Semaphore in Get command Status */
+
+ /* First Txn Payload length = 0 */
+ payload_len = 1;
+
+ mc_data[0] = CMD_SIGNATURE;
+ mc_data[1] = CMD_ID_GET_STATUS;
+ mc_data[2] = payload_len >> 8;
+ mc_data[3] = payload_len & 0xFF;
+ mc_data[4] = errorcheck(&mc_data[2], 2);
+
+ ar0521_write(client, mc_data, TX_LEN_PKT);
+
+ mc_data[0] = CMD_SIGNATURE;
+ mc_data[1] = CMD_ID_GET_STATUS;
+ mc_data[2] = *cmd_id;
+ err = ar0521_write(client, mc_data, 3);
+ if (err != 0) {
+ dev_err(&client->dev," %s(%d) Error - %d \n", __func__,
+ __LINE__, err);
+ return -EIO;
+ }
+
+ payload_len = CMD_STATUS_MSG_LEN;
+ memset(mc_ret_data, 0x00, payload_len);
+ err = ar0521_read(client, mc_ret_data, payload_len);
+ if (err != 0) {
+ dev_err(&client->dev," %s(%d) Error - %d \n", __func__,
+ __LINE__, err);
+ return -EIO;
+ }
+
+ /* Verify CRC */
+ orig_crc = mc_ret_data[payload_len - 2];
+ calc_crc = errorcheck(&mc_ret_data[2], 3);
+ if (orig_crc != calc_crc) {
+ dev_err(&client->dev," %s(%d) CRC 0x%02x != 0x%02x \n",
+ __func__, __LINE__, orig_crc, calc_crc);
+ return -EINVAL;
+ }
+
+ *cmd_id = mc_ret_data[2];
+ *cmd_status = mc_ret_data[3] << 8 | mc_ret_data[4];
+ *ret_code = mc_ret_data[payload_len - 1];
+
+ return 0;
+}
+
+static int mcu_isp_init(struct i2c_client *client)
+{
+ uint32_t payload_len = 0;
+
+ uint16_t cmd_status = 0;
+ uint8_t retcode = 0, cmd_id = 0;
+ int retry = 1000, err = 0;
+
+ /* check current status - if initialized, no need for Init */
+ cmd_id = CMD_ID_INIT_CAM;
+ if (mcu_get_cmd_status(client, &cmd_id, &cmd_status, &retcode) < 0) {
+ dev_err(&client->dev," %s(%d) Error \n", __func__, __LINE__);
+ return -EIO;
+ }
+
+ if ((cmd_status == MCU_CMD_STATUS_SUCCESS) &&
+ (retcode == ERRCODE_SUCCESS)) {
+
+#ifdef AR0521_DEBUG
+ pr_info(" Already Initialized !! \n");
+#endif
+
+ return 0;
+ }
+
+ /* call ISP init command */
+
+ /* First Txn Payload length = 0 */
+ payload_len = 0;
+
+ mc_data[0] = CMD_SIGNATURE;
+ mc_data[1] = CMD_ID_INIT_CAM;
+ mc_data[2] = payload_len >> 8;
+ mc_data[3] = payload_len & 0xFF;
+ mc_data[4] = errorcheck(&mc_data[2], 2);
+
+ ar0521_write(client, mc_data, TX_LEN_PKT);
+
+ mc_data[0] = CMD_SIGNATURE;
+ mc_data[1] = CMD_ID_INIT_CAM;
+ err = ar0521_write(client, mc_data, 2);
+ if (err != 0) {
+ dev_err(&client->dev," %s(%d) Error - %d \n", __func__,
+ __LINE__, err);
+ return -EIO;
+ }
+
+ while (--retry > 0) {
+ /* Some Sleep for init to process */
+ mdelay(5);
+
+ cmd_id = CMD_ID_INIT_CAM;
+ if (mcu_get_cmd_status(
+ client, &cmd_id, &cmd_status, &retcode) < 0) {
+ dev_err(&client->dev," %s(%d) Error \n",
+ __func__, __LINE__);
+ return -EIO;
+ }
+
+ if ((cmd_status == MCU_CMD_STATUS_SUCCESS) &&
+ ((retcode == ERRCODE_SUCCESS) || (retcode == ERRCODE_ALREADY))) {
+
+#ifdef AR0521_DEBUG
+ pr_info(" ISP Already Initialized !! \n");
+#endif
+
+ return 0;
+ }
+
+ if ((retcode != ERRCODE_BUSY) &&
+ ((cmd_status != MCU_CMD_STATUS_PENDING))) {
+ dev_err(&client->dev,
+ "(%s) %d Init Error STATUS = 0x%04x RET = 0x%02x\n",
+ __func__, __LINE__, cmd_status, retcode);
+ return -EIO;
+ }
+ }
+
+ return -ETIMEDOUT;
+}
+
+static int mcu_get_ctrl_ui(struct i2c_client *client,
+ ISP_CTRL_INFO * mcu_ui_info, int index)
+{
+ uint32_t payload_len = 0;
+ uint8_t errcode = ERRCODE_SUCCESS, orig_crc = 0, calc_crc = 0;
+ int ret = 0, i = 0, err = 0;
+
+ /* lock semaphore */
+ mutex_lock(&mcu_i2c_mutex);
+
+ /* First Txn Payload length = 0 */
+ payload_len = 2;
+
+ mc_data[0] = CMD_SIGNATURE;
+ mc_data[1] = CMD_ID_GET_CTRL_UI_INFO;
+ mc_data[2] = payload_len >> 8;
+ mc_data[3] = payload_len & 0xFF;
+ mc_data[4] = errorcheck(&mc_data[2], 2);
+
+ ar0521_write(client, mc_data, TX_LEN_PKT);
+
+ mc_data[0] = CMD_SIGNATURE;
+ mc_data[1] = CMD_ID_GET_CTRL_UI_INFO;
+ mc_data[2] = index >> 8;
+ mc_data[3] = index & 0xFF;
+ mc_data[4] = errorcheck(&mc_data[2], 2);
+ err = ar0521_write(client, mc_data, 5);
+ if (err != 0) {
+ dev_err(&client->dev," %s(%d) Error - %d \n", __func__,
+ __LINE__, err);
+ ret = -EIO;
+ goto exit;
+ }
+
+ err = ar0521_read(client, mc_ret_data, RX_LEN_PKT);
+ if (err != 0) {
+ dev_err(&client->dev," %s(%d) Error - %d \n", __func__,
+ __LINE__, err);
+ ret = -EIO;
+ goto exit;
+ }
+
+ /* Verify CRC */
+ orig_crc = mc_ret_data[4];
+ calc_crc = errorcheck(&mc_ret_data[2], 2);
+ if (orig_crc != calc_crc) {
+ dev_err(&client->dev," %s(%d) CRC 0x%02x != 0x%02x \n",
+ __func__, __LINE__, orig_crc, calc_crc);
+ ret = -EINVAL;
+ goto exit;
+ }
+
+ payload_len =
+ ((mc_ret_data[2] << 8) | mc_ret_data[3]) + HEADER_FOOTER_SIZE;
+ errcode = mc_ret_data[5];
+ if (errcode != ERRCODE_SUCCESS) {
+ dev_err(&client->dev," %s(%d) Errcode - 0x%02x \n",
+ __func__, __LINE__, errcode);
+ ret = -EINVAL;
+ goto exit;
+ }
+
+ memset(mc_ret_data, 0x00, payload_len);
+ err = ar0521_read(client, mc_ret_data, payload_len);
+ if (err != 0) {
+ dev_err(&client->dev," %s(%d) Error - %d \n", __func__,
+ __LINE__, err);
+ ret = -EIO;
+ goto exit;
+ }
+
+ /* Verify CRC */
+ orig_crc = mc_ret_data[payload_len - 2];
+ calc_crc =
+ errorcheck(&mc_ret_data[2], payload_len - HEADER_FOOTER_SIZE);
+ if (orig_crc != calc_crc) {
+ dev_err(&client->dev," %s(%d) CRC 0x%02x != 0x%02x \n",
+ __func__, __LINE__, orig_crc, calc_crc);
+ ret = -EINVAL;
+ goto exit;
+ }
+
+ /* Verify Errcode */
+ errcode = mc_ret_data[payload_len - 1];
+ if (errcode != ERRCODE_SUCCESS) {
+ dev_err(&client->dev," %s(%d) Errcode - 0x%02x \n",
+ __func__, __LINE__, errcode);
+ ret = -EIO;
+ goto exit;
+ }
+
+ strncpy((char *)mcu_ui_info->ctrl_ui_data.ctrl_ui_info.ctrl_name, &mc_ret_data[2],MAX_CTRL_UI_STRING_LEN);
+
+ mcu_ui_info->ctrl_ui_data.ctrl_ui_info.ctrl_ui_type = mc_ret_data[34];
+ mcu_ui_info->ctrl_ui_data.ctrl_ui_info.ctrl_ui_flags = mc_ret_data[35] << 8 |
+ mc_ret_data[36];
+
+ if (mcu_ui_info->ctrl_ui_data.ctrl_ui_info.ctrl_ui_type == V4L2_CTRL_TYPE_MENU) {
+ mcu_ui_info->ctrl_ui_data.ctrl_menu_info.num_menu_elem = mc_ret_data[37];
+
+ mcu_ui_info->ctrl_ui_data.ctrl_menu_info.menu =
+ devm_kzalloc(&client->dev,((mcu_ui_info->ctrl_ui_data.ctrl_menu_info.num_menu_elem +1) * sizeof(char *)), GFP_KERNEL);
+ for (i = 0; i < mcu_ui_info->ctrl_ui_data.ctrl_menu_info.num_menu_elem; i++) {
+ mcu_ui_info->ctrl_ui_data.ctrl_menu_info.menu[i] =
+ devm_kzalloc(&client->dev,MAX_CTRL_UI_STRING_LEN, GFP_KERNEL);
+ strncpy((char *)mcu_ui_info->ctrl_ui_data.ctrl_menu_info.menu[i],
+ &mc_ret_data[38 +(i *MAX_CTRL_UI_STRING_LEN)], MAX_CTRL_UI_STRING_LEN);
+
+#ifdef AR0521_DEBUG
+ pr_info(" Menu Element %d : %s \n",
+ i, mcu_ui_info->ctrl_ui_data.ctrl_menu_info.menu[i]);
+#endif
+
+ }
+
+ mcu_ui_info->ctrl_ui_data.ctrl_menu_info.menu[i] = NULL;
+ }
+
+ exit:
+ /* unlock semaphore */
+ mutex_unlock(&mcu_i2c_mutex);
+
+ return ret;
+
+}
+
+static int mcu_isp_configuration(uint8_t cmd_id,struct i2c_client *client)
+{
+ unsigned char mc_data[100];
+ uint32_t payload_len = 0;
+
+ uint16_t payload_data;
+ uint16_t cmd_status = 0;
+ uint8_t retcode = 0;
+ int retry = 1000, err = 0;
+
+ /*lock semaphore */
+ mutex_lock(&mcu_i2c_mutex);
+ /* First Txn Payload length = 0 */
+ payload_len = 2;
+
+ mc_data[0] = CMD_SIGNATURE;
+ mc_data[1] = cmd_id;
+ mc_data[2] = payload_len >> 8;
+ mc_data[3] = payload_len & 0xFF;
+ mc_data[4] = errorcheck(&mc_data[2], 2);
+
+ ar0521_write(client, mc_data, TX_LEN_PKT);
+
+ mc_data[0] = CMD_SIGNATURE;
+ mc_data[1] = cmd_id;
+
+ switch(cmd_id) {
+ case CMD_ID_LANE_CONFIG:
+ /*Lane configuration */
+ payload_data = ar0521_data.mipi_lane_config == 4 ? NUM_LANES_4: NUM_LANES_2;
+ mc_data[2] = payload_data >> 8;
+ mc_data[3] = payload_data & 0xFF;
+ break;
+ case CMD_ID_MIPI_CLK_CONFIG:
+ /* MIPI CLK Configuration */
+ payload_data = ar0521_data.mipi_clk_config;
+ mc_data[2] = payload_data >> 8;
+ mc_data[3] = payload_data & 0xFF;
+ break;
+ default:
+ dev_err(&client->dev, "MCU ISP CONF Error\n");
+ err = -1;
+ goto exit;
+ }
+
+ /* CRC*/
+ mc_data[4] = errorcheck(&mc_data[2], payload_len);
+ err = ar0521_write(client, mc_data, payload_len+3);
+ if (err != 0) {
+ dev_err(&client->dev, " %s(%d) Error - %d \n",
+ __func__, __LINE__, err);
+ goto exit;
+ }
+
+
+ while (--retry > 0) {
+ msleep(20);
+ if (mcu_get_cmd_status(client, &cmd_id, &cmd_status, &retcode) <
+ 0) {
+ dev_err(&client->dev, " %s(%d) Error \n",
+ __func__, __LINE__);
+ err = -EIO;
+ goto exit;
+ }
+
+ if ((cmd_status == MCU_CMD_STATUS_ISP_UNINIT) &&
+ ((retcode == ERRCODE_SUCCESS) || retcode == ERRCODE_ALREADY)) {
+ err = 0;
+ goto exit;
+ }
+
+ if ((retcode != ERRCODE_BUSY) &&
+ ((cmd_status != MCU_CMD_STATUS_ISP_UNINIT))) {
+ dev_err(&client->dev,
+ "(%s) %d Error STATUS = 0x%04x RET = 0x%02x\n",
+ __func__, __LINE__, cmd_status, retcode);
+ err = -EIO;
+ goto exit;
+ }
+
+ }
+
+ err = -ETIMEDOUT;
+ exit:
+ /* unlock semaphore */
+ mutex_unlock(&mcu_i2c_mutex);
+ return err;
+}
+
+static int mcu_stream_config(struct i2c_client *client, uint32_t format,
+ int mode, int frate_index)
+{
+ uint32_t payload_len = 0;
+
+ uint16_t cmd_status = 0, index = 0xFFFF;
+ uint8_t retcode = 0, cmd_id = 0;
+ int loop = 0, ret = 0, err = 0, retry = 1000;
+ static uint16_t prev_index = 0xFFFE;
+
+ /* lock semaphore */
+ mutex_lock(&mcu_i2c_mutex);
+
+ cmd_id = CMD_ID_STREAM_CONFIG;
+ if (mcu_get_cmd_status(client, &cmd_id, &cmd_status, &retcode) < 0) {
+ dev_err(&client->dev," %s(%d) Error \n", __func__, __LINE__);
+ ret = -EIO;
+ goto exit;
+ }
+
+ if ((cmd_status != MCU_CMD_STATUS_SUCCESS) ||
+ (retcode != ERRCODE_SUCCESS)) {
+ dev_err(&client->dev,
+ " ISP is Unintialized or Busy STATUS = 0x%04x Errcode = 0x%02x !! \n",
+ cmd_status, retcode);
+ ret = -EBUSY;
+ goto exit;
+ }
+
+ for (loop = 0;(&streamdb[loop]) != NULL; loop++) {
+ pr_info("streamdb[%d]=%d, mode=%d",loop,streamdb[loop],mode);
+ if (streamdb[loop] == mode) {
+ index = loop + frate_index;
+ break;
+ }
+ }
+
+#ifdef AR0521_DEBUG
+ pr_info(" Index = 0x%04x , format = 0x%08x, width = %hu,"
+ " height = %hu, frate num = %hu \n", index, format,
+ ar0521_data.mcu_cam_frmfmt[mode].size.width,
+ ar0521_data.mcu_cam_frmfmt[mode].size.height,
+ ar0521_data.mcu_cam_frmfmt[mode].framerates[frate_index]);
+#endif
+
+ if (index == 0xFFFF) {
+ ret = -EINVAL;
+ goto exit;
+ }
+
+ if(prev_index == index) {
+#ifdef AR0521_DEBUG
+ pr_info("Skipping Previous mode set ... \n");
+#endif
+ ret = 0;
+ goto exit;
+ }
+
+issue_cmd:
+ /* First Txn Payload length = 0 */
+ payload_len = 14;
+
+ mc_data[0] = CMD_SIGNATURE;
+ mc_data[1] = CMD_ID_STREAM_CONFIG;
+ mc_data[2] = payload_len >> 8;
+ mc_data[3] = payload_len & 0xFF;
+ mc_data[4] = errorcheck(&mc_data[2], 2);
+
+ ar0521_write(client, mc_data, TX_LEN_PKT);
+
+ mc_data[0] = CMD_SIGNATURE;
+ mc_data[1] = CMD_ID_STREAM_CONFIG;
+ mc_data[2] = index >> 8;
+ mc_data[3] = index & 0xFF;
+
+ /* Format Fourcc - currently only YUYV */
+ mc_data[4] = format >> 24;
+ mc_data[5] = format >> 16;
+ mc_data[6] = format >> 8;
+ mc_data[7] = format & 0xFF;
+
+ /* width */
+ mc_data[8] = ar0521_data.mcu_cam_frmfmt[mode].size.width >> 8;
+ mc_data[9] = ar0521_data.mcu_cam_frmfmt[mode].size.width & 0xFF;
+
+ /* height */
+ mc_data[10] = ar0521_data.mcu_cam_frmfmt[mode].size.height >> 8;
+ mc_data[11] = ar0521_data.mcu_cam_frmfmt[mode].size.height & 0xFF;
+
+ /* frame rate num */
+ mc_data[12] = ar0521_data.mcu_cam_frmfmt[mode].framerates[frate_index] >> 8;
+ mc_data[13] = ar0521_data.mcu_cam_frmfmt[mode].framerates[frate_index] & 0xFF;
+
+ /* frame rate denom */
+ mc_data[14] = 0x00;
+ mc_data[15] = 0x01;
+
+ mc_data[16] = errorcheck(&mc_data[2], 14);
+ err = ar0521_write(client, mc_data, 17);
+ if (err != 0) {
+ dev_err(&client->dev," %s(%d) Error - %d \n", __func__,
+ __LINE__, err);
+ ret = -EIO;
+ goto exit;
+ }
+
+ while (--retry > 0) {
+ cmd_id = CMD_ID_STREAM_CONFIG;
+ if (mcu_get_cmd_status(
+ client, &cmd_id, &cmd_status, &retcode) < 0) {
+ dev_err(&client->dev,
+ " %s(%d) MCU GET CMD Status Error : loop : %d \n",
+ __func__, __LINE__, loop);
+ ret = -EIO;
+ goto exit;
+ }
+
+ if ((cmd_status == MCU_CMD_STATUS_SUCCESS) &&
+ (retcode == ERRCODE_SUCCESS)) {
+ ret = 0;
+ goto exit;
+ }
+
+ if(retcode == ERRCODE_AGAIN) {
+ /* Issue Command Again if Set */
+ retry = 1000;
+ goto issue_cmd;
+ }
+
+ if ((retcode != ERRCODE_BUSY) &&
+ ((cmd_status != MCU_CMD_STATUS_PENDING))) {
+ dev_err(&client->dev,
+ "(%s) %d Error STATUS = 0x%04x RET = 0x%02x\n",
+ __func__, __LINE__, cmd_status, retcode);
+ ret = -EIO;
+ goto exit;
+ }
+
+ /* Delay after retry */
+ mdelay(10);
+ }
+
+ dev_err(&client->dev," %s(%d) Error - %d \n", __func__,
+ __LINE__, err);
+ ret = -ETIMEDOUT;
+
+exit:
+ if(!ret)
+ prev_index = index;
+
+ /* unlock semaphore */
+ mutex_unlock(&mcu_i2c_mutex);
+
+ return ret;
+}
+
+static int mcu_isp_power_down(struct i2c_client *client)
+{
+ uint32_t payload_len = 0;
+
+ uint16_t cmd_status = 0;
+ uint8_t retcode = 0, cmd_id = 0;
+ int retry = 1000, err = 0;
+
+ /*lock semaphore */
+ mutex_lock(&mcu_i2c_mutex);
+
+ /* First Txn Payload length = 0 */
+ payload_len = 0;
+
+ mc_data[0] = CMD_SIGNATURE;
+ mc_data[1] = CMD_ID_ISP_PDOWN;
+ mc_data[2] = payload_len >> 8;
+ mc_data[3] = payload_len & 0xFF;
+ mc_data[4] = errorcheck(&mc_data[2], 2);
+
+ ar0521_write(client, mc_data, TX_LEN_PKT);
+
+ mc_data[0] = CMD_SIGNATURE;
+ mc_data[1] = CMD_ID_ISP_PDOWN;
+ err = ar0521_write(client, mc_data, 2);
+ if (err != 0) {
+ dev_err(&client->dev, " %s(%d) Error - %d \n",
+ __func__, __LINE__, err);
+ goto exit;
+ }
+
+ while (--retry > 0) {
+ msleep(20);
+ cmd_id = CMD_ID_ISP_PDOWN;
+ if (mcu_get_cmd_status(client, &cmd_id, &cmd_status, &retcode) <
+ 0) {
+ dev_err(&client->dev, " %s(%d) Get Status Error \n",
+ __func__, __LINE__);
+ err = -EINVAL;
+ goto exit;
+ }
+
+ if ((cmd_status == MCU_CMD_STATUS_ISP_PWDN) &&
+ ((retcode == ERRCODE_SUCCESS) || retcode == ERRCODE_ALREADY)) {
+ err = 0;
+ goto exit;
+ }
+
+ if ((retcode != ERRCODE_BUSY) &&
+ ((cmd_status != MCU_CMD_STATUS_PENDING))) {
+ dev_err(&client->dev,
+ "(%s) %d Error STATUS = 0x%04x RET = 0x%02x\n",
+ __func__, __LINE__, cmd_status,
+ retcode);
+ err = -EIO;
+ goto exit;
+ }
+
+ }
+ err = -ETIMEDOUT;
+ exit:
+ /* unlock semaphore */
+ mutex_unlock(&mcu_i2c_mutex);
+ return err;
+}
+
+static int mcu_isp_power_wakeup(struct i2c_client *client)
+{
+ uint32_t payload_len = 0;
+
+ uint16_t cmd_status = 0;
+ uint8_t retcode = 0, cmd_id = 0;
+ int retry = 1000, err = 0;
+
+ /*lock semaphore */
+ mutex_lock(&mcu_i2c_mutex);
+ /* First Txn Payload length = 0 */
+ payload_len = 0;
+
+ mc_data[0] = CMD_SIGNATURE;
+ mc_data[1] = CMD_ID_ISP_PUP;
+ mc_data[2] = payload_len >> 8;
+ mc_data[3] = payload_len & 0xFF;
+ mc_data[4] = errorcheck(&mc_data[2], 2);
+
+ ar0521_write(client, mc_data, TX_LEN_PKT);
+
+ mc_data[0] = CMD_SIGNATURE;
+ mc_data[1] = CMD_ID_ISP_PUP;
+ err = ar0521_write(client, mc_data, 2);
+ if (err != 0) {
+ dev_err(&client->dev, " %s(%d) Error - %d \n",
+ __func__, __LINE__, err);
+ goto exit;
+ }
+
+ while (--retry > 0) {
+ msleep(20);
+ cmd_id = CMD_ID_ISP_PUP;
+ if (mcu_get_cmd_status(client, &cmd_id, &cmd_status, &retcode) <
+ 0) {
+ dev_err(&client->dev, " %s(%d) Error \n",
+ __func__, __LINE__);
+ err = -EIO;
+ goto exit;
+ }
+
+ if ((cmd_status == MCU_CMD_STATUS_SUCCESS) &&
+ ((retcode == ERRCODE_SUCCESS) || retcode == ERRCODE_ALREADY)) {
+ err = 0;
+ goto exit;
+ }
+
+ if ((retcode != ERRCODE_BUSY) &&
+ ((cmd_status != MCU_CMD_STATUS_PENDING))) {
+ dev_err(&client->dev,
+ "(%s) %d Error STATUS = 0x%04x RET = 0x%02x\n",
+ __func__, __LINE__, cmd_status, retcode);
+ err = -EIO;
+ goto exit;
+ }
+
+ }
+
+ err = -ETIMEDOUT;
+ exit:
+ /* unlock semaphore */
+ mutex_unlock(&mcu_i2c_mutex);
+ return err;
+}
+
+static int mcu_set_ctrl(struct i2c_client *client, uint32_t arg_ctrl_id,
+ uint8_t ctrl_type, int32_t curr_val)
+{
+ uint32_t payload_len = 0;
+
+ uint16_t cmd_status = 0, index = 0xFFFF;
+ uint8_t retcode = 0, cmd_id = 0;
+ int loop = 0, ret = 0, err = 0;
+ uint32_t ctrl_id = 0;
+
+ /* lock semaphore */
+ mutex_lock(&mcu_i2c_mutex);
+
+ ctrl_id = arg_ctrl_id;
+
+ /* call ISP Ctrl config command */
+
+ for (loop = 0; loop < num_ctrls; loop++) {
+ if (ctrldb[loop] == ctrl_id) {
+ index = mcu_ctrl_info[loop].mcu_ctrl_index;
+ break;
+ }
+ }
+
+ if (index == 0xFFFF) {
+ ret = -EINVAL;
+ goto exit;
+ }
+
+ /* First Txn Payload length = 0 */
+ payload_len = 11;
+
+ mc_data[0] = CMD_SIGNATURE;
+ mc_data[1] = CMD_ID_SET_CTRL;
+ mc_data[2] = payload_len >> 8;
+ mc_data[3] = payload_len & 0xFF;
+ mc_data[4] = errorcheck(&mc_data[2], 2);
+
+ ar0521_write(client, mc_data, TX_LEN_PKT);
+
+ /* Second Txn */
+ mc_data[0] = CMD_SIGNATURE;
+ mc_data[1] = CMD_ID_SET_CTRL;
+
+ /* Index */
+ mc_data[2] = index >> 8;
+ mc_data[3] = index & 0xFF;
+
+ /* Control ID */
+ mc_data[4] = ctrl_id >> 24;
+ mc_data[5] = ctrl_id >> 16;
+ mc_data[6] = ctrl_id >> 8;
+ mc_data[7] = ctrl_id & 0xFF;
+
+ /* Ctrl Type */
+ mc_data[8] = ctrl_type;
+
+ /* Ctrl Value */
+ mc_data[9] = curr_val >> 24;
+ mc_data[10] = curr_val >> 16;
+ mc_data[11] = curr_val >> 8;
+ mc_data[12] = curr_val & 0xFF;
+
+ /* CRC */
+ mc_data[13] = errorcheck(&mc_data[2], 11);
+
+ err = ar0521_write(client, mc_data, 14);
+ if (err != 0) {
+ dev_err(&client->dev," %s(%d) Error - %d \n", __func__,
+ __LINE__, err);
+ ret = -EIO;
+ goto exit;
+ }
+
+ while (1) {
+ cmd_id = CMD_ID_SET_CTRL;
+ if (mcu_get_cmd_status(
+ client, &cmd_id, &cmd_status, &retcode) < 0) {
+ dev_err(&client->dev," %s(%d) Error \n",
+ __func__, __LINE__);
+ ret = -EINVAL;
+ goto exit;
+ }
+
+ if ((cmd_status == MCU_CMD_STATUS_SUCCESS) &&
+ (retcode == ERRCODE_SUCCESS)) {
+ ret = 0;
+ goto exit;
+ }
+
+ if ((retcode != ERRCODE_BUSY) &&
+ ((cmd_status != MCU_CMD_STATUS_PENDING))) {
+ dev_err(&client->dev,
+ "(%s) %d ISP Error STATUS = 0x%04x RET = 0x%02x\n",
+ __func__, __LINE__, cmd_status, retcode);
+ ret = -EIO;
+ goto exit;
+ }
+ }
+
+ exit:
+ /* unlock semaphore */
+ mutex_unlock(&mcu_i2c_mutex);
+
+ return ret;
+}
+
+static int mcu_get_ctrl(struct i2c_client *client, uint32_t arg_ctrl_id,
+ uint8_t * ctrl_type, int32_t * curr_val)
+{
+ uint32_t payload_len = 0;
+ uint8_t errcode = ERRCODE_SUCCESS, orig_crc = 0, calc_crc = 0;
+ uint16_t index = 0xFFFF;
+ int loop = 0, ret = 0, err = 0;
+
+ uint32_t ctrl_id = 0;
+
+ /* lock semaphore */
+ mutex_lock(&mcu_i2c_mutex);
+
+ ctrl_id = arg_ctrl_id;
+
+ /* Read the Ctrl Value from Micro controller */
+
+ for (loop = 0; loop < num_ctrls; loop++) {
+ if (ctrldb[loop] == ctrl_id) {
+ index = mcu_ctrl_info[loop].mcu_ctrl_index;
+ break;
+ }
+ }
+
+ if (index == 0xFFFF) {
+ ret = -EINVAL;
+ goto exit;
+ }
+
+ if (
+ mcu_ctrl_info[loop].ctrl_ui_data.ctrl_ui_info.ctrl_ui_flags &
+ V4L2_CTRL_FLAG_WRITE_ONLY
+ ) {
+ ret = -EACCES;
+ goto exit;
+ }
+
+ /* First Txn Payload length = 2 */
+ payload_len = 2;
+
+ mc_data[0] = CMD_SIGNATURE;
+ mc_data[1] = CMD_ID_GET_CTRL;
+ mc_data[2] = payload_len >> 8;
+ mc_data[3] = payload_len & 0xFF;
+ mc_data[4] = errorcheck(&mc_data[2], 2);
+
+ ar0521_write(client, mc_data, TX_LEN_PKT);
+
+ mc_data[0] = CMD_SIGNATURE;
+ mc_data[1] = CMD_ID_GET_CTRL;
+ mc_data[2] = index >> 8;
+ mc_data[3] = index & 0xFF;
+ mc_data[4] = errorcheck(&mc_data[2], 2);
+ err = ar0521_write(client, mc_data, 5);
+ if (err != 0) {
+ dev_err(&client->dev," %s(%d) Error - %d \n", __func__,
+ __LINE__, err);
+ ret = -EIO;
+ goto exit;
+ }
+
+ err = ar0521_read(client, mc_ret_data, RX_LEN_PKT);
+ if (err != 0) {
+ dev_err(&client->dev," %s(%d) Error - %d \n", __func__,
+ __LINE__, err);
+ ret = -EIO;
+ goto exit;
+ }
+
+ /* Verify CRC */
+ orig_crc = mc_ret_data[4];
+ calc_crc = errorcheck(&mc_ret_data[2], 2);
+ if (orig_crc != calc_crc) {
+ dev_err(&client->dev," %s(%d) CRC 0x%02x != 0x%02x \n",
+ __func__, __LINE__, orig_crc, calc_crc);
+ ret = -1;
+ goto exit;
+ }
+
+ if (((mc_ret_data[2] << 8) | mc_ret_data[3]) == 0) {
+ ret = -EIO;
+ goto exit;
+ }
+
+ errcode = mc_ret_data[5];
+ if (errcode != ERRCODE_SUCCESS) {
+ dev_err(&client->dev," %s(%d) Errcode - 0x%02x \n",
+ __func__, __LINE__, errcode);
+ ret = -EIO;
+ goto exit;
+ }
+
+ payload_len =
+ ((mc_ret_data[2] << 8) | mc_ret_data[3]) + HEADER_FOOTER_SIZE;
+ memset(mc_ret_data, 0x00, payload_len);
+ err = ar0521_read(client, mc_ret_data, payload_len);
+ if (err != 0) {
+ dev_err(&client->dev," %s(%d) Error - %d \n", __func__,
+ __LINE__, err);
+ ret = -EIO;
+ goto exit;
+ }
+
+ /* Verify CRC */
+ orig_crc = mc_ret_data[payload_len - 2];
+ calc_crc =
+ errorcheck(&mc_ret_data[2], payload_len - HEADER_FOOTER_SIZE);
+ if (orig_crc != calc_crc) {
+ dev_err(&client->dev," %s(%d) CRC 0x%02x != 0x%02x \n",
+ __func__, __LINE__, orig_crc, calc_crc);
+ ret = -EINVAL;
+ goto exit;
+ }
+
+ /* Verify Errcode */
+ errcode = mc_ret_data[payload_len - 1];
+ if (errcode != ERRCODE_SUCCESS) {
+ dev_err(&client->dev," %s(%d) Errcode - 0x%02x \n",
+ __func__, __LINE__, errcode);
+ ret = -EINVAL;
+ goto exit;
+ }
+
+ /* Ctrl type starts from index 6 */
+
+ *ctrl_type = mc_ret_data[6];
+
+ switch (*ctrl_type) {
+ case CTRL_STANDARD:
+ *curr_val =
+ mc_ret_data[7] << 24 | mc_ret_data[8] << 16 | mc_ret_data[9]
+ << 8 | mc_ret_data[10];
+ break;
+
+ case CTRL_EXTENDED:
+ /* Not Implemented */
+ break;
+ }
+
+ exit:
+ /* unlock semaphore */
+ mutex_unlock(&mcu_i2c_mutex);
+
+ return ret;
+}
+
+/*
+ * ---------------------------------------------------------
+ * END of MCU realed functions
+ * ---------------------------------------------------------
+ */
+
+static void toggle_gpio(unsigned int gpio, int val)
+{
+ if (gpio_cansleep(gpio)){
+ gpio_direction_output(gpio,val);
+ gpio_set_value_cansleep(gpio, val);
+ } else{
+ gpio_direction_output(gpio,val);
+ gpio_set_value(gpio, val);
+ }
+}
+
+static int ar0521_querymenu(struct v4l2_subdev *sd, struct v4l2_querymenu *qm)
+{
+ uint32_t index = 0;
+ int loop;
+
+ if (sd == NULL || qm == NULL)
+ return -EINVAL;
+
+ for (loop = 0; loop < num_ctrls; loop++) {
+ if (ctrldb[loop] == qm->id) {
+ index = loop;
+ break;
+ }
+ }
+
+ if (loop == num_ctrls) {
+ return -EINVAL;
+ }
+
+ if (
+ !(
+ 0 <= qm->index &&
+ qm->index < mcu_ctrl_info[index].ctrl_ui_data.ctrl_menu_info.num_menu_elem
+ )
+ ) {
+ return -EINVAL;
+ }
+
+ /*
+ * Copy the name of the menu.
+ *
+ * We deal only with V4L2_CTRL_TYPE_MENU and not
+ * V4L2_CTRL_TYPE_INTEGER_MENU. So, this should be
+ * enough.
+ */
+ strcpy(qm->name, mcu_ctrl_info[index].ctrl_ui_data.ctrl_menu_info.menu[qm->index]);
+
+ /*
+ * Set the reserved to zero as mentioned in spec
+ */
+ qm->reserved = 0;
+
+ return 0;
+}
+
+static int ar0521_queryctrl(struct v4l2_subdev *sd, struct v4l2_queryctrl *qc)
+{
+ int index, ctrl_index = -1, ctrl_id;
+ bool next_ctrl = (qc->id & V4L2_CTRL_FLAG_NEXT_CTRL);
+
+ if (sd == NULL || qc == NULL)
+ return -EINVAL;
+
+ if (next_ctrl) {
+ ctrl_id = qc->id & (~V4L2_CTRL_FLAG_NEXT_CTRL);
+
+ /*
+ * Ignore the V4L2_CTRL_FLAG_NEXT_COMPOUND for now
+ */
+ ctrl_id = ctrl_id & (~V4L2_CTRL_FLAG_NEXT_COMPOUND);
+ }
+ else {
+ /*
+ * Assume we've just got the control ID itself
+ * directly.
+ */
+ ctrl_id = qc->id;
+ }
+
+ if (ctrl_id) {
+ for (index = 0; index < num_ctrls; index++) {
+ if (ctrldb[index] == ctrl_id) {
+ ctrl_index = (next_ctrl) ? index + 1 : index;
+ break;
+ }
+ }
+
+ if (index == num_ctrls) {
+ /*
+ * We do not know about this control
+ */
+ return -EINVAL;
+ }
+ else if (
+ next_ctrl &&
+ index == num_ctrls - 1
+ )
+ {
+ /*
+ * We've got a request for the control
+ * after the last one.
+ */
+ return -EINVAL;
+ }
+ }
+ else if (next_ctrl) {
+ ctrl_index = 0;
+ }
+ else {
+ return -EINVAL;
+ }
+
+ if (
+ mcu_ctrl_info[ctrl_index].ctrl_type == CTRL_STANDARD
+ ) {
+ /*
+ * We cannot use `v4l2_ctrl_query_fill` instead of manually filling
+ * the details even for standard controls as we sometimes implement our
+ * own version for some controls.
+ *
+ * e.g., V4L2_CID_FOCUS_AUTO has a max value of 1 according to standard
+ * but our version of it has a max value of 5.
+ */
+ qc->id = mcu_ctrl_info[ctrl_index].ctrl_id;
+
+ strcpy(qc->name, mcu_ctrl_info[ctrl_index].ctrl_ui_data.ctrl_ui_info.ctrl_name);
+
+ qc->type = mcu_ctrl_info[ctrl_index].ctrl_ui_data.ctrl_ui_info.ctrl_ui_type;
+ qc->flags = mcu_ctrl_info[ctrl_index].ctrl_ui_data.ctrl_ui_info.ctrl_ui_flags;
+
+ qc->minimum = mcu_ctrl_info[ctrl_index].ctrl_data.std.ctrl_min;
+ qc->maximum = mcu_ctrl_info[ctrl_index].ctrl_data.std.ctrl_max;
+ qc->step = mcu_ctrl_info[ctrl_index].ctrl_data.std.ctrl_step;
+ qc->default_value = mcu_ctrl_info[ctrl_index].ctrl_data.std.ctrl_def;
+ }
+ else {
+ return -EINVAL;
+ }
+
+ return 0;
+}
+
+static int ar0521_g_ctrl(struct v4l2_subdev *sd, struct v4l2_control *ctrl)
+{
+ struct i2c_client *client = ar0521_data.i2c_client;
+ int err = 0;
+ uint8_t ctrl_type = 0;
+ int ctrl_val = 0;
+
+ if (sd == NULL || ctrl == NULL)
+ return -EINVAL;
+
+ if ((err = mcu_get_ctrl(client, ctrl->id, &ctrl_type, &ctrl_val)) < 0) {
+ return err;
+ }
+
+ if (ctrl_type == CTRL_STANDARD) {
+ ctrl->value = ctrl_val;
+ } else {
+ /* Not Implemented */
+ return -EINVAL;
+ }
+
+ return err;
+}
+
+static int ar0521_s_ctrl(struct v4l2_subdev *sd, struct v4l2_control *ctrl)
+{
+ struct i2c_client *client = ar0521_data.i2c_client;
+ int err = 0, index, ctrl_index = 0;
+
+ if (sd == NULL || ctrl == NULL)
+ return -EINVAL;
+
+ for (index = 0; index < num_ctrls; index++) {
+ if (ctrldb[index] == ctrl->id) {
+ ctrl_index = index;
+ break;
+ }
+ }
+
+ if (index == num_ctrls) {
+ return -EINVAL;
+ }
+
+ if (
+ ctrl->value < mcu_ctrl_info[ctrl_index].ctrl_data.std.ctrl_min ||
+ ctrl->value > mcu_ctrl_info[ctrl_index].ctrl_data.std.ctrl_max
+ )
+ return -ERANGE;
+
+ if ((err =
+ mcu_set_ctrl(client, ctrl->id, CTRL_STANDARD, ctrl->value)) < 0) {
+ dev_err(&client->dev," %s (%d ) \n", __func__, __LINE__);
+ return -EINVAL;
+ }
+
+ return err;
+}
+
+static int ar0521_g_ext_ctrls(struct v4l2_subdev *sd, struct v4l2_ext_controls *ctrls)
+{
+ int i, err = 0;
+
+ if (sd == NULL || ctrls == NULL)
+ return -EINVAL;
+
+ for (i = 0; i < ctrls->count; i++) {
+ struct v4l2_ext_control *ext_ctrl = ctrls->controls + i;
+ struct v4l2_control ctrl = {
+ .id = ext_ctrl->id,
+ };
+
+ err = ar0521_g_ctrl(sd, &ctrl);
+ if (err) {
+ ctrls->error_idx = ctrls->count;
+ break;
+ }
+ else {
+ ext_ctrl->value = ctrl.value;
+ }
+ }
+
+ return err;
+}
+
+static int ar0521_try_ext_ctrls(struct v4l2_subdev *sd, struct v4l2_ext_controls *ctrls)
+{
+ int i;
+
+ if (sd == NULL || ctrls == NULL)
+ return -EINVAL;
+
+ for (i = 0; i < ctrls->count; i++) {
+ struct v4l2_ext_control *ext_ctrl = ctrls->controls + i;
+ int ctrl_index = 0, index;
+
+ for (index = 0; index < num_ctrls; index++) {
+ if (ctrldb[index] == ext_ctrl->id) {
+ ctrl_index = index;
+ break;
+ }
+ }
+
+ if (index == num_ctrls) {
+ ctrls->error_idx = ext_ctrl->id;
+ return -EINVAL;
+ }
+
+ if (
+ ext_ctrl->value < mcu_ctrl_info[ctrl_index].ctrl_data.std.ctrl_min ||
+ ext_ctrl->value > mcu_ctrl_info[ctrl_index].ctrl_data.std.ctrl_max
+ ) {
+ ctrls->error_idx = ext_ctrl->id;
+ return -ERANGE;
+ }
+ }
+
+ return 0;
+
+}
+
+static int ar0521_s_ext_ctrls(struct v4l2_subdev *sd, struct v4l2_ext_controls *ctrls)
+{
+ int i, err = 0;
+
+ if (sd == NULL || ctrls == NULL)
+ return -EINVAL;
+
+ for (i = 0; i < ctrls->count; i++) {
+ struct v4l2_ext_control *ext_ctrl = ctrls->controls + i;
+ struct v4l2_control ctrl = {
+ .id = ext_ctrl->id,
+ .value = ext_ctrl->value
+ };
+
+ err = ar0521_s_ctrl(sd, &ctrl);
+ if (err) {
+ /*
+ * TODO: We would have to indicate whether there
+ * is an issue in validation or in the
+ * hardware by correctly setting the error_idx
+ * to count only when the validation failed
+ * and setting it to index when there is an
+ * issue in communication with the hardware.
+ *
+ * For now, just return the count for all cases.
+ */
+ ctrls->error_idx = ctrls->count;
+ break;
+ }
+ }
+
+ return err;
+}
+
+static int ar0521_enum_frameintervals(struct v4l2_subdev *sd,struct v4l2_subdev_pad_config *cfg,struct v4l2_subdev_frame_interval_enum *fival)
+{
+ struct i2c_client *client = v4l2_get_subdevdata(sd);
+ int j;
+
+ if (fival->width == 0 || fival->height == 0)
+ {
+ dev_err(&client->dev, "Please assign width and height.\n");
+ return -EINVAL;
+ }
+
+ if (fival->code != ar0521_data.fmt.code)
+ {
+ return -EINVAL;
+ }
+
+ for (j = 0; j < ar0521_data.num_frm_fmts; j++) {
+ if (
+ fival->width == ar0521_data.mcu_cam_frmfmt[j].size.width &&
+ fival->height == ar0521_data.mcu_cam_frmfmt[j].size.height
+ ) {
+ if (fival->index >= ar0521_data.mcu_cam_frmfmt[j].num_framerates)
+ {
+ return -EINVAL;
+ }
+
+ fival->interval.numerator = 1;
+ fival->interval.denominator = ar0521_data.mcu_cam_frmfmt[j].framerates[fival->index];
+
+ return 0;
+ }
+ }
+ return -EINVAL;
+
+}
+
+static int ar0521_enum_framesizes(struct v4l2_subdev *sd,struct v4l2_subdev_pad_config *cfg,struct v4l2_subdev_frame_size_enum *fse)
+{
+ if (fse->index >= ar0521_data.num_frm_fmts)
+ {
+ return -EINVAL;
+ }
+
+ if (fse->code != ar0521_data.fmt.code)
+ {
+ return -EINVAL;
+ }
+
+ fse->max_width = ar0521_data.mcu_cam_frmfmt[fse->index].size.width;
+ fse->min_width = fse->max_width;
+
+ fse->max_height = ar0521_data.mcu_cam_frmfmt[fse->index].size.height;
+ fse->min_height = fse->max_height;
+
+ return 0;
+}
+
+static int ar0521_enum_mbus_code(struct v4l2_subdev *sd,struct v4l2_subdev_pad_config *cfg,struct v4l2_subdev_mbus_code_enum *code)
+{
+ if (code->pad || code->index >= AR0521_MAX_FORMAT_SUPPORTED)
+ return -EINVAL;
+
+ code->code = ar0521_data.fmt.code;
+
+ return 0;
+}
+
+static int ar0521_s_stream(struct v4l2_subdev *sd, int enable)
+{
+ if (!enable) {
+ /* Perform Stream Off Sequence - if any */
+ }
+
+ /* Perform Stream On Sequence - if any */
+ mdelay(10);
+
+ return 0;
+}
+
+static int ar0521_g_parm(struct v4l2_subdev *sd, struct v4l2_streamparm *param)
+{
+ int mode = ar0521_data.streamcap.capturemode;
+
+ param->parm.capture.capability |= V4L2_CAP_TIMEPERFRAME;
+
+ param->parm.capture.timeperframe.denominator =
+ ar0521_data.mcu_cam_frmfmt[mode].framerates[ar0521_data.frate_index];
+ param->parm.capture.timeperframe.numerator = 1;
+
+ return 0;
+}
+
+static int ar0521_s_parm(struct v4l2_subdev *sd, struct v4l2_streamparm *param)
+{
+ struct i2c_client *client = v4l2_get_subdevdata(sd);
+ int ret = 0, err = 0;
+ int mode = ar0521_data.streamcap.capturemode;
+ int fourcc = ar0521_data.pix.pixelformat;
+
+ param->parm.capture.capability = V4L2_CAP_TIMEPERFRAME;
+ memset(param->parm.capture.reserved, 0, 4*sizeof(u32));
+
+ if (
+ param->parm.capture.timeperframe.denominator == 0 &&
+ param->parm.capture.timeperframe.numerator == 0 &&
+ ar0521_data.mcu_cam_frmfmt[mode].num_framerates == 1
+ ) {
+ param->parm.capture.timeperframe.denominator =
+ ar0521_data.mcu_cam_frmfmt[mode].framerates[ar0521_data.frate_index];
+ param->parm.capture.timeperframe.numerator = 1;
+ /*
+ * We would have to reset the frame interval to a
+ * nominal value in this case but as we just have one
+ * frame interval we just return success.
+ */
+ return 0;
+ }
+
+ if (param->parm.capture.timeperframe.numerator != 1) {
+ dev_err(&client->dev, "Invalid numerator for timeperframe\n");
+ return -EINVAL;
+ }
+
+ for (ret = 0; ret < ar0521_data.mcu_cam_frmfmt[mode].num_framerates;
+ ret++) {
+ if ((ar0521_data.mcu_cam_frmfmt[mode].framerates[ret] ==
+ param->parm.capture.timeperframe.denominator)) {
+ ar0521_data.frate_index = ret;
+
+ /* call stream config with width, height, frame rate */
+ err =
+ mcu_stream_config(client, fourcc, mode,
+ ar0521_data.frate_index);
+ if (err < 0) {
+ dev_err(&client->dev, "%s: Failed stream_config \n", __func__);
+ return err;
+ }
+
+ mdelay(10);
+
+ return 0;
+ }
+ }
+
+ return -EINVAL;
+}
+
+static int ar0521_s_power(struct v4l2_subdev *sd, int on)
+{
+
+ /* Perform Power On/Off Sequence - if any */
+ return 0;
+}
+
+static int ar0521_get_fmt(struct v4l2_subdev *sd,struct v4l2_subdev_pad_config *cfg,struct v4l2_subdev_format *format)
+{
+ int ret = 0;
+
+ if (format->pad)
+ return -EINVAL;
+
+ format->format.code = ar0521_data.fmt.code;
+ format->format.colorspace = ar0521_data.fmt.colorspace;
+ format->format.field = V4L2_FIELD_NONE;
+
+ format->format.width = ar0521_data.pix.width;
+ format->format.height = ar0521_data.pix.height;
+
+ return ret;
+}
+
+static int ar0521_set_fmt(struct v4l2_subdev *sd, struct v4l2_subdev_pad_config *cfg,
+ struct v4l2_subdev_format *format)
+{
+ int ret = 0, i;
+ struct i2c_client *client = v4l2_get_subdevdata(sd);
+ int flag = 0, err = 0;
+
+ format->format.code = ar0521_data.fmt.code;
+ format->format.colorspace = ar0521_data.fmt.colorspace;
+ format->format.field = V4L2_FIELD_NONE;
+
+ for (i = 0; i < ar0521_data.num_frm_fmts ; i++) {
+ if (
+ ar0521_data.mcu_cam_frmfmt[i].size.width == format->format.width &&
+ ar0521_data.mcu_cam_frmfmt[i].size.height == format->format.height
+ ) {
+ flag = 1;
+ break;
+ }
+ }
+
+ if(flag == 0) {
+ format->format.width = ar0521_data.pix.width;
+ format->format.height = ar0521_data.pix.height;
+ }
+
+ if (format->which == V4L2_SUBDEV_FORMAT_TRY)
+ {
+ return 0;
+ }
+
+ /* call stream config with width, height, frame rate */
+ err =
+ mcu_stream_config(client, ar0521_data.pix.pixelformat, ar0521_data.mcu_cam_frmfmt[i].mode,
+ ar0521_data.frate_index);
+ if (err < 0) {
+ dev_err(&client->dev, "%s: Failed stream_config \n", __func__);
+ return err;
+ }
+
+ ar0521_data.pix.width = format->format.width;
+ ar0521_data.pix.height = format->format.height;
+ ar0521_data.streamcap.capturemode = ar0521_data.mcu_cam_frmfmt[i].mode;
+
+ mdelay(10);
+
+ return ret;
+}
+
+static int ar0521_link_setup(struct media_entity *entity,
+ const struct media_pad *local,
+ const struct media_pad *remote, u32 flags)
+{
+ return 0;
+}
+
+static struct v4l2_subdev_video_ops ar0521_subdev_video_ops = {
+ .g_parm = ar0521_g_parm,
+ .s_parm = ar0521_s_parm,
+ .s_stream = ar0521_s_stream,
+};
+
+static const struct v4l2_subdev_pad_ops ar0521_subdev_pad_ops = {
+ .enum_frame_size = ar0521_enum_framesizes,
+ .enum_frame_interval = ar0521_enum_frameintervals,
+ .enum_mbus_code = ar0521_enum_mbus_code,
+ .set_fmt = ar0521_set_fmt,
+ .get_fmt = ar0521_get_fmt,
+};
+
+static struct v4l2_subdev_core_ops ar0521_subdev_core_ops = {
+ .s_power = ar0521_s_power,
+ .queryctrl = ar0521_queryctrl,
+ .g_ctrl = ar0521_g_ctrl,
+ .s_ctrl = ar0521_s_ctrl,
+ .g_ext_ctrls = ar0521_g_ext_ctrls,
+ .s_ext_ctrls = ar0521_s_ext_ctrls,
+ .try_ext_ctrls = ar0521_try_ext_ctrls,
+ .querymenu = ar0521_querymenu,
+};
+
+static struct v4l2_subdev_ops ar0521_subdev_ops = {
+ .core = &ar0521_subdev_core_ops,
+ .video = &ar0521_subdev_video_ops,
+ .pad = &ar0521_subdev_pad_ops,
+};
+
+static const struct media_entity_operations ar0521_sd_media_ops = {
+ .link_setup = ar0521_link_setup,
+};
+
+static int ar0521_init(struct i2c_client *client)
+{
+ u32 tgt_xclk; /* target xclk */
+ int ret = 0;
+
+ ar0521_data.on = true;
+
+ /* mclk */
+ tgt_xclk = ar0521_data.mclk;
+ tgt_xclk = min(tgt_xclk, (u32)AR0521_XCLK_MAX);
+ tgt_xclk = max(tgt_xclk, (u32)AR0521_XCLK_MIN);
+ ar0521_data.mclk = tgt_xclk;
+
+#ifdef AR0521_DEBUG
+ pr_info("mclk: %d MHz\n", tgt_xclk / 1000000);
+#endif
+
+ ret = mcu_stream_config(client, ar0521_data.pix.pixelformat,
+ ar0521_data.streamcap.capturemode,
+ ar0521_data.frate_index);
+
+ return ret;
+}
+
+static int ar0521_ctrls_init(ISP_CTRL_INFO *mcu_cam_ctrls)
+{
+ struct i2c_client *client = NULL;
+ int numctrls = 0;
+ int err = 0, i = 0;
+
+ client = ar0521_data.i2c_client;
+
+ if (mcu_cam_ctrls == NULL)
+ {
+ dev_err(
+ &client->dev,
+ "%s: MCU control data hasn't been allocated\n",
+ __func__
+ );
+ return -EINVAL;
+ }
+ /*
+ * Enumerate the controls from the MCU
+ */
+ err = mcu_count_or_list_ctrls(client, mcu_cam_ctrls, &numctrls);
+ if (err < 0) {
+ dev_err(&client->dev, "Unable to enumerate the controls in the sensor\n");
+ return err;
+ }
+
+ for (i = 0; i < numctrls; i++) {
+ if (mcu_cam_ctrls[i].ctrl_type == CTRL_STANDARD) {
+ err = mcu_get_ctrl_ui(client, &mcu_ctrl_info[i], mcu_ctrl_info[i].mcu_ctrl_index);
+ if (err != ERRCODE_SUCCESS) {
+ dev_err(&client->dev, "Error Enumerating Control 0x%08x !! \n",
+ mcu_ctrl_info[i].ctrl_id);
+ return err;
+ }
+ else if (
+ mcu_ctrl_info[i].ctrl_ui_data.ctrl_ui_info.ctrl_ui_type ==
+ V4L2_CTRL_TYPE_MENU
+ ) {
+ mcu_ctrl_info[i].ctrl_data.std.ctrl_step = 1;
+ }
+ }
+ }
+
+ return 0;
+}
+
+static int ar0521_verify_mcu(struct i2c_client *client)
+{
+ int ret = 0, try = 0;
+ unsigned char fw_version[32] = {0};
+
+ if (client == NULL)
+ {
+ dev_err(&client->dev, "%s: Invalid I2C client parameter\n", __func__);
+ return -EINVAL;
+ }
+
+ /*
+ * Try to boot the MCU into firmware mode.
+ *
+ * We do this only when the reset_gpio and pwdn_gpio are
+ * available.
+ */
+ if (gpios_available())
+ {
+ toggle_gpio(pwdn_gpio, 0);
+ msleep(10);
+ toggle_gpio(reset_gpio, 0);
+ msleep(10);
+ toggle_gpio(reset_gpio, 1);
+ msleep(500);
+
+ for(try = 0; try < 10; try++) {
+ ret = mcu_get_fw_version(client, fw_version);
+ if(ret < 0) {
+ msleep(100);
+ continue;
+ } else {
+ break;
+ }
+ }
+
+ if (ret == 0)
+ {
+ ret = mcu_verify_fw_version(fw_version);
+ }
+ else
+ {
+ dev_dbg(
+ &client->dev,
+ "Could not read the firmware version from the MCU\n"
+ );
+ pr_info(" Could not read the firmware version from the MCU, tries=%d\n", try+1);
+ }
+
+ /*
+ * Try booting and flashing in bootloader mode when an error is detected
+ * or the force update bit is set in the firmware version
+ */
+ if (ret != 0) {
+ int loop = 0;
+
+ /*
+ * Verification of the MCU in firmware mode failed so
+ * try to boot the MCU in bootloader mode.
+ */
+
+ pr_info(" Trying to Detect Bootloader mode\n");
+
+ if (gpios_available())
+ {
+ toggle_gpio(reset_gpio, 0);
+ msleep(10);
+ toggle_gpio(pwdn_gpio, 1);
+ msleep(100);
+ toggle_gpio(reset_gpio, 1);
+ msleep(100);
+ }
+
+ for(loop = 0; loop < 10; loop++) {
+ ret = mcu_bload_get_version(client);
+ if (ret < 0) {
+ /* Trial and Error for 1 second (100ms * 10) */
+ msleep(100);
+ continue;
+ } else {
+#ifdef AR0521_DEBUG
+ pr_info(" Get Bload Version Success\n");
+#endif
+ break;
+ }
+ }
+
+ if(loop == 10) {
+ dev_err(&client->dev, "Error getting firmware version in bootloader mode\n");
+ return -EINVAL;
+ }
+
+ if (mcu_fw_update(client, NULL) < 0) {
+ dev_err(&client->dev, "Error when trying to update the firmware\n");
+ return -EFAULT;
+ }
+
+ if (gpios_available())
+ {
+ toggle_gpio(pwdn_gpio, 0);
+ }
+
+ /* Allow FW Updated MCU to reboot */
+ msleep(500);
+
+ /*
+ * Ensure the firmware has been flashed correctly by getting the version
+ * of the firmware (in firmware mode).
+ */
+ for(loop = 0; loop < 100; loop++) {
+ ret = mcu_get_fw_version(client, fw_version);
+
+ if (ret == 0)
+ {
+ ret = mcu_verify_fw_version(fw_version);
+ }
+
+ if (ret < 0) {
+ /* Trial and Error for 10 seconds (100ms * 100) */
+ msleep(100);
+ continue;
+ } else {
+#ifdef AR0521_DEBUG
+ pr_info(" Get FW Version Success\n");
+#endif
+ break;
+ }
+ }
+
+ if(loop == 100) {
+ dev_err(
+ &client->dev,
+ "Couldn't get firmware version correctly after update (did the update fail?\n"
+ );
+ return -EINVAL;
+ }
+ }
+
+ }
+ else
+ {
+ static const char *const flash_error_message =
+ "Please connect only one camera and fix the MCU.\n"
+ "Hint: Connected only one camera? Is someone else using the "
+ "power down/reset GPIOs?\n";
+
+ /*
+ * When we do not have the reset GPIO, we cannot toggle it
+ * to make the MCU switch to firmware mode. So, we try getting
+ * the MCU into firmware assuming it is currently in
+ * bootloader mode.
+ *
+ * The following sequence is required for switching it to
+ * firmware mode.
+ */
+ int loop, get_firmware_version = 0;
+
+ /*
+ * We would have to verify that the MCU is in bootloader mode
+ * before sending the command to make it switch to firmware mode.
+ *
+ * So, we try to get the version of the bootloader.
+ */
+ for(loop = 0; loop < 10; loop++)
+ {
+ ret = mcu_bload_get_version(client);
+ if (ret < 0)
+ {
+ /* Trial and Error for 1 second (100ms * 10) */
+ msleep(100);
+ }
+ else
+ {
+ pr_info(" Get Bload Version Success\n");
+ break;
+ }
+ }
+
+ if(loop == 10)
+ {
+ dev_err(&client->dev, "couldn't get bootloader version\n");
+
+
+ get_firmware_version = 1;
+
+ msleep(1000);
+ }
+ else
+ {
+ /*
+ * We retry if we could boot into firmware mode as we're
+ * currently in bootloader mode (as mcu_bload_get_version
+ * succeeded).
+ */
+ ret = mcu_bload_go(client);
+ if (ret < 0) {
+ dev_err(&client->dev,"couldn't switch to firmware mode.\n");
+ dev_err(&client->dev, flash_error_message);
+ return -EINVAL;
+ }
+ else {
+ msleep(10);
+ get_firmware_version = 1;
+ }
+ }
+
+ /*
+ * We should verify if we have the version of the MCU we
+ * need. If not, we let the user know about it and exit
+ * the probe.
+ */
+ if (get_firmware_version)
+ {
+ ret = mcu_get_fw_version(client, fw_version);
+ if (ret == 0)
+ {
+ ret = mcu_verify_fw_version(fw_version);
+ }
+ else
+ {
+ dev_err(&client->dev, "couldn't get the MCU firmware version");
+ dev_err(&client->dev, flash_error_message);
+ return -EINVAL;
+ }
+
+ if (ret != 0)
+ {
+ dev_err(&client->dev, "wrong MCU firmware version");
+ dev_err(&client->dev, flash_error_message);
+ return -EINVAL;
+ }
+ }
+ }
+
+ dev_info(&client->dev, "Current Firmware Version - (%.32s)\n", fw_version);
+
+ return 0;
+}
+
+static int ar0521_parse_and_get_clocks(struct device *dev)
+{
+ int retval = 0;
+
+ if (dev == NULL)
+ {
+ dev_err(dev, "%s: Invalid device parameter\n", __func__);
+ return -EINVAL;
+ }
+
+ ar0521_data.sensor_clk = devm_clk_get(dev, "csi_mclk");
+ if (IS_ERR(ar0521_data.sensor_clk)) {
+ /* assuming clock enabled by default */
+ ar0521_data.sensor_clk = NULL;
+ dev_err(dev, "clock-frequency missing or invalid\n");
+ return PTR_ERR(ar0521_data.sensor_clk);
+ }
+
+ /*mclk reserved for future use*/
+ retval = of_property_read_u32(dev->of_node, "mclk",
+ &(ar0521_data.mclk));
+ if (retval) {
+ dev_err(dev, "mclk missing or invalid\n");
+ return retval;
+ }
+
+ /*mclk_source reserved for future use*/
+ retval = of_property_read_u32(dev->of_node, "mclk_source",
+ (u32 *) &(ar0521_data.mclk_source));
+ if (retval) {
+ dev_err(dev, "mclk_source missing or invalid\n");
+ return retval;
+ }
+
+ retval = of_property_read_u32(dev->of_node, "csi_id",
+ &(ar0521_data.csi));
+ if (retval) {
+ dev_err(dev, "csi id missing or invalid\n");
+ return retval;
+ }
+
+ return 0;
+}
+
+static int ar0521_parse_and_get_gpios(struct device *dev)
+{
+ int err;
+ struct device_node *node = NULL;
+
+ if (dev == NULL)
+ {
+ dev_err(dev, "%s: Invalid device parameter\n", __func__);
+ return -EINVAL;
+ }
+
+ node = dev->of_node;
+
+ pwdn_gpio = of_get_named_gpio(node, "pwn-gpios", 0);
+ if (!gpio_is_valid(pwdn_gpio)) {
+ dev_err(dev, "no sensor pwdn pin available");
+ return -EINVAL;
+ }
+ else {
+#ifdef AR0521_DEBUG
+ printk("BOOT = %x \n", pwdn_gpio);
+#endif
+ }
+
+ reset_gpio = of_get_named_gpio(node, "rst-gpios", 0);
+ if (!gpio_is_valid(reset_gpio)) {
+ dev_err(dev, "no sensor reset pin available");
+ return -EINVAL;
+ }
+ else {
+#ifdef AR0521_DEBUG
+ printk("RESET = %x \n", reset_gpio);
+#endif
+ }
+
+ err = devm_gpio_request_one(dev, pwdn_gpio, GPIOF_OUT_INIT_HIGH,
+ "ar0521_mipi_pwdn");
+ if (err < 0) {
+ dev_warn(dev, "Failed to set power pin\n");
+ dev_warn(dev, "err = %d\n", err);
+ return err;
+ }
+
+ err = devm_gpio_request_one(dev, reset_gpio, GPIOF_OUT_INIT_HIGH,
+ "ar0521_mipi_reset");
+ if (err < 0) {
+ dev_warn(dev, "Failed to set reset pin\n");
+ dev_warn(dev, "err = %d\n", err);
+ return err;
+ }
+
+ return 0;
+}
+
+/*!
+ * ar0521 I2C probe function
+ *
+ * @param adapter struct i2c_adapter *
+ * @return Error code indicating success or failure
+ */
+static int ar0521_probe(struct i2c_client *client,
+ const struct i2c_device_id *id)
+{
+ struct pinctrl *pinctrl;
+ struct device_node *node = client->dev.of_node;
+ struct device *dev = &client->dev;
+
+ int ret, frm_fmt_size = 0, i;
+ uint16_t sensor_id = 0;
+
+ if (!IS_ENABLED(CONFIG_OF) || !node)
+ return -EINVAL;
+
+ pinctrl = devm_pinctrl_get_select_default(dev);
+ if (IS_ERR(pinctrl))
+ dev_warn(dev, "no pin available\n");
+
+ /* Set initial values for the sensor struct. */
+ memset(&ar0521_data, 0, sizeof(ar0521_data));
+
+ ret = ar0521_parse_and_get_gpios(dev);
+ if (ret)
+ {
+ pr_info("Warning: couldn't get GPIOs\n");
+ }
+
+ ret = ar0521_parse_and_get_clocks(dev);
+ if (ret)
+ {
+ dev_err(dev, "Error occurred when getting clock\n");
+ return ret;
+ }
+
+ clk_prepare_enable(ar0521_data.sensor_clk);
+
+ /*
+ * We usually get and set/enable regulators here. But it doesn't
+ * seem to be needed here as the Variscite EVK seems to be supplying
+ * the required voltage directly without us needing to set it.
+ */
+ toggle_gpio(reset_gpio, 1);
+ msleep(500);
+
+ ret = ar0521_verify_mcu(client);
+ if (ret)
+ {
+ dev_err(dev, "Error occurred when verifying MCU\n");
+ return ret;
+ }
+
+ ar0521_data.mipi_lane_config = 4;
+ ret = mcu_isp_configuration(CMD_ID_LANE_CONFIG, client);
+ if(ret)
+ {
+ dev_err(dev, "Error occurred in configuring mipi lanes\n");
+ return ret;
+ }
+
+ /*
+ * Query the number of controls from MCU
+ */
+ if (mcu_count_or_list_ctrls(client, NULL, &num_ctrls) < 0) {
+ dev_err(dev, "%s, Failed to get number of controls for sensor\n", __func__);
+ return -EFAULT;
+ }
+
+ /*
+ * Query the number for Formats available from MCU
+ */
+ if (mcu_count_or_list_fmts(client, NULL, &frm_fmt_size) < 0) {
+ dev_err(dev, "%s, Failed to get number of formats for sensor\n", __func__);
+ return -EFAULT;
+ }
+
+ /*
+ * Initialise the MCU related data as we're about to use them.
+ */
+ ret = mcu_data_init(dev, frm_fmt_size);
+ if (ret)
+ {
+ dev_err(dev, "%s: failed to initialize MCU related data\n", __func__);
+ return -EFAULT;
+ }
+
+ if (mcu_get_sensor_id(client, &sensor_id) < 0) {
+ dev_err(dev, "Unable to get MCU Sensor ID \n");
+ return -EFAULT;
+ }
+
+ if (mcu_isp_init(client) < 0) {
+ dev_err(dev, "Unable to INIT ISP \n");
+ return -EFAULT;
+ }
+
+ /*
+ * Enumerate the Formats in the sensor
+ */
+ if (mcu_count_or_list_fmts(client, stream_info, &frm_fmt_size) < 0) {
+ dev_err(dev, "Unable to enumerate the formats in the sensor\n");
+ return -EFAULT;
+ }
+
+ /*
+ * Fill some state information as required.
+ */
+ ar0521_data.i2c_client = client;
+
+ ar0521_data.pix.pixelformat = V4L2_PIX_FMT_UYVY;
+ ar0521_data.fmt.code = AR0521_DEFAULT_DATAFMT;
+ ar0521_data.fmt.colorspace = AR0521_DEFAULT_COLORSPACE;
+ ar0521_data.pix.width = AR0521_DEFAULT_WIDTH;
+ ar0521_data.pix.height = AR0521_DEFAULT_HEIGHT;
+ ar0521_data.streamcap.capability = V4L2_MODE_HIGHQUALITY | V4L2_CAP_TIMEPERFRAME;
+ ar0521_data.streamcap.capturemode = AR0521_DEFAULT_MODE;
+ ar0521_data.num_frm_fmts = frm_fmt_size;
+ ar0521_data.power_on = 0;
+
+ /*
+ * Configure the stream with default configuration
+ */
+ ret = ar0521_init(client);
+ if (ret)
+ {
+ dev_err(dev, "Failed to initialise the device with default configuration\n");
+ return ret;
+ }
+
+ v4l2_i2c_subdev_init(&ar0521_data.subdev, client, &ar0521_subdev_ops);
+
+ /*
+ * Initialize Controls by getting details about the controls from the MCU
+ */
+ ret = ar0521_ctrls_init(mcu_ctrl_info);
+ if (ret)
+ {
+ dev_warn(dev, "Failed to initialise the controls. Controls might not work\n");
+ }
+
+ /*
+ * Write default values for all controls
+ */
+ for (i = 0; i < num_ctrls; i++) {
+ if (mcu_ctrl_info[i].ctrl_type == CTRL_STANDARD) {
+ int ret;
+ struct v4l2_control ctrl = {
+ .id = mcu_ctrl_info[i].ctrl_id,
+ .value = mcu_ctrl_info[i].ctrl_data.std.ctrl_def
+ };
+
+ if (
+ mcu_ctrl_info[i].ctrl_id == 0x9a0926
+ )
+ {
+ /*
+ * We know that the MCU would fail when we
+ * try to write the V4L2_CID_ROI_EXPOSURE
+ * control as we are not in the correct auto
+ * exposure mode by default. So, skip it.
+ */
+ continue;
+ }
+
+ ret = ar0521_s_ctrl(&ar0521_data.subdev, &ctrl);
+ if (ret < 0)
+ {
+ dev_err(dev, "Failed to write default value for a control: %d; Control ID: %x\n", i, mcu_ctrl_info[i].ctrl_id);
+ }
+ }
+ }
+
+ ar0521_data.subdev.flags |= V4L2_SUBDEV_FL_HAS_DEVNODE;
+ ar0521_data.subdev.entity.function = MEDIA_ENT_F_CAM_SENSOR;
+ ar0521_data.pads[0].flags = MEDIA_PAD_FL_SOURCE;
+
+ ret = media_entity_pads_init(&ar0521_data.subdev.entity, 1, ar0521_data.pads);
+ ar0521_data.subdev.entity.ops = &ar0521_sd_media_ops;
+ if (ret < 0) {
+ dev_err(dev, "Failed to init media entity pads\n");
+ return ret;
+ }
+
+ ret = v4l2_async_register_subdev(&ar0521_data.subdev);
+ if (ret)
+ {
+ dev_err(dev, "Failed to register the I2C subdev for the sensor\n");
+ return ret;
+ }
+
+ pr_info("AR0521 detected.\n");
+
+ return 0;
+}
+
+/*!
+ * ar0521 I2C detach function
+ *
+ * @param client struct i2c_client *
+ * @return Error code indicating success or failure
+ */
+static int ar0521_remove(struct i2c_client *client)
+{
+ v4l2_async_unregister_subdev(&ar0521_data.subdev);
+
+ clk_disable_unprepare(ar0521_data.sensor_clk);
+
+ /*
+ * Power down the MCU
+ */
+ if (reset_gpio >= 0)
+ {
+ toggle_gpio(reset_gpio, 0);
+ }
+
+ /*
+ * Free up the GPIOs
+ */
+ if (pwdn_gpio >= 0)
+ devm_gpio_free(&client->dev, pwdn_gpio);
+
+ if (reset_gpio >= 0)
+ devm_gpio_free(&client->dev, reset_gpio);
+
+ return 0;
+}
+
+static const struct i2c_device_id ar0521_id[] = {
+ {"ar0521", 0},
+ {}
+};
+
+MODULE_DEVICE_TABLE(i2c, ar0521_id);
+
+static struct i2c_driver ar0521_i2c_driver = {
+ .driver = {
+ .name = "ar0521",
+ .owner = THIS_MODULE
+ },
+ .probe = ar0521_probe,
+ .remove = ar0521_remove,
+ .id_table = ar0521_id,
+};
+
+
+module_i2c_driver(ar0521_i2c_driver);
+
+MODULE_DESCRIPTION("AR0521 V4L2 driver");
+MODULE_AUTHOR("e-con Systems");
+MODULE_LICENSE("GPL v2");
+MODULE_VERSION("1.0");
+MODULE_ALIAS("CSI");
diff --git a/drivers/media/platform/imx8/ar0521.h b/drivers/media/platform/imx8/ar0521.h
new file mode 100644
index 000000000000..05bdb30bbb4f
--- /dev/null
+++ b/drivers/media/platform/imx8/ar0521.h
@@ -0,0 +1,291 @@
+/*
+ * ar0521.h - ar0521 sensor mode tables
+ *
+ * Copyright (c) 2018-2019, e-con Systems, All Rights Reserved.
+ *
+ * This program is free software; you can redistribute it and/or modify it
+ * under the terms and conditions of the GNU General Public License,
+ * version 2, as published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
+ * more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#ifndef __AR0521_TABLES__
+#define __AR0521_TABLES__
+
+#define AR0521_XCLK_MIN 6000000
+#define AR0521_XCLK_MAX 24000000
+
+#define ar0521_reg struct reg_16
+#define AR0521_TABLE_WAIT_MS 0
+#define AR0521_TABLE_END 1
+#define AR0521_WAIT_MS 10
+#define AR0521_DEFAULT_MODE 0
+
+#define AR0521_DEFAULT_WIDTH 640
+#define AR0521_DEFAULT_HEIGHT 480
+
+#define AR0521_MAX_FORMAT_SUPPORTED 1
+
+#define AR0521_DEFAULT_FPS 120
+
+#define AR0521_DEFAULT_DATAFMT MEDIA_BUS_FMT_UYVY8_2X8
+#define AR0521_DEFAULT_COLORSPACE V4L2_COLORSPACE_SRGB
+
+
+////////////////////////////////////////////////////////////////////////////////////////////
+
+/* Defines related to MCU */
+
+#define CMD_SIGNATURE 0x43
+#define TX_LEN_PKT 5
+#define RX_LEN_PKT 6
+#define HEADER_FOOTER_SIZE 4
+#define CMD_STATUS_MSG_LEN 7
+
+#define VERSION_SIZE 32
+#define VERSION_FILE_OFFSET 100
+
+#define MCU_CMD_STATUS_SUCCESS 0x0000
+#define MCU_CMD_STATUS_PENDING 0xF000
+#define MCU_CMD_STATUS_ISP_PWDN 0x0FF0
+#define MCU_CMD_STATUS_ISP_UNINIT 0x0FF1
+
+#define MAX_NUM_FRATES 10
+#define MAX_CTRL_DATA_LEN 100
+#define MAX_CTRL_UI_STRING_LEN 32
+
+typedef enum _errno {
+ ERRCODE_SUCCESS = 0x00,
+ ERRCODE_BUSY = 0x01,
+ ERRCODE_INVAL = 0x02,
+ ERRCODE_PERM = 0x03,
+ ERRCODE_NODEV = 0x04,
+ ERRCODE_IO = 0x05,
+ ERRCODE_HW_SPEC = 0x06,
+ ERRCODE_AGAIN = 0x07,
+ ERRCODE_ALREADY = 0x08,
+ ERRCODE_NOTIMPL = 0x09,
+ ERRCODE_RANGE = 0x0A,
+
+ /* Reserved 0x0B - 0xFE */
+
+ ERRCODE_UNKNOWN = 0xFF,
+} RETCODE;
+
+typedef enum _cmd_id {
+ CMD_ID_VERSION = 0x00,
+ CMD_ID_GET_SENSOR_ID = 0x01,
+ CMD_ID_GET_STREAM_INFO = 0x02,
+ CMD_ID_GET_CTRL_INFO = 0x03,
+ CMD_ID_INIT_CAM = 0x04,
+ CMD_ID_GET_STATUS = 0x05,
+ CMD_ID_DE_INIT_CAM = 0x06,
+ CMD_ID_STREAM_ON = 0x07,
+ CMD_ID_STREAM_OFF = 0x08,
+ CMD_ID_STREAM_CONFIG = 0x09,
+ CMD_ID_GET_CTRL_UI_INFO = 0x0A,
+
+ /* Reserved 0x0B to 0x0F */
+
+ CMD_ID_GET_CTRL = 0x10,
+ CMD_ID_SET_CTRL = 0x11,
+
+ /* Reserved 0x12, 0x13 */
+
+ CMD_ID_FW_UPDT = 0x14,
+ CMD_ID_ISP_PDOWN = 0x15,
+ CMD_ID_ISP_PUP = 0x16,
+
+ /* Reserved - 0x17 to 0xFE (except 0x43) */
+ CMD_ID_LANE_CONFIG = 0x17,
+ CMD_ID_MIPI_CLK_CONFIG = 0x18,
+
+ CMD_ID_UNKNOWN = 0xFF,
+
+} HOST_CMD_ID;
+
+enum {
+ FRAME_RATE_DISCRETE = 0x01,
+ FRAME_RATE_CONTINOUS = 0x02,
+};
+
+enum {
+ CTRL_STANDARD = 0x01,
+ CTRL_EXTENDED = 0x02,
+};
+
+enum {
+/* 0x01 - Integer (32bit)
+ 0x02 - Long Int (64 bit)
+ 0x03 - String
+ 0x04 - Pointer to a 1-Byte Array
+ 0x05 - Pointer to a 2-Byte Array
+ 0x06 - Pointer to a 4-Byte Array
+ 0x07 - Pointer to Generic Data (custom Array)
+*/
+
+ EXT_CTRL_TYPE_INTEGER = 0x01,
+ EXT_CTRL_TYPE_LONG = 0x02,
+ EXT_CTRL_TYPE_STRING = 0x03,
+ EXT_CTRL_TYPE_PTR8 = 0x04,
+ EXT_CTRL_TYPE_PTR16 = 0x05,
+ EXT_CTRL_TYPE_PTR32 = 0x06,
+ EXT_CTRL_TYPE_VOID = 0x07,
+};
+
+/* Stream and Control Info Struct */
+typedef struct _isp_stream_info {
+ uint32_t fmt_fourcc;
+ uint16_t width;
+ uint16_t height;
+ uint8_t frame_rate_type;
+ union {
+ struct {
+ uint16_t frame_rate_num;
+ uint16_t frame_rate_denom;
+ } disc;
+ struct {
+ uint16_t frame_rate_min_num;
+ uint16_t frame_rate_min_denom;
+ uint16_t frame_rate_max_num;
+ uint16_t frame_rate_max_denom;
+ uint16_t frame_rate_step_num;
+ uint16_t frame_rate_step_denom;
+ } cont;
+ } frame_rate;
+} ISP_STREAM_INFO;
+
+
+typedef struct _isp_ctrl_ui_info {
+ struct {
+ char ctrl_name[MAX_CTRL_UI_STRING_LEN];
+ uint8_t ctrl_ui_type;
+ uint8_t ctrl_ui_flags;
+ } ctrl_ui_info;
+
+ /* This Struct is valid only if ctrl_ui_type = 0x03 */
+ struct {
+ uint8_t num_menu_elem;
+ char **menu;
+ } ctrl_menu_info;
+} ISP_CTRL_UI_INFO;
+
+typedef struct _isp_ctrl_info_std {
+ uint32_t ctrl_id;
+ uint8_t ctrl_type;
+ uint8_t mcu_ctrl_index;
+ union {
+ struct {
+ int32_t ctrl_min;
+ int32_t ctrl_max;
+ int32_t ctrl_def;
+ int32_t ctrl_step;
+ } std;
+ struct {
+ uint8_t val_type;
+ uint32_t val_length;
+ // This size may vary according to ctrl types
+ uint8_t val_data[MAX_CTRL_DATA_LEN];
+ } ext;
+ } ctrl_data;
+ ISP_CTRL_UI_INFO ctrl_ui_data;
+} ISP_CTRL_INFO;
+
+struct ar0521 {
+ int numctrls;
+ struct v4l2_subdev subdev;
+ struct i2c_client *i2c_client;
+ uint16_t frate_index;
+ struct media_pad pads[1];
+
+ u32 mclk;
+ u8 mclk_source;
+ struct clk *sensor_clk;
+
+ int csi;
+
+ /*
+ * Format related data
+ */
+ struct v4l2_pix_format pix;
+
+ struct ar0521_datafmt {
+ u32 code;
+ enum v4l2_colorspace colorspace;
+ } fmt;
+
+ struct v4l2_captureparm streamcap;
+
+ bool on;
+
+ int num_frm_fmts;
+
+ /*
+ * Array of Camera framesizes
+ *
+ * Moved from global
+ */
+ struct mcu_frmfmt {
+ struct v4l2_frmsize_discrete size;
+ unsigned int * framerates;
+ int num_framerates;
+ int mode;
+ } *mcu_cam_frmfmt;
+
+ int power_on;
+
+ uint16_t mipi_lane_config;
+ uint16_t mipi_clk_config;
+
+ struct v4l2_ctrl *ctrls[];
+
+};
+
+static ISP_STREAM_INFO *stream_info = NULL;
+static ISP_CTRL_INFO *mcu_ctrl_info = NULL;
+
+/* Total formats */
+static int num_ctrls = 0;
+static int *streamdb;
+static uint32_t *ctrldb;
+
+/* Mutex for I2C lock */
+DEFINE_MUTEX(mcu_i2c_mutex);
+
+static int ar0521_read(struct i2c_client *client, u8 * val, u32 count);
+static int ar0521_write(struct i2c_client *client, u8 * val, u32 count);
+static int ar0521_s_parm(struct v4l2_subdev *sd, struct v4l2_streamparm *param);
+static int ar0521_s_power(struct v4l2_subdev *sd, int on);
+
+/*
+ * MCU related functions
+ */
+static int mcu_get_fw_version(struct i2c_client *client, unsigned char * fw_version);
+static int mcu_verify_fw_version(const unsigned char *const fw_version);
+static int mcu_count_or_list_fmts(struct i2c_client *client, ISP_STREAM_INFO *stream_info, int *frm_fmt_size);
+static int mcu_count_or_list_ctrls(struct i2c_client *client,
+ ISP_CTRL_INFO * mcu_ctrl_info, int *numctrls);
+static int mcu_get_sensor_id(struct i2c_client *client, uint16_t * sensor_id);
+static int mcu_get_cmd_status(struct i2c_client *client, uint8_t * cmd_id,
+ uint16_t * cmd_status, uint8_t * ret_code);
+static int mcu_isp_init(struct i2c_client *client);
+static int mcu_stream_config(struct i2c_client *client, uint32_t format,
+ int mode, int frate_index);
+static int mcu_set_ctrl(struct i2c_client *client, uint32_t ctrl_id,
+ uint8_t ctrl_type, int32_t curr_val);
+static int mcu_get_ctrl(struct i2c_client *client, uint32_t ctrl_id,
+ uint8_t * ctrl_type, int32_t * curr_val);
+static int mcu_get_ctrl_ui(struct i2c_client *client,
+ ISP_CTRL_INFO * mcu_ui_info, int index);
+static int mcu_fw_update(struct i2c_client *client, unsigned char *txt_fw_version);
+static int mcu_isp_power_down(struct i2c_client *client);
+static int mcu_isp_power_wakeup(struct i2c_client *client);
+
+#endif /* __AR0521_TABLES__ */
diff --git a/drivers/media/platform/imx8/ecam50_cam_fw.txt b/drivers/media/platform/imx8/ecam50_cam_fw.txt
new file mode 100644
index 000000000000..79923866c34f
--- /dev/null
+++ b/drivers/media/platform/imx8/ecam50_cam_fw.txt
@@ -0,0 +1,2146 @@
+":020000040800F2\n"
+":40040000E03100204D050008013F00081F2A0008000000000000000000000000000000000000000000000000000000008D41000800000000000000000B050008014300085E\n"
+":40044000214A00085F0500085F050008ED0A00085F0500085F0500085F050008A90A0008000000005F0500085F0500085F0500085F0500085F0500085F050008F14300086F\n"
+":40048000014400085F0500085F050008000000005F050008452A00085F050008212A00085F0500087D4100085F0500085F050008114A00085F05000800000000000000009C\n"
+":4004C0000348854600F0D0F90048004781690008E0310020084B19680868203080F30988022080F31488BFF36F8F3FBCAE4608BC04BC62B6184700000C000020EFF310807A\n"
+":4005000072B6704780F310887047EFF309800E4B1A6820381060F0C044464D4656465F46F0C008B572B607F06FFA62B60CBC116808681030F0C8A046A946B246BB4680F307\n"
+":4005400009882038F0C818470C0000200448804704480047FEE7FEE7FEE7FEE7FEE7FEE79D430008C104000830B50B46014600202022012409E00D46D5409D4205D31D4627\n"
+":400580009540491B2546954040191546521E002DF1DC30BD70B500242546002801DA01244042002901DA01254942FFF7DDFFAC4200D04042002C00D0494270BDF0B51FB466\n"
+":4005C0000646002082B005464024019100901BE0019922460F46304600F0F4F8049A059B801A994110D310461946224600F0DAF8361A8F410197224601200021009F00F083\n"
+":40060000D1F838184D4100902046641E0028DFDC019B00982946324607B0F0BD03460B439B0703D009E008C9121F08C0042AFAD203E00B780370401C491C521EF9D27047F4\n"
+":40064000D2B201E00270401C491EFBD270470022F6E710B513460A4604461946FFF7F0FF204610BD0321001D401E037812021A43491EF9D510467047024670B54A40D30F88\n"
+":40068000DB0740002DD04A002AD0010E140E000212020919400A520A8418E50104465443000A120A2E045043A4194219200CC543AA18120C0125AD03521C521912047F39D1\n"
+":4006C000240400D0521C104301D44000491EC2B20C06C0092018401C4008802A02D003E0002070BD40084000002900DA0020184370BD70B502464A40D50F40004A00ED0762\n"
+":4007000040085208002814D0002A12D0C40DD30D41020120C0055202490A520AE41A091812187D34914201D3641C00E04900002C01DA002070BD0023914201D3891A0343D1\n"
+":40074000400849000028F7D100290AD0914202D10121C90705E0914201D2012101E00121C943E005C018401900F03DF870BD10B500229623114600F03EF810BD41004002CC\n"
+":400780000122400AD205090E80187F2901DA00207047962903DC9622511AC840704796398840704710B5202A04DB0146203A9140002010BD914020239C1A0346E34019433F\n"
+":4007C000904010BD10B5202A04DB0846203AD040002110BD0B46D340D0402024A21A91400843194610BD002904DA401C490001D140084000704770B40024050C05D11024EC\n"
+":40080000000402D1002921D01124050E01D100020834050F01D10001241D850F01D18000A41C002801DB4000641C002908D020252E1B0D46F540A14000D00121294308433C\n"
+":4008400001061B1B000ADB1D02D5002070BC7047DB05181880180029F8DA401C4900F5D170BC400840007047064C0125064E05E0E36807CC2B430C3C98471034B442F7D37E\n"
+":40088000FFF722FE9C160208BC16020810B5364CE069000267D4A069C007FCD16368334A334934A004F0C4F86068C00704D03C48E0603C48E06005E02C4A2D49921D3AA093\n"
+":4008C00004F0B6F86368294A29490A3241A004F0AFF8A069C007FCD16368244A2449143224A004F0A5F86068C00704D0292252011F4944A00BE06068400704D54A4860619D\n"
+":400900004A48606105E0194A19491C3248A004F08FF86368154A164922322EA004F088F84E49042003F01EFB104A114926324CA004F07EF8E2690120C005E16902434DA014\n"
+":4009400004F076F8094A0A49283245A004F070F860680121890408436060044A04492C323FA004F065F810BD002002400105000023830008202D2D2D2025732825642920ED\n"
+":40098000464C4153482D3E50454352203D2030782530387820202D2D2D200A0D00000000EFCDAB8905040302202D2D2D202573282564292050454B45595220556E6C6F63C4\n"
+":4009C0006B656420416C7265616479202D2D2D200A0D0000202D2D2D20257328256429204E6F772C20464C4153482D3E50454352203D20307825303878202D2D2D200A0D1F\n"
+":400A000000000000202D2D2D202573282564292050454C4F434B204C6F636B6564202D2D2D200A0D00000000C8D9EAFB27262524202D2D2D20257328256429204F50544C9B\n"
+":400A40004F434B20416C726561647920556E6C6F636B6564202D2D2D200A0D00F0800000202D2D2D20257328256429202D2D2D200A0D00002056616C204166746572205533\n"
+":400A80006E6C6F636B204F7074696F6E204279746573202E2E2E2030782530387820307825303878200A0D0010B50120800200F0FBF910BD04A003F0BBFF7D24E40020468F\n"
+":400AC00006F012F8FBE7000020556E7265636F76657261626C65204572726F72204F636375726564202121200A0D000010B500F02DF910BD10B5084900224A6107494B6871\n"
+":400B00004C1523434B604B68082423434B60C009C001026010BD0000A80000200020024010B5214A00219069C305204804D54169022319434161911593699B0505D5436988\n"
+":400B40000124234343616302194393695B0505D54369082423434361E301194393691B0505D543690424234343616302194393699B0405D543691024234343616302194378\n"
+":400B800093699B0304D5446920231C43446119439369DB0305D54369402423434361A0020143916110BD000000200240A800002008B517A003F03CFF00F042F91C484168FB\n"
+":400BC00042151143416041680822114341600021130619608169C907FCD18169890714D50221816141684122D2009143416018680090104A104911A003F01AFF1EA003F0BB\n"
+":400C000017FF00F011F903F09FF9FFF753FF000020466C6173682045726173652042414E4B31205374617274202121200A0D000000200240BB04000004830008202D2D2D28\n"
+":400C400020204166746572202573282564292041742041646472657373203078253038782056616C7565203D20307825303878202D2D2D200A0D000020466C617368204590\n"
+":400C8000726173652042414E4B312053756363657373202121200A0D0000000070B50024024620325179022903D00421C16301243CE001680B680E25AB430B6001680B6811\n"
+":400CC0005B085B000B601A4B0168994201D1012121E0174B1433994201D110211BE0144B2833994201D1891515E0114B3C33994201D189140FE00E4B5033994202D1012101\n"
+":400D0000090408E00A4B6433994202D10121090501E001210906064B083B59600121517100211171816B002900D08847204670BD0800024031B500F08FF9044600F08CF960\n"
+":400D40000099001B8842F9D338BD7047F8B5344CA0690026C005334D002811DBA06980050ED4A06940050BD4A069000508D4A069800405D4A069800302D4A069C00309D5CF\n"
+":400D8000287801282BD0AF68FFF7CAFE384600F055F82E70A069800712D50220A061287800280DD0287801281ED06068082188436060A868FFF7C9FF0020C043A8602E7038\n"
+":400DC000287800280AD160684121C90088436060606803210904884360602E74F8BDEF680020C043E860CFE76868401E6860686800280DD0E868FFF7A8FFE8688030E8607F\n"
+":400E000061680122520291436160FFF773FED7E70020C043E8602E70FFF797FFD0E7000000200240A800002003484168022211434160002070470000002002407047000045\n"
+":400E40000948416889070CD54168C90703D00749C1600749C16007490161074901610020704701207047000000200240EFCDAB8905040302BFAE9D8C1615141310B5012197\n"
+":400E80008902884204D1034A034904A003F0D0FD10BD000027040000ED8200082025732028256429200A0D0010B504494A69024202D04861FFF7E2FF10BD00000004014046\n"
+":400EC000F8B500230124A7E027469F403A4070D04D68022D01D0122D14D1DD08AD002D1800952D6A5E07AC46F50E0F26AE46AE406546B543AC460E697546AE4065462E4352\n"
+":400F0000009D2E624D68012D05D0022D03D0112D01D0122D16D185680326AC465D00AE46AE406546B543AC46CE687546AE4065462E43866046680D79BE43ED06ED0F9D40D7\n"
+":400F40003543456006685F000325BD40AE46AE430D79B446AE07B60FBE4065462E430660C6687546AE438D68BD403543C5604D68ED0050D52B4D6E6B26436E639E082A4D2B\n"
+":400F8000B6007519AC46AD689E07360F0F27B740BD4305273F07B84201D100271AE0234FB84201D1012715E0214FB84202D1022710E030E01F4FB84201D103270AE01E4FF4\n"
+":400FC000B84201D1042705E01C4FB84201D1052700E00627B7402F436546AF60184D2E684F689643FF0300D516432E606E684F689643BF0300D516436E60AE684F6896436F\n"
+":40100000FF0200D51643AE60EE684F689643BF0200D51643EE605B1C0A681546DD4000D052E7F8BD00100240000001400004005000080050000C005000100050001C0050CA\n"
+":401040000004014042694A4042617047002A01D0816170478162704701480068704700000400002070B5024640325378202B1CD11378012B19D00123137024245470046841\n"
+":4010800025689D432560046825681E03B5432560046825680D4325600068016819430160202050700020107070BD022070BD70B5024640325378202B1BD11378012B18D0AF\n"
+":4010C000012414702423537003681D68A5431D6005682B680F263602B3430902194329600068016821430160202050700020107070BD022070BD000010B5034A034904A0E1\n"
+":4011000003F096FC10BD000021040000D38200082025732028256429200A0D0010B5034A034904A003F084FC10BD00000D0400006F8200082025732028256429200A0D00BD\n"
+":4011400070B503689A691968D40507D50C0605D5446C01252C4344642C02DC61530508D50B0606D5436C082423434364E3010468E361920508D5090606D5416C0222114342\n"
+":40118000416411020268D161416C0B22114202D0416C01F02DFD70BD026891691268436B002B00D01847704770B5054600681449144C884213D1284600F054F80346124AB8\n"
+":4011C000124913A003F034FC6078042803D0A07860700420A07002F09BFF002068641849286888420BD1284600F03CF8064A03460F32064913A003F01BFC0320207070BD64\n"
+":401200000054004060000020F60300005982000820257328256429202D2048414C5F4932435F4572726F7243616C6C6261636B20202D20307825303878200A0D00000000E6\n"
+":4012400000780040202573202825642920457272436F6465203D20307825303878200A0D00000000406C704770B5040006D02546403568780026002802D005E0012070BD6A\n"
+":401280002E70204600F06EF924206870206801684908490001600F216068090688432168086121688A680120C00382438A60E1680129A16808D021229202114322689160FF\n"
+":4012C000E168022902D005E00143F7E701212268C902516021684A680F4B1A434A602168CA688243CA60616920690843A169090208432168C860216AE06908432168086074\n"
+":40130000206801680122114301606664202068702663AE70002070BD0080000210B5034A034904A003F084FB10BD000012040000848200082025732028256429200A0D003E\n"
+":4013400000680649884205D105480178092902D00321017070470B21FBE70000007800409000002000680649884205D105480178052902D00321017070470721FBE7000017\n"
+":401380000078004090000020F8B50546044640356878202830D120688069C04300042BD52878012828D001202870222068701020A87000266664626263851048E062104803\n"
+":4013C0006063608DFF2804D9FF20012320851B0603E0608D012320855B06092080020090208DC2B2204601F09BFF2E700221204601F07EFB0020F8BD0220F8BD0000FFFFAE\n"
+":4014000071300008FFB5054604464035687881B020287ED1287801287BD001202870FFF71BFE0746012200901923D103204601F089FF00283FD1212068701020A870002613\n"
+":40144000666403986062049860856663618D01204003FF2903D9FF222285009034E0618D2185009036E02046029901F059FF36E001F0B3FF002803D0606C042847D01AE0F8\n"
+":40148000606A411C6162017820688162608D401E6085208D401E0004000C20851FD1608D00281CD000970022802120460A9B01F049FF002802D0032005B0F0BD608DFF284C\n"
+":4014C00005D9FF222285009601231B06CBE7608D20850096208D0123C2B25B06C3E7608D0A9900283A462046C2D101F04FFF0028C2D121682020C86121684A68064B1A403E\n"
+":401500004A606870AE702E700020D5E701E00120D2E70220D0E7000000E800FE10B5034A034904A003F084FA10BD00001C040000B98200082025732028256429200A0D008B\n"
+":4015400010B5034A034904A003F072FA10BD0000170400009F8200082025732028256429200A0D00F0B5234A0168122403200125214E85B0914215D1C02100910021029193\n"
+":4015800003900194049569461C48FFF799FCB06B69050843B06300220321172000F058F9172022E0164A914221D189156A4632C20320072781C2052069460007FFF780FCA6\n"
+":4015C0001020694631C103200390694604970B48FFF776FCB06B012189070843B06300220321152000F034F9152000F027F905B0F0BD0000005400400010024000040050BB\n"
+":401600000078004038B500680D49884213D10D4CA3780A2B10D0A08900900B4A0B490C4803F006FA6078042803D0A07860700420A07002F06DFD38BD63700C20A07038BD1F\n"
+":401640000054004060000020D30300003D8200082014020838B500680E49884214D10E4CA378062B11D0A089ED22009092000B490B4803F0DDF96078042803D0A078607010\n"
+":401680000420A07002F044FD38BD63700820A07038BD000000540040600000202182000888140208F8B5034640335C78202C1ED11C78012C1BD001241C7022245C7020243E\n"
+":4016C0009C700024446405686E680127FF03BE436E6041624285418D01850649C162064941631C701F2101F003FA0020F8BD0220F8BD00000000FFFF01320008F8B503461E\n"
+":4017000040335C78202C1ED11C78012C1BD001241C7021245C7020249C700024446405686E680127FF03BE436E6041624285418D01850649C162064941631C70172101F089\n"
+":40174000D7F90020F8BD0220F8BD00000000FFFF0132000802480168491C0160704700000400002010B506480168402211430160002000F007F800F03DF8002010BD0000AC\n"
+":401780000020024000B5014687B00022102000F05FF8102000F052F81148816B02221143816305A9684600F071FA00F095FA0D49FEF7DAFE0D490C4A0A600D4A401ECA60A2\n"
+":4017C0004860002008618860084600F0EBFD002802D0012007B000BD044800F0FEFDF9E70010024040420F0000040040DC180020E703000010B51048416B012211434163FB\n"
+":40180000816B02041143816300221146501F00F01FF803210022481F00F01AF803210022081F00F015F803210022084600F010F8032000F003F810BD00100240C106C90E1F\n"
+":4018400001208840014908607047000000E100E010B502F057FB10BDF8B54E49074601250020ED034A4B4B4A4031082F7BD00EDC012F48D0022F60D0042F22D1CC68032685\n"
+":40188000B602344065D07F02BC424ED064E0102F77D00126032436042404202F09D0FF3F012F0ED1C968214053D07400A1423CD06BE00B6909692140B14203D199052EE01E\n"
+":4018C0002846F8BD01256D04A94203D19907F8D53148F8BDA142FCD111688903F9D5116803200005014001200005091A09D0091A05D0814201D12948F8BD2948F8BD294803\n"
+":40190000F8BD2948F8BDCC68A407A40F0AD0022C0BD0012C0ED0032CF4D1096989050029CEDBF8BD00F0E8F9F8BD11684907FBD51846F8BD00F0F0F9F8BDCC680C26344037\n"
+":4019400007D0082CF1D0042CF4D00C2CE5D0F8BD09E000F0C1F9FAE7012292029442E9D0B442DAD0F3E7C968032424032140F0D001256D036C10A942D7D0A142DAD0E6E733\n"
+":40198000FFE7916B4902E4D4E1E7B142D2D0DEE70024F400001002408890000020A1070000093D0040420F0080841E00F8B504460078594D800672D5574E0027403EB06B96\n"
+":4019C000C00004D4B06BA9050843B063012753480168C90511D40168821511430160FFF73BFB009005E0FFF737FB0099401A642837D84A480068C005F5D5326803210905E8\n"
+":401A000060680A400140914208D08103890F032904D13168890301D50120F8BD2A69032109040A4022D0084090421FD0207880061CD528692A6988430121C9040A432A61EC\n"
+":401A40002A698A432A612861C0050FD5FFF704FB009008E0FFF700FB0099411A3048814201D90320F8BD28698005F3D561688803800F032805D132680005824301400A4356\n"
+":401A800032602869032261681204114008432861002F04D0B16B012000078143B1632078C00705D0E868A168800880000843E8602078800705D5E8680C218843E1680843BE\n"
+":401AC000E8602078400706D5E86803218902884321690843E8602078000706D5E86803210903884361690843E8602088C00506D5E868032109048843A1690843E860207812\n"
+":401B0000000606D5E868032189048843E1690843E8600020F8BD0000401002400070004088130000F8B5054653480E460068C007C00FB0420AD250480168490849003143A7\n"
+":401B400001600068C007C00FB0426FD128784B4C800705D5E068F0218843A9680843E0602878C00752D06868022817D0032818D02168012818D08905002957DAE1688908A3\n"
+":401B800089000143E160FFF767FA69680746022912D003291CD0012926D033E021688903EAE721688901E7E74907E5E7FFF754FAC11B3348814223D8E0680007800F022806\n"
+":401BC000F4D123E0FFF748FAC11B2D48814217D8E0680007800F0328F4D117E0FFF73CFAC11B274881420BD8E0680007800F0128F4D10BE0FFF730FAC11B2148814201D947\n"
+":401C00000320F8BDE0680007800FF3D11A480168C907C90FB1420BD9016849084900314301600068C007C00FB04201D00120F8BD2878400706D5E068072109028843E96818\n"
+":401C40000843E0602878000707D5E0680721C90288432969C9000843E06000F05DF8E168084A0906090F515CC840074908600020FFF788FD0020F8BD0020024000100240D2\n"
+":401C800088130000BC8100080000002010B50F2202600C4AD3689B079B0F4360D368F02423408360D46807231B021C40C460D268D2081A40026104480068C007C00F086031\n"
+":401CC00010BD00000010024000200240014800687047000000000020044805490068C968044A4905490F515CC84070470000002000100240D5810008044805490068C96845\n"
+":401D0000044A8904490F515CC84070470000002000100240D581000810B5184AD1680C20084004280BD0082810D00C2810D050680004410F0120C003491C884010BD1068D3\n"
+":401D4000C00601D50E4810BD0E4810BD0E4810BD88020E4B000F185C0902D368890F491CDB0301D5084A05E01268D20601D5044A00E0044A5043FEF7F7FB10BD001002408D\n"
+":401D800000093D000024F40000127A00CC810008F8B504460078F24DC0074AD0E8680007800F022807D0E8680007800F032809D1E868C00306D5286880033AD56068002883\n"
+":401DC00073D036E0012062680004824203D129680143296011E0052301211B0489049A422A6802D10A432A60F1E782432A602A6802400092286888432860606800280CD06A\n"
+":401E0000FFF72AF9064604E0FFF726F9801B64287ED828688003F7D50BE0FFF71DF9064604E0FFF719F9801B6428F1D828688003F7D42078800741D5E8681F270007800F8A\n"
+":401E40003F02012807D0E8680007800F032809D1E868C00306D42868400717D5E068012823D113E0E068002817D029680922914301432960FFF7F0F8064604E0FFF7ECF892\n"
+":401E8000801B0228C4D828684007F7D568682169B84309020843686010E02868400840002860FFF7D9F8064605E090E0FFF7D4F8801B0228ACD828684007F7D42078C006A8\n"
+":401EC00076D5E868A74E0007800F0BD0A06900285DD02868FF21013108432860FFF7BCF8074644E02868800502D5A06900286ED0206A69683140884212D902F0D1F80028F4\n"
+":401F0000AED16868216AB04308436860686800E0BBE00002217F000A0906084368600FE06968B143014369606868217F0002000A090608436860206A02F0B2F800288FD19B\n"
+":401F4000206A410B0120C003491C8840E96809060A0F8549895CC840844908600020FFF711FC25E0FFF778F8C01B02288AD828688005F7D56868216AB0430843686068680A\n"
+":401F8000217F0002000A09060843686010E02968FF20013081432960FFF75EF8064604E0FFF75AF8801B02286FD828688005F7D420786F4E000723D560690028306910D0C7\n"
+":401FC000012108433061FFF747F8074605E0C5E0FFF742F8C01B022857D830698007F7D50EE0400840003061FFF736F8074604E0FFF732F8C01B022847D830698007F7D4FC\n"
+":402000002078400762D5A86B0027C00005D4A86B012109070843A863012756480168C90511D40168821511430160FFF715F8009005E0FFF711F80099401A642825D84D48FD\n"
+":402040000068C005F5D5FF20A2680130824203D131690143316111E001218902002A07D005231B029A4203D132690A433261EFE7326982433261306988433061A06800280A\n"
+":402080000FD0FEF7E9FF009007E060E0FEF7E4FF0099411A3848814259D830698005F5D50DE0FEF7D9FF009006E0FEF7D5FF0099411A314881424AD830698005F5D4002F24\n"
+":4020C00004D0A96B012000078143A963606A002842D0E9680907890F03293FD0012636060228286805D0B0432860FEF7B5FF04462FE0B0432860FEF7AFFF074604E0FEF715\n"
+":40210000ABFFC01B022822D828688001F7D4E16AA06AEA680843216BFD231B049A4311430843E860286830432860FEF795FF044604E0FEF791FF001B022808D8286880019C\n"
+":40214000F7D509E0FEF788FF001B022801D90320F8BD28688001F5D40020F8BD0120F8BD0010024000E00000BC81000800000020401002400070004088130000704738B59A\n"
+":4021800001684A68D243520609D48A68D243D20705D18A68D243520601D5816C08E04A68D243120606D48A68D243920702D4C16C884738BD4A68D2439206FAD48A68D243A6\n"
+":4021C000D20606D4426D02231A4342651022D2438A6001688A680123D2439206002A08DB426D1A4342658A6800920A684024A2430A6001688A68D243540602464032002CDF\n"
+":4022000009DB547C122C06D0446D04252C434465CC688C6800948C68E443E40505D4446D08252C4344658C680094446D002CC0D04C68E025AC434C605374FFF79FFF38BDBC\n"
+":4022400070B5040006D025464035687C0026002802D005E0012070BD2E74204600F032F80220687420680168402291430160A168606822690843E168114308436169012224\n"
+":402280000843A169520211400843E1690843216A0843A16A084321680860A0690421000C0840616A0843216848602168E06A08612068C16992009143C16166650120687420\n"
+":4022C000002070BD00B50068104985B088421AD10F48416B821411434163A02000900220019000210320039002910491052069460007FEF7E5FD002203211920FFF7A8FAD5\n"
+":402300001920FFF79BFA05B000BD00000030014000100240042204490428086902D09043086170471043FBE700E000E0094910B5401E884201D9012010BD074C606103219B\n"
+":40234000081F01F0DFFD0020A06107202061002010BD0000FFFFFF0000E000E070B502462032137D012B1BD00123137502245475046865687026B5436560046865680E68BA\n"
+":40238000354365600468A5688026B543A5600068846849680C43846053750020107570BD022070BD70B5040005D025462035687D002802D006E0012070BD002028752046AF\n"
+":4023C00000F00AF802206875211D206802F020F801206875002070BD70470268D36801210B43D360006802680A43026000207047704770B50446006801690025C9438907C1\n"
+":40240000002915DBC168C943890711D4E91E016101202075206880698007204602D0FFF7E7FF04E000F08EF8204600F025F9257520680169C943490717D4C168C943490788\n"
+":4024400013D40421C943016102202075206880698005800F204602D0FFF7CAFF04E000F071F8204600F008F9257520680169C943090716D4C168C943090712D40821C94329\n"
+":402480000161042020752068C0698007204602D0FFF7AEFF04E000F055F8204600F0ECF8257520680169C943C90617D4C168C943C90613D41021C943016108202075206872\n"
+":4024C000C0698005800F204602D0FFF791FF04E000F038F8204600F0CFF8257520680169C943C90708D1C168C943C90704D1891E0161204600F0C2F820680169C94349063F\n"
+":4025000009D4C168C943490605D44021C9430161204600F0BDF870BD00B500680121890785B088420CD101200090002002210290039001910491052069460007FEF7C0FCE3\n"
+":4025400005B000BD7047F8B5064604462036307D0D4601280DD001203075022070750427002A08D0042A16D0082A2AD00C2A4DD137E00220F8BD206801F07AFF20688169B3\n"
+":4025800008221143816120688169B943816120688169EA6812E0206801F082FF206882690121C9020A43826120688169012292029143816120688169EA681202114381613E\n"
+":4025C00024E0206801F085FF2068C26908210A43C2612068C169B943C1612068C169EA6812E0206801F090FF2068C1690122D2021143C1612068C269012189028A43C26151\n"
+":402600002068C169EA6812021143C1610120707500203075F8BD70B5040005D025462035687D002802D006E0012070BD00202875204600F00BF802206875211D206801F0EF\n"
+":40264000E7FE01206875002070BD000010B500680121890788420CD10648816B012211438163002203210F20FFF7F2F80F20FFF7E5F810BD001002407047000010B50068B5\n"
+":402680000249884201D1FFF765F810BD000400407047704770470000F8B502680446D06911680607360F07D1830605D58B0603D5204601F0F2FFF8BD95682023002E65D001\n"
+":4026C000EE07F60FFF2721370F4037435ED0C70706D0CF0504D501271762E26E3A43E266820708D5EA0706D0276802223A62E26E04273A43E266420708D5EA0706D025682E\n"
+":4027000004222A62E26E02252A43E266020709D50A461A40324305D0236808221A62E36E1343E366E26E002AC5D0800604D5880602D5204601F0B1FFE06E000703D4206831\n"
+":40274000806840061CD5204601F098FF20688168490611D5826840218A438260606E00280AD01D498163606EFEF798FA0028A2D0606E816B8847F8BD2046FFF78BFFF8BDCA\n"
+":402780002046FFF787FF0020E066F8BD2646C7026036002F0ADA6D0208D50120000510627372B3722046FFF774FFF8BD050605D50D0603D5204602F0C7F8F8BD4006FCD519\n"
+":4027C0004806FAD52046146840218C431460737200F0D3F8F8BD00006946000870B5040005D025466035687A002802D006E0012070BD00202872204600F026F824206872D0\n"
+":4028000020680168490849000160606A002802D0204601F094FE204601F07EFF0128E7D0206841680922D20291434160206881682A2291438160206801680122114301606B\n"
+":40284000204601F0E1FE70BD00B50068164987B0884227D11548C26A01210A43C262C26A0A400592C26A0A43C262C26A0A400592826B4B041A4382630C20009002200190C0\n"
+":4028800003200390042004900291052069460007FEF716FB002203211C20FEF7D9FF1C20FEF7CCFF07B000BD00440040001002407047FFB5064604466036707A83B00D469A\n"
+":4028C000202858D1002D0CD00598002809D00120A1680003814207D12069002804D1E80702D0012007B0F0BD307A012843D0012030720020E06621207072FEF7ADFB0190CC\n"
+":4029000027464037059838820598788218E0788A401E788206980090002280212046019B02F045F8002818D10120A1680003814202D12069002812D02168287888626D1C4E\n"
+":40294000788A0028E3D106980090002240212046019B02F02CF8002808D00320C2E728882168C005C00D8862AD1CE9E72020707200203072B6E70220B4E7704710B5064C8A\n"
+":40298000E178002901D000F045F8E078401EE07001F0BEFB10BD00006000002010B501684A68D243920507D48A68D243D20703D1921E8A60FFF7E2FF10BD10B504000FD099\n"
+":4029C00000F010F8E0688021084321680860616820690843A168084321684860002010BD012010BD10B50068084988420CD10848816BC21411438163002203211046FEF7BD\n"
+":402A000027FF0020FEF71AFF10BD0000002C004000100240C1680068016000207047FEE710B5074800688069172109020842044802D0FEF785FB10BDFEF7AEFB10BD00004C\n"
+":402A4000B00D002010B50648006880694005400F034802D0FEF774FB10BDFEF79DFB10BDFC0D002010B5806A01684A680123DB031A434A60826B00219163C26B9163014673\n"
+":402A800040314A78602A02D0FEF78EFB10BD20224A70FEF731FB10BDF0B503460022CE0740332824B025002E05D05E7842222746B74300D0F2228E0705D544265B78324330\n"
+":402AC0009C4300D02A434B0701D5B8231A4311238B4301D190231A4312238B4301D160210A4300680168914301600020F0BD000070B5164D1223446B002220268B43AC4270\n"
+":402B000002D0134DAC420DD14C0700D5B82211248C4301D190210A43002B11D1324340210A430DE04C0700D5B822CC0701D0F2242243890701D5F4210A43002B00D132434A\n"
+":402B40000068016811430160002070BDAD2F00089931000801688A69D243920701D400228A6200688169C943C90703D081690122114381617047F8B505460446403568784D\n"
+":402B800028218143206804D00821C16100202870F8BD8169C903CF0F8169FE230E0C81681E408A05C168920D19408C46E168022912D10621D3090E400B409E420BD1A16CB6\n"
+":402BC000491CA164A16C0229E2D10021A1640823C361297007E0664604212046FFF75CFF00202870324639462046FEF797FAF8BDF8B50026054640350446AE702C48E06202\n"
+":402C00006685606C0843606468782027282823D06878292820D068782A281DD007212046FFF73AFF6878602800D06F7026636663206801684A041F49026817D501239B033F\n"
+":402C40009A430260A06B81632E70A06BFEF726F800281DD0A06B19E003212046FFF71CFF28206870266314486063E1E7120410D502680123DB039A430260E06B81632E70B3\n"
+":402C8000E06BFEF70BF8002802D0E06B816B8847F8BD6878602804D02E702046FEF784FAF8BD6F702E702046FEF726FAF8BD00000000FFFF652A00080132000870B50446C8\n"
+":402CC0001548E062002525632022204640300646427085706563480711D52068416A606A421C62620170208D002808D0401E2085608D401E6085606C0421084360640721E8\n"
+":402D00002046FFF7C9FE21681020C86135702046FEF704FB70BD00000000FFFFF8B5064600682027C76130684268224B1A4042600025356320487563F062C80606D5316858\n"
+":402D40001020C861706C0421084370643046FFF701FF03213046FFF79FFE706C002814D134464034607860280FD06078212811D06078222808D16770A078A570402825702D\n"
+":402D8000304614D0FEF7DCFAF8BD716C3046FFF72FFFF8BD6770A078A57040282570304602D0FEF7DFFAF8BDFEF7CAFBF8BDFEF7B5FBF8BD00E800FE0000FFFF70B500254A\n"
+":402DC000064640360446B57071782020212970700BD012202063022120466563FFF75CFE35702046FEF7ACFA70BD11202063012120466563FFF750FE35702046FEF7B2FA57\n"
+":402E000070BD0000F8B50446006820260F46C66121680820C86107212046FFF73DFE20684168B20211434160206841682D4A114041602046FFF78EFE2068016825464904A6\n"
+":402E40004035002902DB0168090406D5697821292FD0E16B096849686185628D0421002A02D0626C0A4362647A070FD5426A606A431C63620270208D002807D0401E2085F7\n"
+":402E8000608D401E6085606C0843606400202063A8706063616C00290DD0616C2046FFF7A7FE6878282803D139462046FFF706FFF8BDA16BCEE7E26A0B498A4206D0E16209\n"
+":402EC0006E7028702046FEF729FAF8BD69786E7022292870204602D0FEF7BCFBF8BDFEF791FBF8BD00E800FE0000FFFF70B50026044640340546A6706178282029290ED019\n"
+":402F000061782A290AD160702220286302212846FFF7C2FD26702846FEF774FB70BD60702120286301212846FFF7B6FD26702846FEF790FB70BD0000F7B5044600680E46DA\n"
+":402F40008069C043C0062CD420272546403520688069C04380060FD5701CF8D0002E05D0FEF77AF80299401AB042F0D96F700020A87028700320FEBD21681020C861206835\n"
+":402F8000C7612046FFF7E6FD20684168064A11404160042060646F700020A87028700120FEBD0020FEBD000000E800FEF8B50546044640352878012816D001202870C80616\n"
+":402FC0000026002812DAD00610D521681020C861606C04210843606412212046FFF788FD2046FFF7B7FD3FE00220F8BD080634D5500632D520680168402291430160608DF7\n"
+":40300000002825D0206840688105608D890DFF2803D9FF202085930403E0608D012320855B060096208DC2B2204600F079F9608D218D401A6085687822282068016804D09A\n"
+":4030400001229203114301600EE00122D203F9E740212046FFF7CCFD06E0880604D5900602D52046FFF75AFE2E700020F8BD0000F8B5074604464037387815460E46012873\n"
+":4030800010D001203870F0060ED5E8060CD521681020C861606C0421084360642046FFF759FD5BE00220F8BD700708D5680706D52068416A606A421C6262017009E0B0074B\n"
+":4030C0000ED5A8070CD5606A411C6162216800788862208D401E2085608D401E60853DE02C4A30062FD568062DD5208D002825D1608D002822D0206840688105608D890D60\n"
+":40310000FF2806D9FF220020228501231B06009010E0608D2085E06A904205D000200090E36A208DC2B205E000200090208D0123C2B25B06204600F0F3F80FE020684068A0\n"
+":40314000800123D506E0700608D5680606D5608D00280ED040212046FFF74AFDB00605D5A80603D531462046FFF7D8FD00203870F8BD206841688901F0D4E16A914205D1AF\n"
+":4031800041680122920311434160E7E72046FFF715FEE3E70000FFFF10B5044640342378012B15D001232370CB0618D5D30616D5617821290ED0C16B0968496810220029A2\n"
+":4031C0000AD00168CA61416C04221143416414E0022010BD816BEFE70068C2610DE00B0705D5130703D500680821C16105E08B0603D5920601D5FFF705FE0020207010BDB5\n"
+":40320000F8B5054604464035287816460F46012811D0012028704149F8062DD5F0062BD5628D1020002A08D02168C861606C04210843606467E00220F8BDE36A012252068A\n"
+":40324000934202D0E36A934202D16A78282A08D0E26A8A4202D06978292907D02168C86151E039462046FFF729FD4CE02168C8612046FFF76FFC43E0780719D5700717D536\n"
+":40328000608D002820680BD0426A606A431C63620270208D401E2085608D401E608500E0406A608D00282ED1E06A884228D12AE0380706D5300704D539462046FFF75BFC99\n"
+":4032C00021E0B8071FD5B0071DD5608D00280CD0606A411C6162216800788862608D401E6085208D401E20850DE0216862208862E06A01210906884202D0E06A002802D18D\n"
+":403300002046FFF7F3FDB80605D5B00603D539462046FFF777FD00202870F8BD0000FFFF70B50568049C68688905890D1204044E11431943304021430143696070BD000015\n"
+":40334000009800FCF8B51C4617460E46054611E0601C0FD0002C05D0FDF77EFE0699401AA04207D92020403568700020A87028700320F8BD286881693046884304D0002052\n"
+":40338000B842E5D00020F8BD0120F9E770B516460D4604461AE0324629462046FFF7CCFD002801D0012070BD002D04D0FDF754FE801BA8420AD9616C2020014361644034E4\n"
+":4033C00060700020A0702070032070BD20688069C0438006DFD4002070BD70B516460D4604461CE0324629462046FFF7A5FD002801D0012070BD681C11D0002D04D0FDF753\n"
+":403400002BFE801BA8420AD9616C202001436164403460700020A0702070032070BD20688069C0438007DDD4002070BD94B000206946088710A908801390F8480F90002013\n"
+":4034400001251290ED03F6A001F0F2FAFC4C002202212046FDF7FAFD012211462046FDF7F5FD012003F040FB002201212046FDF7EDFD012003F038FB012202212046FDF7BF\n"
+":40348000E5FD012003F030FBC8210120019100900223EC4A0021782002F078FFEA4E040004D0EAA001F0C4FA347101E000203071E44C7822A41FE188EDA001F0B9FAF8484B\n"
+":4034C0001190E048801F807801287BD1F549F6A001F0AEFADA4C002202212046FDF7B6FD012211462046FDF7B1FD012003F0FCFA002201212046FDF7A9FD012003F0F4FA40\n"
+":40350000012202212046FDF7A1FD012003F0ECFA0020694608870EA9E94801F053FD002805D0E84ADF49E8A001F082FA48E16846008FDB4CA04203D1EAA001F079FA3FE12F\n"
+":40354000F04AF1A00F9901F073FAD54869460887FD48119902F090F90020694608870EA9D74801F02FFD00200190129800282AD02F46F64920378F427ED9481C441B2421AC\n"
+":4035800002A8FDF764F8290A684601724572DD4901982246091802A80230FDF73FF87D2040010090A01C83B202AA7821E848FDF729FF07007AD0E648FDF754FE3B46E54A52\n"
+":4035C0000090C7E01FE1002400200B900C900D9020460A21484341190A0A08AB1A735973C8490A2241180BA80230FDF717F87D20400100900C230BAA7821D548FDF702FF6B\n"
+":40360000070008D0D248FDF72DFE00903B462246A449D1A0A0E0641C652CD5D322460A204243FD208000824223D0871A3946D8A001F0FEF9B91C0BA8FDF709F8FD2080005D\n"
+":40364000C11B4819030A08AA13735073AD483A4609180BA80230FCF7E1FF7D204001BF1C0090BBB20BAA7821B948FDF7CBFE0700C8D102216A4600E01EE0914C11872046C9\n"
+":4036800002F0FAF800206A4610870EA9204601F099FC012003F028FA01201290FD20800029188DB20199081804E0FFE701250198ED030019019055E0019C0F982034844296\n"
+":4036C00025D30199441A242102A8FCF7C0FF290A6846017245728B4801992246411802A80230FCF79BFF7D204001A41C0090A3B202AA78219648FDF785FE040036D0944894\n"
+":40370000FDF7B0FD934A23461832009022E0242102A8FCF79CFF290A684601724572794801992022411802A80230FCF777FF7D2040010090222302AA78218548FDF762FEEA\n"
+":40374000019000280BD08248FDF78CFD814A019B00902E3253499EA001F06AF930E0BDB2204601940F99884200D2FEE610A8002404800146744801F025FC10A80188A24AA5\n"
+":40378000A2A001F055F9002013900EA9062001F019FC2146A7A001F04BF94149684601874748119902F068F8012003F09DF901214902A74802F060F80321A64802F05CF80C\n"
+":4037C000914813990191009010A8624A038856323449A1A001F02CF901F012FE00F03EFAABA001F025F9AF4CC821206803F0C8F91448801F8178417010218170002181804B\n"
+":40380000206803F097F90F4CA41FA078092804D10B4F00220221384646E15DE1A80D0100415031333032205468726561642043726561746564202E2E2E200A0D0000000081\n"
+":403840000004005096000020502C00202041503133303220495350202D204572726F7220434849502049442052656164200A0D004953502043484950204944203D203078E2\n"
+":403880002530347820616E6420536C6176652041646472203D20307825303278200A0D00FFFF000000140208257320456E746572656420546872656164202E2E200A0D00DD\n"
+":4038C0000260000027040000257328256429204572726F7220696E20493243202121200A0D0000000A0D20536B697070696E6720426F6F742044617461202E2E2E200A0D86\n"
+":4039000000000000580601080A20312E20496E697469616C20426F6F7420446174612053697A65203D2030782530347820426173652041646472657373203D203078253083\n"
+":403940003878200A0D00000052F00000FF9F0000FC0D00203B0500000A0D25733A2025642E204661696C656420746F206C6F616420706C6C5F696E69745F64617461202D6E\n"
+":4039800020256420307825303878200A0D2000002057726974696E672052656D61696E696E6720504C4C202D20307825303478204279746573202D205772697474656E20BD\n"
+":4039C000307825303478204279746573200A0D000A0D25733A25643A204661696C656420746F206C6F6164206932635F626F6F745F64617461202D20256420307825303877\n"
+":403A000078200A0D20000000F92800000A0D20426F6F74204441544120435243203D20307825303478203C3D3E20307825303478200A0D000A0D20426F6F74205374617415\n"
+":403A40007573203D20307825303478200A0D00001E5000000C1000000A0D20257328293A256420435243203D20307825303478203D3D203078253034782C2020535441546B\n"
+":403A80005553203D20307825303478200A0D0000537461746520636F6D706C6574650A0D0000000084000020FDF7D0FA012211463846FDF7CBFA022003F016F80020504F7B\n"
+":403AC000B071C821386803F05BF8A07860701220A070386803F02EF8A07802280DD10020474FF071C821386803F04AF8A07860701020A070386803F01DF8A07803280DD10D\n"
+":403B000000203F4F3072C821386803F039F8A07860701020A070386803F00CF8A07804280ED101F047FD364F7072C821386803F027F8A07860701020A070386802F0FAFFBC\n"
+":403B4000A07805280ED101F063FA2D4F7074C821386803F015F8A07860701020A070386802F0E8FFA07806281CD100200121254A00900191137A51887820121D02F006FC22\n"
+":403B8000070002D020A000F053FFF7741C4FC821386802F0F5FFA07860701020A070386802F0C8FFA078072813D11FA000F040FF022002F099FF0020114F7075C8213868B1\n"
+":403BC00002F0DEFFA07860701120A070386802F0B1FFA078082800D073E41AA000F028FF0020074FB075C821386802F0C9FFA07860701020A070386802F09CFF61E40000D3\n"
+":403C00008400002014190020204572726F722052656769737465722052656164204572726F72200A0D00000020506F776572696E6720446F776E20495350202E2E2E200A04\n"
+":403C40000D0000002057616B696E6720557020495350202E2E2E200A0D00000010B508210148FDF7EFF910BD00040050F0B5274887B0C16A01242143C162C16A214005916C\n"
+":403C8000C26A02210A43C262C06A002508400590202000900195694602951D48FDF710F91020052703263F07009001946946039602943846FDF704F9019400966946144897\n"
+":403CC00003960294FDF7FCF8012210213846FDF7BDF9002202210E48FDF7B8F9012211460B48FDF7B3F9A00200900A480190694602953846FDF7E4F8002203210720FDF77A\n"
+":403D0000A7FD0720FDF79AFD07B0F0BD00100240000400500000111010B512481049016011494160842181600121C1600021016141618161C1610162FDF796FA00280BD151\n"
+":403D400000210848FDF78EF9002805D100210548FDF7ADF9002801D0FCF7ACFE10BD000000540040B00D00202A12B00010B511480F490160104941600021816001614161BA\n"
+":403D800081610122C161C2600162FDF76DFA00280BD100210748FDF765F9002805D100210448FDF784F9002801D0FCF783FE10BD00780040FC0D0020330F600010B50F4881\n"
+":403DC0000D490160FF21053141600021816002220261C16001224261C161016252024162826181620721C162FEF72AFA002801D0FCF760FE10BD000000300140480E002001\n"
+":403E000010B5164A164886B0910706C02021016000241E21846041600838FEF7FCFB002814D1049404A90E480594FEF797FA00280CD16020009004200190039000226946C0\n"
+":403E400002940748FEF77FFB002801D0FCF732FE0348FEF761FB06B010BD000055D00000A00E002010B50C480A490160E1214902416000218160C16001618161C1610C224E\n"
+":403E8000016242614162FEF7A9FC002801D0FCF711FE10BD00440040D80E002010B50CA000F0C6FD0F480E490160FF21813141607F218160C160012149020161FEF77DFDE7\n"
+":403EC000002801D0FCF7F6FD07A000F0B1FD10BD20494E49542057574447200A0D000000002C0040480F002020494E495420575744472053554343455353200A0D000000ED\n"
+":403F0000704700008307FF22DB0E9A408907090E994000280BDA0007000F0838830808489B001818C36993430B43C3617047830804489B001B181868904308431860704736\n"
+":403F400000ED00E000E400E0BFF34F8F04490348C860BFF34F8F00BFFDE700000400FA0500ED00E038B50D461A494418206800902346194A19491AA000F05AFDE8430004E8\n"
+":403F8000284320602068144A00902346521D134922A000F04DFD2E4CA069C007FCD10E4A0E490D322BA000F043FDA069800702D50220A06105E0084A084914322AA000F05E\n"
+":403FC00037FD4F22120105492EA000F031FD002038BD00000000F81FD904000014830008202D2D2D20204265666F7265202573282564292041742041646472657373203050\n"
+":4040000078253038782056616C7565203D20307825303878202D2D2D200A0D00202D2D2D202573282564292041742041646472657373203078253038782056616C756520E0\n"
+":404040003D20307825303878202D2D2D200A0D0000200240202D2D2D20257328256429202D2D2D200A0D0000202D2D2D204552524F52202D20257328256429202D2D2D20E8\n"
+":404080000A0D0000202D2D2D205355434345535320257328256429202D2D2D200A0D000070B517490023CA681206120F18D18A6B154CD500134A02D51268224009E08E6B80\n"
+":4040C00001252D072E438E6312688E6B2240AE438E63A24204D103218903884200D101230A48016849084900194301600068C007C00F984201D0012070BD002070BD0000CF\n"
+":404100000010024000700040001800000020024070B512A000F08CFC154D28680168490849000160286800248462286844624B2149011048FCF78BFA0F4805210482818103\n"
+":4041400041818471FF210171417129680A6801231A430A6081784170847070BD524553455420534C41564520493243200A0D0000B00D00205C0F00206000002010B5024861\n"
+":40418000FDF7FDFF10BD0000480E00207047000030A000F04DFC0025344C0426A078042801D1FFF7B5FFA289002A04D0A078082805D00C2803D0A078002802D010E060705E\n"
+":4041C000A5706281A58165700A20A07028492948FDF768FA002803D027A000F029FC2EE0A0780C2804D008282DD1A08900282AD11E4B61890C331A1D1D4801F07BFD00281C\n"
+":4042000008D06922D200284928A000F011FC3348208111E0228A002A15D0E2812582A07860700620A07012491248FDF767FA002809D02BA000F0FCFB60780428AED0A078CC\n"
+":404240006070A670AAE70520E07009481438FEF7E1FBA3E720456E746572656420736C617665207468726561640A0D00600000205C0F0020B00D00204572726F72204F63C5\n"
+":4042800063757272656420696E2048414C5F4932435F536C6176655F526563656976655F4954200A0D0000001082000820257328256429204572726F72206F6363757265CA\n"
+":4042C00064206F6E20686F73745F6672616D65776F726B202121200A0D00000008200000204572726F72204F63637572726564206174205472616E736D6974200A0D000072\n"
+":4043000010B502F071FC10BD10B523489AB001680322D2029143C21489180160012102200391102100900491099040040B90000100240C900A946846FDF72AFD002817D126\n"
+":404340000F20159003201690179418940121199415A8FDF7E7FB00280AD1FF200B3012940D90109413940DA8FDF720FB002801D0FCF7A0FBFDF7AAFC7D21C900FCF7F4F8D1\n"
+":40438000FDF7D4FF0420FDF7C5FF03210022081FFDF75EFA1AB010BD0070004010480168821511430160C1680E4A1140C16001680D4A11400160816849084900816001681B\n"
+":4043C0000122920491430160C168FD2212049143C160002101610549C003886070470000001002400C40FF88F6FFF6FE00ED00E010B50248FDF7FDFF10BD0000A00E0020D4\n"
+":4044000010B50248FDF7F5FF10BD0000DC180020F0B502680124A407124D134E134FA04205D0A84203D0B04201D0B84204D11346702293434A681A43A04205D0A84203D059\n"
+":40444000B04201D0B84204D103231B029A43CB681A4302608A68C2620968816201214161F0BD000000040040000801400014014030B5026A520852000262026A4568836975\n"
+":404480007024A3439C080B68A40023430224A2438C6845601443836149684163046230BD30B5026A10239A430262036A4568826973242402A2430C68240214432022934365\n"
+":4044C0008A68456012011A43846149688163026230BD30B5026AFF2301339A430262026A4568C3697024A3439C080B68A400234301246402A2438C68456024021443C36178\n"
+":404500004968C163046230BD30B5026A01231B039A430262036A4568C26973242402A2430C68240214430122520393438A68456012031A43C46149680164026230BD10B5FF\n"
+":40454000818CC90707D001684A6801235B049A43836A1A434A60818C890707D501684A6801231B049A43C36A1A434A60818C490707D501684A6801239B049A43036B1A4371\n"
+":404580004A60818C090707D501684A680123DB039A43436B1A434A60818CC90607D50268916801231B039943836B19439160818C890607D501688A6801235B039A43C36BD5\n"
+":4045C0001A438A60818C490612D503685A6801210905046C8A4322435A60026C8A4207D10268516803235B059943436C19435160818C090607D501684A680123DB04806C23\n"
+":404600009A4302434A6010BDF8B500260446C666FCF722FD054620680068124F000709D501212B46002249052046009700F0BFF900280DD12068006840070BD501212B46AD\n"
+":40464000002289052046009700F0B1F9002801D00320F8BD202060346072A07226720020F8BD0000FFFFFF0110B5806A0022014640314A834A82FEF70DF810BD01680A683B\n"
+":40468000FF2321339A430A6001688A68520852008A60202160308172704770B50246403201466031938B8D7A0C460168222D05D08869082210438861022070BD496A012696\n"
+":4046C0008568360389B2B54202D10569002D0BD01940436D5D1C45651970518B491E0904090C518307D015E0456D19402980416D891C4165F1E701680A68FF2321339A43AC\n"
+":404700000A6001688A68520852008A602021A172FEF7CEF8002070BDFEB50446016880682269E36910436269102700261A4310430A683546784B1A4002430A602068416888\n"
+":40474000032212039143E26811434160734A2168A069914201D0226A10438A680B231B029A4302438A606E4A20686E4990420CD1C8688007800F06D0012843D002283FD09A\n"
+":40478000032826D124E0012723E0674A90420AD1C8680C21084031D0042833D008282FD00C2816D114E0614A904227D0604A904224D05A4A90420CD1C968032080020140E9\n"
+":4047C0001CD01015091A1DD0091A19D0814200D108270220FDF740F80190504B514922684039D81300929A4235D1002F0CD0022F0DD0042F12D0082F1CD113E00027E8E718\n"
+":404800000227E6E70427E4E7FDF766FA08E00868C00601D5474805E0474803E0FDF77CFA002873D0626851005118814202D81103814201D2012569E0010E060250080023BD\n"
+":4048400030185941FBF7BAFE032109023B4A411A914259D9EEE7E26982422DD13B0000F0F7F80906080B24192424241F2400019812E0FDF741FA0FE008686168C00602D50F\n"
+":4048800048082F4A01E02F4A48088018FBF76CFE86B20BE0FDF740FA616840004A08F4E76168012248081204EFE70125310909013007400F084327E03B0000F0C9F80907A4\n"
+":4048C0000A0D061D060606290600B3E7FDF704FA14E0FDF711FA11E008686168C00602D54A08144801E014484A081018FBF73CFE81B20098C16009E0FDF70EFA61684A087A\n"
+":404900008018FBF731FE80B22168C8602846FEBD61684A08E9E70000F369FFEF00480040003801404010024000440040004C00400050004000093D000024F400FFFC0F00E2\n"
+":4049400000127A000048E8016921095C212901D00220704702464032518A002912D0012381681B03994202D10169002915D0C16C4B1CC364006809788162508A401E508215\n"
+":404980000020704701680A6880239A430A6000680168402211430160F2E7C16C03680988C905C90D9962C16C891CC164E5E7FFB581B017460E4604460A9D1DE0681C1BD01C\n"
+":4049C000002D05D0FCF748FB0499401AA84213D920680168FF22A1329143016020688168490849008160202060346072A07200202072032005B0F0BD2068C16930468843CA\n"
+":404A000004D00020B842D9D00020F3E70120F9E710B50248FDF740FE10BD0000D80E002010B50248FDF7BAFF10BD0000480F00200FB410B503A9044B044A029800F024F859\n"
+":404A400010BC08BC04B01847D95C0008A400002030B47446641E2578641CAB4200D21D46635D5B00E31830BC184702E008C8121F08C1002AFAD170477047002001E001C100\n"
+":404A8000121F002AFBD17047FFB591B00F460546002606E025280AD0149A139990476D1C761C28780028F5D1304615B0F0BD002400940121F34A029400E004436D1C2B788E\n"
+":404AC0000846203B98401042F7D128782A280ED0022128780246303A092A15D8009A0A235A43303A80180C436D1C0090F1E701CF0090002805DA01204003044300984042E4\n"
+":404B00000090022004436D1C28782E2815D10420044368786D1C2A280AD101CF6D1C02900BE002990A225143303940186D1C02902878014630390929F3D928786C2810D0A7\n"
+":404B400006DC4C281AD068280ED06A2817D104E0742813D07A2812D110E00120400504430CE00121090501E0032109050C436978814203D10120000524186D1C6D1C28787E\n"
+":404B800003906E281ED00CDC632831D004DC00288AD0582811D1B2E064287BD069280CD178E073282DD004DC6F2870D0702804D1A7E075286CD078286BD0149A139990474F\n"
+":404BC000761C62E06002400F022807D003280AD0042838680AD006603F1D56E03868F11706604160F8E738680680F5E70670F3E73878694608740020487404A80390012095\n"
+":404C000003E0386803900020C0433F1D61070FD5002101E00199491C029A0191914213DA8142F7DB019A0399895C0029F2D10BE0002101E00199491C01918142FADB019A56\n"
+":404C40000399895C0029F5D101990098139A401A00902146149B00F03BF901998019461807E0039803990078491C0391149A139990470198401E0190401CF2D12146149BB3\n"
+":404C8000139A009800F014F986196D1C09E741E033E034E00A200021049005916002410F022905D001CFC2179446032905D007E0FF1DFF08FF0003CF06E000B2C217944681\n"
+":404CC000042902D140B2C1178C4600226146944506DA0A460021404291418C462D2102E0210504D52B216A461176012103E0E10701D02021F7E7019154E00A200BE0102065\n"
+":404D000009E01020049000210420044308200591029003E008200021059104906002410F022905D001CF00229446032906D006E0FF1DFF08FF0003CF8C4603E080B2042926\n"
+":404D400000D1C0B20021019121072BD50399702906D0049A1021059B4A401A4305D00EE040216A461176012108E06146014306D030216A4611760399517602210191049A50\n"
+":404D80000821059B4A401A430CD16146014301D1610707D530216A461176012101910299491E02910399582904D037A103910FA90F910DE039A1F9E76146059B049AFBF761\n"
+":404DC000FDFB039B8C469B5C0F9A521E0F92137061460143F0D10F9807A9081A20300390600704D5012000048443029801E0012002900399884201DD401A00E000204118BE\n"
+":404E00000290019809180098401A0090E00306D42146149B139A009800F05AF886190020049008E006A9085C149A139990470498401C761C049001998842F3DBE0030CD5B7\n"
+":404E40002146149B139A009800F042F8861904E0149A302013999047761C0299481E02900029F5DC08E00F980F990078491C0F91149A13999047761C0399481E0390002955\n"
+":404E8000F1DCFBE60928010030313233343536373839616263646566000000003031323334353637383941424344454600000000F8B5044600251E461746880404D405E0E8\n"
+":404EC00039462020B0476D1C641EF9D52846F8BDFFB50446002581B01E46C80301D5302700E02027880404D505E038460399B0476D1C641EF9D5284605B0F0BD70B50D46AD\n"
+":404F0000002812D001780446432903D015A0FFF78FFD0AE00221A01C00F0C8FE21790246914204D017A0FFF783FD022070BD22480178052901D0214A1170617801706188A9\n"
+":404F40000802090A084381B2012901D9012100E000214018801C2880194901200870002070BD000020496E76616C6964205369676E617475726520307825303278202121A9\n"
+":404F8000200A0D0020476976656E2020435243203D2030782530327820213D2043616C63756C6174656420435243203D20307825303278200A0D0000650000206400002079\n"
+":404FC000660000207CB50546C8220120019200900A4602232946782001F0D8F9041E04D0294602A0FFF724FD20467CBD204572726F722052656164696E6720726567697348\n"
+":40500000746572202578202121200A0D00000000FEB5CF4E0021B08D6A4691800D22920103465343CC4CCB4FCB4A1C19D2583B46396825791B79914201D1AB4204D0C7A078\n"
+":405040000095FFF7F5FC80E1012B0BD1B968E268914202DCA368994206DAD0A0A368FFF7E7FC72E10920FEBD7821F0854843841920460A467C30B749FBF7D0FACD4BE26F21\n"
+":40508000B348D11A40309A4277D021DCCA48B04D111A2035824265D00FDCC849501A8A4249D005DCC64810182DD0012826D136E00A287AD00E2821D160E00227C14801291D\n"
+":4050C00074D0022973D0072972D0082916D13DE09F4D603523296CD008DC01296AD0072969D0082968D00C2908D1F2E025296ED029296DD02C296CD030296BD0B249B3A0C6\n"
+":40510000FFF796FCAEE7803420790102684681800720000300F0B0FB2079687413E1803420794006410C68468180AE4800F0A4FB2079A87407E18034207901026846818075\n"
+":40514000A94800F099FB2079E874FCE080342079010268468180A4480A3000F08DFB20792875F0E0803420790102684681809F4800F082FB20796875E5E075E0803464212A\n"
+":405180006068FBF707FA0007050C08036421FBF701FA0105090D2943684681809248001D00F06AFBA088F086CDE006E03FE020E014E078E05FE092E097E0803460680028B4\n"
+":4051C00009D08B496846818051200002B7E05FE0A2E08EE06BE086490839F3E78034A08881B268468180834800F046FBA0887087A9E001A90646FFF7E5FE80346068002810\n"
+":4052000002D001280BD104E0694688883843888005E068468088C107C90F6846818068468188304600F028FB207928778BE001A90646FFF7C7FE80346068002802D0012854\n"
+":405240000AD105E06946888801210843694602E0694688883840888068468188304600F00BFB207968776EE0803421798177606800F064FB67E0817F012903D08034A1880B\n"
+":40528000018460E08034A188018400F03BFC5AE0807F022859D1803460687066A978606800F0D8FB4FE080342079A8704BE080345148616800F010FB50486168FBF76AF98F\n"
+":4052C0000006010C4C48801F00F0D6FA6068F06639E080346068306400F0D2FC02E080346068706400F04CFC2DE080346068B064F8E780346068072801DD083800E00830DC\n"
+":40530000000369468880684681883748801D00F0B3FA6068306716E080346168022914D8334E2736002903D18021304600F0A4FA6068022801D0002803D18121304600F013\n"
+":405340009BFA207928760020FEBD0220FEBD000014190020642D0020588400080A0D204374726C2049442030782530387820213D20307825303878206F72204374726C2060\n"
+":40538000547970652030782530327820213D20307825303278200A0D000000000A0A0D202564203E20256420203C202564200A0A0D00000001099A001309980002099800D6\n"
+":4053C00000F767FF0C1000000E14020825733A20756E6B6E6F776E206374726C2069642E0A0D0000DA52000006700000065000005F1100000A5100002820000040420F0063\n"
+":40540000F0B585B000206946039008810A240125042303AAD82178200095019400F0B6FF34A00399FFF704FB39483A4F007C002801D0142100E01221384600F01DFA3548F1\n"
+":4054400001211C3800F018FA324830211E3800F013FA012605217603C901304600F00CFAFF21E131B01C00F007FA2A480F218902103800F001FA2849284800F0FDF931460D\n"
+":40548000701000F0F9F9042303AA682178200095019400F07BFF22A00399FFF7C9FA02A90620FFF78FFD6846018926A0FFF7C0FA02A92B48FFF786FD6846018929A0FFF75B\n"
+":4054C000B7FA274802A9801CFFF77CFD684601892BA0FFF7ADFA02A93846FFF773FD684601892EA0FFF7A4FA00F066FC002005B0F0BD00000A0D204C696E652074696D65AB\n"
+":40550000203D20307825303478200A0D000000003419002030200000FF0F0000465000000A0D2048494E46204D495049204672657175656E6379203D2030782530347820EA\n"
+":405540000A0D00000A0D20426F6F7420537461747573203D20307825303478200A0D000038600000204146204D49504920436C6B204D53423A203078253034780A0D000064\n"
+":40558000204146204D49504920436C6B204C53423A203078253034780A0D0000204D495049204C616E6573203A203078253034780A0D0000FEB5704C704F20462038028D89\n"
+":4055C00018204243BE68FD6839683869237C7F68002BBC4630D06A4B9A582346203B1F8D18235F439646664B31E0DF88BE4235D0D8889A8800920290634601967246614829\n"
+":40560000FFF716FA16E059898D4202D1998988422AD05DA00CE0D9898D4223D859898D4220D3198A884202D8998988421CD25EA0FFF7FEF90220FEBD514B90339A584E4B78\n"
+":405640009646203B1F8D18235F434D4B9033FB187145CDD19F88BC45CAD1C6E7197A0129D9D1D0E759A0E3E74348142243491438FAF7D4FF404D5E48203DE968C1421BD12A\n"
+":4056800030215C4800F0F8F80F262969F6017F228F1B0123D2055848B1425CD0574E0FDC8F1B17D0B7420FD12D2669693601891B15D0F0291ED118E051A0FFF7B9F907E0F3\n"
+":4056C000BE1B4ED0202E52D057A06A69FFF7B0F90920FEBDC26002616B84002009E05C49C26001616B84237004E0C26002616B84022020703F480121801C00F0BDF80124B5\n"
+":40570000640366102146304600F0B6F8287E0006010C38480E3000F0AFF8288A81B2204600F0AAF8A88A81B2A01C00F0A5F800F0A7FA00F025FA10482030807F00F0FEF84B\n"
+":4057400044A06A692969FFF773F92146304600F093F80020FEBD3E49C26001616B840320C7E73B49C26001616B840420C1E7C26002616B840520BCE734190020502D002077\n"
+":40578000388300084C150208496E76616C6964204672616D652052617465202D2044495343200A0D00000000496E76616C6964204672616D652052617465202D20434F4EAB\n"
+":4057C00054206D696E200A0D00000000496E76616C6964204672616D652052617465202D20434F4E54206D6178200A0D00000000ABA6A9A6122000009000002080020000FA\n"
+":405800005468697320666F726D617420307825303878206973206E6F7420737570706F72746564200A0D000020576964746820256420486569676874202564206973206E3B\n"
+":405840006F7420737570706F72746564200A0D00BE9FAA3F204368616E676564204672616D652053697A6520746F2025642078202564200A0D0000003EB5044668460181A1\n"
+":40588000C821002001910090022302AA2146782000F07CFD030005D068460289214602A0FFF7C6F800203EBD4572726F722057726974696E6720726567202578203D2030C5\n"
+":4058C00078253034782020657272203D20307825303278200A0D00003EB505460291C821002001910090042302AA2946782000F04DFD040007D00346294604A0029AFFF772\n"
+":4059000097F820463EBD00203EBD00004572726F722057726974696E6720726567202578203D203078253034782020657272203D20307825303278200A0D0000FEB5074629\n"
+":4059400000253948394C3A4E0295002F04D0022F02D0012F53D065E02C21FFF78DFF40212046FFF789FF304800213430FFF784FF2D4800213630FFF77FFF01242A48A40307\n"
+":4059800021463830FFF778FF274821463A30FFF773FF284C022F05D1204660308178606E00F058F823482449203000780300FFF74FF806041E04202224081D48001FFFF797\n"
+":4059C0008BFFE06E02900A200190042302AA31460095782000F0DAFC1848E16EFAF7C4FD0006010C1248801FFFF746FF1AE01449E3E71449E1E71449DFE71449DDE72021D2\n"
+":405A0000FFF73AFF00212046FFF736FF104C08482146001FFFF760FF21463046FFF75CFF00F070F80020FEBD02500000E452000028200000141900201534000040420F00A6\n"
+":405A4000102700004D3A0000CB660000828B0000B08F0600F8B50C462749884249D80104264F0E0EC5B269463846FFF7ABFA694608887911084381B23846FFF7FDFEB60842\n"
+":405A80006408301B00B269460880002800DA002008800006010C1A48FFF7EEFEAD08281B00B269460880002800DA002008800006010C1348801CFFF7DFFE301900B2694633\n"
+":405AC0000880402800DD402008800006010C0C48001DFFF7D1FE281900B269460880402800DD402008800006010C0548801DFFF7C3FE0020F8BD0000FFFF0000102000009A\n"
+":405B0000365000007FB5002419480394008C642148430A250290042302AA164901950094782000F033FC042302AA134978200195009400F02BFC01200090042303AAE82189\n"
+":405B40000195782000F022FC0C480299FAF70CFD074940398969814200D208460006010C05480838FFF788FE002004B070BD0000541900200C5000002820000040420F0083\n"
+":405B8000F8B53B48006CFAF7F2FD3A4D00908D270446FF053846E968FAF7ABFD3649FAF76BFD2146FAF7A5FDFAF7E8FD304C06B24034E68138462969FAF79BFD2E49FAF730\n"
+":405BC0005BFD0099FAF795FDFAF7D8FD05B228482582E121406C0901FAF7DCFC074601208003FF21801B6931FAF7D4FC01460120794340030F181E48A781E121806C090101\n"
+":405C0000FAF7C8FC009001208003FF21401B6931FAF7C0FC60820099484301214903081AF10F891949107A1AA082E282EA0F52195210831A6383791821838018A083E18A6A\n"
+":405C40000E48FFF719FE0D48618B801CFFF714FE0A48218B001DFFF70FFE0848A18B801DFFF70AFE0A2000F03FFF0020F8BD000014190020900000200000C842042000004F\n"
+":405C800009481921027849012038012A06D1026C1346FF3B0D3B01D1521C0264026C8A4200D9016400207047341900200346002010B50246002B05D0002903D04B2464014A\n"
+":405CC000A14205D9002010BD9C5C6040521C92B28A42F9D310BD000013B5044B012269460348FCF7E6FD00981CBD0000FFFF0000D80E0020F8B51D461446002825D0002918\n"
+":405D000023D0002C21D04B267601052903D1114A1278002A09D0224600F08AFF07000ED00DA0FEF785FE3846F8BD1946FFF7E6F8070001D012A0F4E70020208002E0208881\n"
+":405D4000B04202D82888B04201D90220F8BD0020F8BD0000660000204572726F72206F6363757272656420696E2070726F636573735F636F6D6D616E64200A0D000000009D\n"
+":405D80004572726F72206F6363757272656420696E20616E616C797A655F6C656E6774685F7061636B6574200A0D0000EFF30580002800D001207047F0B5304A0024547426\n"
+":405DC0000A2090741020D0741075012513465575DC20203BD8866A20186415762848588721461177104651772030FF26817739360684064620363176224F5F661827B77046\n"
+":405E00005964214FDF66996408271F670B2711703F045F626F038781C182AB03038341838383C381038241828782F576174E40380D21234689014B437821F7586143091893\n"
+":405E4000CF679B191F7980310F70012F12D01F7A0F72DB68CB60641C282CE9D3167C0C4C0521FF22C901E132C4604B2310302EC00020F0BD1B694B60EDE70000341900203B\n"
+":405E80009411000080800000E02202005884000855595659002808D00C490D4A8978002905D00320D0750020704702207047417803780802184341BA06480023022903D032\n"
+":405EC00001210174D375EEE70374FBE790000020502C00203419002070B5104CA078102808D00F49112814D0122814D001208871002070BD0B4D0121286800F041FE0028D8\n"
+":405F000001D0012070BD0920A070286800F012FEEEE70320EBE70820E9E7000090000020502C002084000020FEB500220446684602811646002907D003200880002C41D033\n"
+":405F40002578FF2D02D004E00220FEBD1E48057825701E498878FF280CD00F23002822D0122820D0F027112820D0C00621D46770A27022E0164869460881012000900190AF\n"
+":405F8000022302AA0621782000F000FA060003D010A0FEF74DFD15E068460089000A60706846008908E06370F12005E06370A77003E08888010A6170A0700E48405D0028CD\n"
+":405FC00000D006463046FEBD6400002090000020F10F0000204572726F722052656769737465722052656164204572726F72200A0D000000502C002030B500290AD0244BA1\n"
+":406000009B78102B0CD02348D90605D401210174084630BD022030BD03210174084630BD0025282802D30D800A2030BD78235843194BC318184680300478012C02D0022C44\n"
+":4060400015D001E009240C80002A1ED0D96F090E1170D96F090C5170D96F090A9170D96FD170017811710178012903D00DE00D80092030BD4168090E51714168090C917163\n"
+":406080008188090AD17100791072002030BD000090000020502C00201419002070B50024002905D0282805D3002008800A2070BD022070BD0D239B01344D584343191E7949\n"
+":4060C000012E02D0022E05D101E0152601E09E890A360E80002A56D02958090E11702958090C5170295A090A9170285CD070187910711879012802D0022844D12CE09868A3\n"
+":40610000000E50719868000C90711889000AD071187A1072D868000E5072D868000C90729889000AD072187B10731869000E50731869000C9073188A000AD073187C1074B9\n"
+":406140005869000E50745869000C9074988A000AD074187D107516E0187A5071D868000E9071D868000CD0719889000A1072187B507205E0181920301119007C8872641C84\n"
+":40618000D868A042F6D8002070BD000058840008F8B500271646002905D0282805D3002008800A20F8BD0220F8BD0D22920150431E4A851828792C46A034012802D00228A4\n"
+":4061C00009D11CE0207E032801D0232002E0A07E400124300880002E25D02946983120223046FAF71BFA3046217E2030017000214170617E8170217E032905D013E0A8897A\n"
+":406200000A3008800920F8BDA17EC17008E078012918801920222430BB31FAF7FFF97F1CA07EB842F3DC0020F8BD0000588400087CB50024054600291ED002200880002DFF\n"
+":4062400018D0C82101200191009002230B4A0021782000F09BF8040004D009A0FEF7E8FB0D484470054E0DA0B61FF188FEF7E0FBF088288020467CBD02207CBD9600002004\n"
+":406280004572726F72204348495020494420526561640A0D00000000502C002043484950204944203D20307825303478200A0D0030B500290AD0334B18241D7C0023444381\n"
+":4062C000002D28D0062828D22F482BE0022030BD0D2500E015250D80002A51D00159090E11700159090C5170015B090A9170005DD0709888000A107118795071D888000A06\n"
+":4063000090719879D071187A1072187A01280ED0022835D116E0062802D30B800A2030BD1948903023181D7A012DD3D1D0E75889000A5072987A90729889000AD072187B55\n"
+":4063400010731DE05889000A5072987A90729889000AD072187B1073D889000A5073987B9073188A000AD073187C1074588A000A5074987C9074988A000AD074187D1075BC\n"
+":40638000002030BD3419002038830008FFB585B01D460E980F9B14460E4601280DD8042D0BD8002C09D0604A00215164320AF1B2002872D0012860D102E0022009B0F0BDA2\n"
+":4063C0006846027141710093022301AA56480599FBF718F807001FD05348FAF743FF0446059800903346224639465048FEF720FB4D4D28680168490849000160012000F047\n"
+":4064000073FB286801680122114301601EE0042C7ED0032F7CD081E000200190029003904348092101702B4601AA3F480599FAF7ABFF07000DD03C48FAF714FF044600969E\n"
+":40644000024639463B48059BFEF7F2FA202C67D0DDE700F0E8FB364E02E0012000F044FB30780928F9D0012D04D0022D06D0042D58D108E068460079207053E068468088F6\n"
+":4064800040BA20804EE00198694600BA000AC97900020843206045E0FFE720686C4622716171012D04D0022D04D0042D0DD105E0A0710AE0020AA271E07106E0020EA271E2\n"
+":4064C000020CE271020A227260720093AB1C01AA15480599FAF796FF040023D01248FAF7C1FE05460598009033462A4621461248FEF79EFA0C4E306801684908490001603D\n"
+":40650000012000F0F1FA306801680122114300E006E00160202D03D0032C01D005204DE707204BE7002049E7FC0D0020A01502089000002048160208F4150208F8B5114D80\n"
+":40654000114CA878002807D0122805D0112817D0082020710820F8BD0C4E0121306800F00FFB0127002805D009A0FEF761FA27710120F8BDAF70306800F0DCFA0020F8BDEE\n"
+":406580000320E6E790000020502C0020840000200A0A0A0D2053656D2057616974204661696C6564202121200A0D000070B5104C1049A078112808D00725102809D012285E\n"
+":4065C00007D0002805D04D750AE001204875082070BD094E0121306800F0D2FA002801D0072070BDA570306800F0A4FA002070BD90000020502C002084000020FEB5054658\n"
+":406600000F46002069461C460881002A0BD01F4901268B780321102B0AD01D48DA0604D486740120FEBD0220FEBD81740320FEBD012F05D0022F05D0042F05D01080F2E75C\n"
+":40664000118003E0042000E006201080002C1AD011882046F9F7FBFF280A2070657000963B4602AA294678200196FFF78FFE050004D008A0FEF7DCF92846FEBD68460089C7\n"
+":40668000010AA170E0700020FEBD000090000020502C0020204572726F722052656769737465722052656164204572726F72200A0D000000F8B504462148224E80781028BB\n"
+":4066C00007D0C00602D401207074F8BD03207074F8BD607821780002084345BA282D02D30A207074F8BDA01CF9F7BCFF00BA000A61790002144F08433860A07938710128CF\n"
+":4067000002D009207074F8BDE01DF9F7ABFF00BA000AA17A00020843B8600C480C4C85850121206800F02CFA002801D00720F8BD034805218170206800F0FCF90020F8BDFB\n"
+":4067400090000020502C0020642D00201419002084000020F8B504000AD0284E2848B17810290BD0C90605D4012141720846F8BD0220F8BD032141720846F8BD61782278D9\n"
+":40678000090211434DBA0A21062D02D341720A20F8BD1C4F0121386800F0F2F9002801D00720F8BDA01CF9F75DFF00BA010A60790902014314480160E179A279090211434B\n"
+":4067C00049BA4160617A227A0902114349BA8160E17AA27A0902114349BAC160617B227B0902114349BA0161084805850420B070386800F09FF90020F8BD00009000002039\n"
+":40680000502C002084000020502D00201419002070B50E4C0325A078102808D0C1060C4802D40121017209E00572032070BD094E0121306800F0A4F9002801D0012070BD44\n"
+":40684000A570306800F076F9002070BD90000020502C00208400002070B50F4CA078102809D0C1060D4802D40121C1710AE00321C171084670BD0A4D0121286800F080F9B3\n"
+":40688000002801D0012070BD0220A070286800F051F9002070BD000090000020502C00208400002070B50C4C0825A078112803D00A488575082070BD094E0121306800F0E8\n"
+":4068C0005FF9002801D0072070BDA570306800F031F9002070BD000090000020502C00208400002070B5224E0446B1782148102909D0C90603D40121C174084670BD0321D0\n"
+":40690000C174084670BD61782278090211431A4D49BA6980A1782972012907D0022907D0042914D00221C174084670BDE07804E02079E1780002084340BA104C686001212C\n"
+":40694000206800F01DF900280AD0072070BDE01CF9F788FE00BA000AA17900020843ECE70620B070206800F0E5F8002070BD000090000020502C002014190020840000209E\n"
+":4069800092B03F493D488860002080F3108862B6FAF7E8FEFDF7B8FCFDF764FAFDF766F9FDF7BAF9FDF7E2F9FDF72AFAFDF706FA3448C26A02210A43C262C06A324C08408B\n"
+":4069C000009008200D9001200E900320002510900F950DA92046FAF773FA002208212046FAF734FB2948C069009029480368C12228492948FEF71CF828A22BA12DA0FEF780\n"
+":406A000017F8F9F743FF1F4C40342069400002D50120FAF78FF920690121C90508432061FDF73CFA2B4C20222B486169F9F7F6FD0520A0810BA80B9500F063F8206201212C\n"
+":406A40000CA80C9500F062F8124960621422083101A8F9F7E3FD002101A800F0CDF80D49A06114221C3106A8F9F7D8FD002106A800F0C2F8E06100F03FF8FEE700040008D4\n"
+":406A800000ED00E000100240000400500020024000000140E0810008EC14020831343A30323A3438000000004665622032312032303230004275696C642044617465206123\n"
+":406AC0006E642054696D653A202573202573200A0D00000060000020BC18002001460020842900D0C81C704710B5002800D1012000F0EEFE002010BD10B500F057FF00206E\n"
+":406B000010BD10B5012000F0D5FF10BD10B5012901D0002010BD03220021012000F0DCFF040004D000231A46194601F0C9F8204610BD000038B5002405460094FFF736F97E\n"
+":406B400000280FD06946284601F046F9012801D0FF2038BD009800280DD0012007490007486008E000231A461946284601F0A8F8012800D0FF24204638BD000000ED00E0E9\n"
+":406B800038B5054600200090002D11D00024481C10D0002900D00C46FFF708F9002814D06A460021284601F051F9012815D104E0802038BD0024E443EEE7009800280ED069\n"
+":406BC000012008490007486009E0002322461946284600F0A3FF012801D0FF2038BD002038BD000000ED00E010B501F0BDF9012801D000F04DFF10BD3EB5044608200D468A\n"
+":406C0000205EFFF76BFF02A901910090208A2B4682B22168606801F07FF9012801D000203EBD02983EBD10B500F046FE002010BDFFB5044689B000276846878007821D4611\n"
+":406C400016460297002C11D00A98C4420ED02178432903D0F2A0FDF7EBFE07E0F84861780278914205D0F7A0FDF7E2FE02200DB0F0BD0A980B00C01E0390F948808807902E\n"
+":406C80000A982218F748203A0078FDF7E1FE180D2A67AAFDFCFBFAF9F8D8F7F7F7F7F7F6F5F4F3F2F1F0EFF7012802D0022804D085E201204003608029E0EB4902980A5CBE\n"
+":406CC000201882700298401C02902028F6D32021A01CFEF7EBFF029961188870CF7024203AE0012802D002281DD068E201A90020FFF79EFA002804D0DCA0FDF799FE6846E7\n"
+":406D00000782684680880102000A014361800221A01CFEF7CBFF2071677106203080D1490220087079E101A904A8FFF781FA0290002804D0CDA0FDF77BFE684607826846E3\n"
+":406D4000008A010AA170E0700221A01CFEF7AEFF2071029860710620308072E2012802D0022826D06DE20592D17F0398029181B2A01CFEF79BFF0299814207D005980A9904\n"
+":406D8000C27FC2A0C91EFDF753FE39E0E178A27808021043B24940BA8880002201A9FFF787FA40E0684681880802090A0843608081E0A21C01A90798FFF77AFA94E06946C7\n"
+":406DC0008988A01CFEF772FF69468988611888706946898802986118C87069468888001D71E0012802D0022823D02AE2D17F0398029181B2A01CFEF759FF0299814207D0E4\n"
+":406E0000ADA0FDF715FE6846878002200290C9E7E178A27808021043914940BA8880002201A9FFF73BF902900028BBD068468780B8E7A21C01A90798FFF730F954E0012827\n"
+":406E400002D002284BD0FCE1D17F0398029181B2A01CFEF72BFF0299814216D096A0FDF7E7FD68468780022002901EE0D7E1D3E1CFE1C4E1B5E166E156E18EE0E3E17AE078\n"
+":406E800076E072E06EE041E03AE0E178A27808021043734940BA8880002201A9FFF778F90290002801D068468780684680880102000A014361800221A01CFEF7F7FE20715E\n"
+":406EC000029860710620308066480178012912D002298AD068468088002886D06FE1A21C01A90798FFF754F90290002800D166E76846878063E76946898800297ED1A0E13B\n"
+":406F0000FFF71CFB57480770378056E154484088002810D070A0FDF78BFDFF20A070504841880A0AE270217103216A46918002210291478004E001A9A01CFEF7F5FF029099\n"
+":406F400069468988A01CFEF7B1FE69468988611888706946898802986118C87069468888001DF9E6FEF7B8FF6AE1FFF775FC67E1FFF74EFC64E1D17F0398029181B2A01C62\n"
+":406F8000FEF794FE0299814203D04BA0FDF750FD4FE1A01CFFF7DEFB52E1012802D002283DD00CE1D17F0398029181B2A01CFEF77DFE0299814207D03FA0FDF739FD684617\n"
+":406FC00087800220029012E0E178A27808021043234940BA8880002201A9FFF70DF80290002804D043A0FDF723FD68468780684680880102000A0143618000E00BE00221CF\n"
+":40700000A01CFEF753FE207102986071CDE06946898800297CD0022101702F80CFE078E020496E76616C6964205369676E617475726520307825303278202121200A0D000D\n"
+":4070400065000020204944203D2030782530327820213D20307825303278200A0D0000008800002066000020BC1800204572726F7220696E2047657474696E672053656EE3\n"
+":40708000736F72204944200A0D00000020435243204C656E677468203D203078253032782C206F72696720637263203D20307825303278200A0D00002043524320766572E5\n"
+":4070C000696669636174696F6E204572726F72202121200A0D0000004572726F7220696E204D435520697473656C66202121200A0D0000004572726F7220696E2047657490\n"
+":4071000074696E67204374726C200A0D0000000052E0A21C01A90798FEF76EFF0290002800D10DE7494857E0D17F0398029181B2A01CFEF7BBFD0299814200D025E7A01CBF\n"
+":40714000FFF7B8FA7CE0012802D0022839D036E0D17F0398029181B2A01CFEF7A7FD0299814202D039483C380FE0E178A27808021043374A40BAD08021791170002301AA29\n"
+":40718000FFF73CFA002804D032A0FDF751FC68468780684680880102000A014361800221A01CFEF783FD20716771062030802F480178012900D12AE7077005202880002004\n"
+":4071C00055E52348A31C017801AAC088FFF716FA02900028A5D01FA0FDF72AFC68468780AEE6D17F0398029181B2A01CFEF75EFD02998142A2D1A01CFFF774FB20E01CA0FD\n"
+":40720000FDF716FC204921A0FDF712FCF9F7D0FC16E0FFF7CBF913E0FFF744FB10E0D17F0398029181B2A01CFEF740FD0299814203D007491D48488002E0A01CFEF72AFE90\n"
+":4072400037800A48B8E7092011E50000F4700008880000204572726F7220696E205265616420495350200A0D00000000660000204657205570647420496E6974696174651C\n"
+":4072800064200A0D00000000B10B0008204669726D776172655F757064617465203D20307825303878200A0D000000000A200000F8B5134C0F46E66805462068001D00F016\n"
+":4072C00069FA681C07D1002F05D021680D48091D00F098FAF8BD2068751945602168B54204D2A06B091D00F075FAF8BD606B091D00F070FAA06A8542F7D2A562F8BD000099\n"
+":407300000C0000209C010020F8B5054600F086FA2A4CA068401CA0602068294F002803D06069002827D02CE02560A068012828D1002614207043C01900F03EFA761C072EAF\n"
+":40734000F7D31F488C3000F037FA1D48A03000F033FA1B48B43000F02FFA1948C83000F02BFA1748DC3000F027FA15488C3060631430A06305E02068E96AC06A884200D8B4\n"
+":407380002560606A401C60626864E86A2169884200D9206114214843C019291D00F032FA00F048FA6069002806D02068E96AC06A884201D200F080FAF8BD00000C000020B3\n"
+":4073C000C000002070B5114E114C18E000F014FB3068002817D000F09BFE00F01FFAF068C568281D00F0D6F9A068401EA0606068401E606000F01EFA284600F056F860684B\n"
+":407400000028E3D170BD00F083FEF8E7880100200C00002010B5026C0C46002A0CD0C1688B18C36041688B4201D2194601E00168C1602046F9F7F2F810BDF8B5856B17468A\n"
+":4074400004460026026C002A11D0002F19D0E068F9F7E4F8E168206C091AE1602268914202D26168081AE060022F17D019E02068002816D1606800F0E5FD064600206060F4\n"
+":407480000FE0A068F9F7CAF8216CA0684018A0606168884205D32068A06002E0002D00D06D1E6D1CA5633046F8BD10B50446006B00F0CEF9204600F0CBF910BD03210E488B\n"
+":4074C0008902420705D0C01DC0080B4AC000821A891A0A4A0023411809C20839C908C900183A11604B600B600B1A0AC093600120C0075360D0607047B001002058000020EE\n"
+":40750000044CFFF75FFF20680128FAD900F0D4F9F7E70000C0000020FFB581B097000C9C0E460A9DA5223946206BF9F789F8206B3F1FC019C708FF00780701D072B6FEE75A\n"
+":407540002218315C20321175315C002902D0401C1028F5D32046403000260090C670072D00D30625E5622665201DE56400F02FF92046183000F02BF924610720401B646295\n"
+":40758000A0616665009806763846049A019900F0F1F820600B98002800D0046005B0F0BD30B5114900E011460A688242FBD34B685C18844203D140681818486008464368C7\n"
+":4075C0001C18944209D1084C103C2468A24209D052689A1842600A6812680260814200D0086030BD0460F9E75800002010B5044600F014F9A06B002804D0002400F01AF984\n"
+":40760000204610BD0124F9E70648416B0968002905D0416BC968C9684968816270470021C943FAE70C00002003480068401C72B600D0FEE7FEE7000008000020F8B5044626\n"
+":4076400000F0ECF8254640350526AE57274624370BE0606A00280AD0384600F027FD002801D000F04DF9761E76B2002EF1DC0027FF436F7100F0DEF800F0D0F80426AE5739\n"
+":407680002046103000900BE0206900280AD0009800F00CFD002801D000F032F9761E76B2002EF1DC2F7100F0C5F8F8BDF8B50546002700F0A1F9284E3068002801D1FFF719\n"
+":4076C000FDFEF06805423FD1002D3DD00835680708D06807400F0821081A4519680701D072B6FEE7002D2FD0706885422CD81A48103001460C6801E020460C466168A942F5\n"
+":4077000002D221680029F7D131688C421CD007682168016060680837411B102908D96019420701D072B6FEE741606560FFF738FF61687068401A7060B268904200D2B06006\n"
+":40774000F0680143002003C400F0E2FC780701D072B6FEE73846F8BD4800002004490868002803D00868026D521C0265086870470C00002010B50124031F24061C601B1F15\n"
+":407780001960191F024B0B60143940380A6010BD297600084368826801699A60836842685A604A68824201D182684A60002202610868401E086070470146083100224160E4\n"
+":4077C000D243C1608260016100210160704700210161704730B50B685A1C02D00246083202E0026904E02246546825689D42FAD953684B6099608A60516008610168491CB5\n"
+":40780000016030BD42684A6093688B6093685960916008610168491C0160704772B604480168491C0160BFF34F8FBFF36F8F70470800002005490868002804D0401E08608A\n"
+":4078400000D162B6704772B6FEE700000800002070B500281AD004460D4D083C6068E968084201D172B6FEE72268002A01D072B6FEE78843606000F0BFF86068696840181D\n"
+":4078800068602046FFF78CFE00F042FC70BD00004800002010B506487D21C9000068F8F763FE0449401E48610720086110BD00000000002000E000E0012004490007486077\n"
+":4078C000BFF34F8FBFF36F8F7047000000ED00E010B502000FD00948006B002801D072B6FEE700F089F800211046FFF7E1FC00F00FFC002801D1FFF7DFFF10BD0C000020DF\n"
+":4079000001490120C86170470C00002010B50C46002809D0054909681831FFF75BFF01212046FFF7C5FC10BD72B6FEE70C00002070B5040025D0154DE06A2968C96A8842C3\n"
+":407940001FD2A069002804DB28680721C06A081AA061E06A14220E4E504361698019814210D1201DFFF716FF2868C06AE0622969884200D92861142148438019211DFFF7FC\n"
+":4079800041FF70BD2868C06AE06270BD0C000020C0000020002805D003490A6A0260C9684160704772B6FEE70C0000201CB50E4800240190234680220CA100940D4800F0D7\n"
+":4079C000ABFA012803D0401C0CD172B6FEE772B600210548C9432C38816201214161C46000F03EF81CBD00003800002049444C4500000000017500080248016B491C01635D\n"
+":407A0000704700000C00002010B51348016B002902D00121C16110BD0021C16101690F4A02E0002915D0491E14234B43D358002BF7D014234B439A18536814465B68083401\n"
+":407A40005360A34201D15B685360DA680260016110BD72B6FEE700000C000020C000002010B50948016AFF22120411430162016A120211430162FFF70DFF044900200860BE\n"
+":407A8000F8F728FD002010BD00ED00E00800002010B5F8F733FD044600F076FA002803D001200349000748602046F8F72BFD10BD00ED00E010B502460021012000F00CF8D1\n"
+":407AC000041E07D00021416001600B460A46C16000F0F6F8204610BDF8B517460E46050016D0002E16D070435030FFF7DFFD04000CD020465030002E0ED0206026642046F3\n"
+":407B00000121E56300F0A6F84C2007552046F8BD72B6FEE70020E7E72460EFE7FFB5002583B0040003D00498002802D006E072B6FEE7206C002801D072B6FEE700F014FA19\n"
+":407B40000026002804D10598002801D072B6FEE7FFF764FEA76B002F26D0E56820460499FFF758FC0698002810D0E560606A002807D02046243000F099FA002801D0FFF736\n"
+":407B80009BFEFFF757FE012007B0F0BD7F1EA7632068002802D1FFF7E1FD606020690028EFD020461030E6E70598002802D0002D03D006E0FFF73EFE27E06846FFF7EAFE79\n"
+":407BC0000125FFF737FEFFF717FFFFF727FE2046403004214156491C00D1067105214156491C00D14671FFF725FE05A9684600F069F9002820460AD0FFF720FD00F088FA70\n"
+":407C00002046FFF7F3FC0028A2D00020BCE7FFF7EDFC002818D02068002806D1FFF7FEFD6068FFF785FEFFF705FE204624300599FFF76CFE2046FFF701FD00F069FA00286E\n"
+":407C400086D1FFF739FE83E72046FFF7F7FC00F05FFA7DE770B50D46040025D0FFF7DEFD216CE06B48432168411861600021A1632168A160E06B216C401E48432168411880\n"
+":407C8000E1600021C94320464030017141713038002D0BD0FFF790FD20462430FFF78CFDFFF7C8FD012070BD72B6FEE721690029F6D000F0FBF90028F2D0FFF7FDFDEFE70D\n"
+":407CC000FFB5002683B01D46040003D00498002802D006E072B6FEE7206C002801D072B6FEE7022D04D1E06B012801D072B6FEE700F03AF90027002804D10598002801D0EF\n"
+":407D000072B6FEE7FFF78AFDA06BE16B884207D3022D05D00598002817D0002E18D01BE02A4620460499FFF788FB616A002903D02046243000F0BAF9002801D0FFF7BCFD45\n"
+":407D4000FFF778FD012007B0F0BDFFF773FD22E06846FFF71FFE0126FFF76CFDFFF74CFEFFF75CFD2046403004214156491C00D1077105214156491C00D14771FFF75AFD9D\n"
+":407D800005A9684600F09EF8002806D02046FFF755FC00F0BDF90020D5E7FFF73FFDA06BE16B884210D1FFF745FD204610300599FFF7ACFD2046FFF741FC00F0A9F9002812\n"
+":407DC000A0D1FFF779FD9DE7FFF734FD2046FFF735FC00F09DF995E770B50D46040004D0206C002803D072B6FEE772B6FEE72068002804D16068002801D072B6FEE7F8F739\n"
+":407E00007DFBA26B0646E06B904219D92146403105200856521CA263421C03D0401C487101240EE0606A0028FAD02046243000F03DF90028F4D0002DF2D001202860EFE745\n"
+":407E400000243046F8F75EFB204670BDF7B582B0040003D00398002802D006E072B6FEE7206C002801D072B6FEE7F8F747FB0090A66B002E1FD020464030042545570746E7\n"
+":407E800020460399FFF7C6FA761EA663681C03D06D1C3D7101240FE020690028FAD02046103000F003F90028F4D004980028F1D001210160EEE700240098F8F723FB2046C6\n"
+":407EC00005B0F0BD70B50D4604001AD0002D1AD0FFF7A4FC0F4AD1682868431C0FD02368126A934202D062688A420ED96268891A81420AD2401A28602046FFF74BFD0024CC\n"
+":407F000004E072B6FEE772B6FEE70124FFF792FC204670BD0C000020FFB585B0164690000F9FFFF7C3FB05001AD05C20FFF7BEFB040012D0256300210E9803910197009099\n"
+":407F400002943246089B06990598FFF7E5FA2046FFF7DAF9012009B0F0BD2846FFF778FC0020C043F7E7000006484169002904D0006B002803D00020704701207047022084\n"
+":407F8000704700000C000020F8B52C4C0027206B002808D0A069401CA061E069002800D001273846F8BDE668761CE6600ED1606B0068002801D072B6FEE7606BA16B61632C\n"
+":407FC000A063206A401C2062FFF71EFBA06A86420AD3606B0068002810D0606BC068C568686886420DD2A06220681421C06A4843134908580128D0D90127CEE70020C04384\n"
+":40800000F1E7281DFFF7C6FBA86A002803D028461830FFF7BFFBE86A2169884200D920611421484306494018291DFFF7EBFBE86A2168C96A8842CCD30127CAE70C000020F4\n"
+":40804000C000002070B500210446002828D0154D2868844201D072B6FEE7206D002808D0401E2065E36CE26A9A4219D0002802D016E072B6FEE7201DFFF78CFBE06C0721DF\n"
+":40808000E062081AA061E06A2969884200D928611421484304494018211DFFF7B3FB0121084670BD0C000020C000002070B5C068C468002C0BD0204618300646FFF76AFB8E\n"
+":4080C000114D286B002804D0314610480FE072B6FEE7201DFFF75EFBE06A2969884200D92861142148430949B4394018211DFFF789FBE06A2968C96A884202D90120E86108\n"
+":4081000070BD002070BD00000C00002074010020F8B5284C0025206B2E46002808D0FFF77DFB206B401E2063206B002802D03DE072B6FEE7A168204F00291DD136E0F86831\n"
+":40814000C56828461830FFF725FB281DFFF722FBE86A2169884200D92061142148431649B4394018291DFFF74DFBE86A2168C96A884201D30120E06138680028DFD1002D13\n"
+":4081800001D0FFF741FAA569002D09D00127FFF7FBFE002800D0E7616D1EF8D10020A061E069002802D00126FFF786FBFFF742FB3046F8BD0C0000207401002000000000DD\n"
+":4081C000000000000102030406070809030406080C1018203000000000010203040000006D61696E0000000040150208914100080000000000000000000100003415020882\n"
+":408200002D340008000000000000000080000000537461727444656661756C745461736B0048414C5F4932435F536C617665547843706C7443616C6C6261636B0048414C62\n"
+":408240005F4932435F536C617665527843706C7443616C6C6261636B0048414C5F4932435F4572726F7243616C6C6261636B0048414C5F4932435F4164647243616C6C620B\n"
+":4082800061636B0048414C5F4932435F4C697374656E43706C7443616C6C6261636B0048414C5F4932435F4D656D547843706C7443616C6C6261636B0048414C5F49324361\n"
+":4082C0005F4D656D527843706C7443616C6C6261636B0048414C5F4932435F41626F727443706C7443616C6C6261636B0048414C5F4750494F5F455854495F43616C6C6274\n"
+":4083000061636B004669726D776172655F557064617465004F7074696F6E4279746550726F6700424642325F636865636B5F656E61626C6500000000555956598002E0018B\n"
+":4083400001004B00010000000000000000000000555956590005D00201006400010000000000000000000000555956590005C00301004B00010000000000000000000000A4\n"
+":4083800055595659800738040100410001000000000000000000000055595659000AA0050100260001000000000000000000000055595659200A980701001C0001000000E2\n"
+":4083C0000000000000000000555956598002E00101004B00010000000000000000000000555956590005D00201006400010000000000000000000000555956590005C003B1\n"
+":4084000001004B0001000000000000000000000055595659800738040100410001000000000000000000000055595659000AA0050100260001000000000000000000000058\n"
+":4084400055595659200A980701001C000100000000000000000000000009980001000000F1FFFFFF0F00000000000000010000000000000000000000000000000000000018\n"
+":4084800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000BC\n"
+":4084C0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004272696768746E65737300000000000063\n"
+":40850000000000000000000000000000000000000120000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001A\n"
+":4085400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000FB\n"
+":4085800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000BB\n"
+":4085C000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007B\n"
+":40860000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003A\n"
+":4086400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000FA\n"
+":4086800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000BA\n"
+":4086C000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007A\n"
+":408700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000039\n"
+":4087400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000F9\n"
+":408780000000000000000000000000000000000000000000000000000109980001000000000000001E0000000A0000000100000000000000000000000000000000000000ED\n"
+":4087C0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000079\n"
+":40880000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000436F6E74726173740000000000000000EA\n"
+":4088400000000000000000000000000000000000012000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000D7\n"
+":4088800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000B8\n"
+":4088C0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000078\n"
+":408900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000037\n"
+":4089400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000F7\n"
+":4089800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000B7\n"
+":4089C0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000077\n"
+":408A00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000036\n"
+":408A400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000F6\n"
+":408A800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000B6\n"
+":408AC0000000000000000000000000000000000000000000000000000209980001000000000000003C00000010000000010000000000000000000000000000000000000085\n"
+":408B00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000035\n"
+":408B400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000053617475726174696F6E000000000000CB\n"
+":408B80000000000000000000000000000000000001200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000094\n"
+":408BC0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000075\n"
+":408C00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000034\n"
+":408C400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000F4\n"
+":408C800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000B4\n"
+":408CC0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000074\n"
+":408D00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000033\n"
+":408D400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000F3\n"
+":408D800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000B3\n"
+":408DC0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000073\n"
+":408E00000000000000000000000000000000000000000000000000000C09980001000000000000000100000001000000010000000000000000000000000000000000000081\n"
+":408E400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000F2\n"
+":408E800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000057686974652042616C616E636520417515\n"
+":408EC000746F00000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008D\n"
+":408F00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000031\n"
+":408F400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000F1\n"
+":408F800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000B1\n"
+":408FC0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000071\n"
+":409000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030\n"
+":4090400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000F0\n"
+":4090800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000B0\n"
+":4090C0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000070\n"
+":40910000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002F\n"
+":40914000000000000000000000000000000000000000000000000000100998000100000028000000F4010000DC000000010000000000000000000000000000000000000043\n"
+":4091800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000AF\n"
+":4091C00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000047616D6D6100000000000000000000008C\n"
+":40920000000000000000000000000000000000000120000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000D\n"
+":4092400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000EE\n"
+":4092800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000AE\n"
+":4092C000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006E\n"
+":40930000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002D\n"
+":4093400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ED\n"
+":4093800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000AD\n"
+":4093C000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006D\n"
+":40940000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002C\n"
+":4094400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000EC\n"
+":409480000000000000000000000000000000000000000000000000001A09980001000000E80300001027000094110000010000000000000000000000000000000000000028\n"
+":4094C000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006C\n"
+":4095000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000057686974652042616C616E63652054658B\n"
+":409540006D706572617475726500000000000000012000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000F5\n"
+":4095800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000AB\n"
+":4095C000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006B\n"
+":40960000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002A\n"
+":4096400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000EA\n"
+":4096800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000AA\n"
+":4096C000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006A\n"
+":409700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000029\n"
+":4097400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000E9\n"
+":4097800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000A9\n"
+":4097C0000000000000000000000000000000000000000000000000001B09980001000000000000007F0000001000000001000000000000000000000000000000000000001C\n"
+":409800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000028\n"
+":4098400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000053686172706E6573730000000000000031\n"
+":409880000000000000000000000000000000000001200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000087\n"
+":4098C0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000068\n"
+":409900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000027\n"
+":4099400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000E7\n"
+":4099800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000A7\n"
+":4099C0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000067\n"
+":409A00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000026\n"
+":409A400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000E6\n"
+":409A800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000A6\n"
+":409AC0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000066\n"
+":409B00000000000000000000000000000000000000000000000000001309980001000000010000006400000001000000010000000000000000000000000000000000000009\n"
+":409B400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000E5\n"
+":409B80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004761696E00000000000000000000000026\n"
+":409BC0000000000000000000000000000000000001200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000044\n"
+":409C00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000024\n"
+":409C400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000E4\n"
+":409C800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000A4\n"
+":409CC0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000064\n"
+":409D00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000023\n"
+":409D400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000E3\n"
+":409D800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000A3\n"
+":409DC0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000063\n"
+":409E00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000022\n"
+":409E400000000000000000000000000000000000000000000000000001099A000100000000000000020000000000000000000000000000000000000000000000000000003B\n"
+":409E800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000A2\n"
+":409EC0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004578706F73757265204175746F0000004E\n"
+":409F00000000000000000000000000000000000003000346756C6C20464F56204175746F204D6F646500000000000000000000000000004D616E75616C204D6F646500001C\n"
+":409F400000000000000000000000000000000000000000524F49204261736564204175746F204D6F646500000000000000000000000000000000000000000000000000009A\n"
+":409F800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000A1\n"
+":409FC0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000061\n"
+":40A000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020\n"
+":40A0400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000E0\n"
+":40A0800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000A0\n"
+":40A0C0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060\n"
+":40A10000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001F\n"
+":40A1400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000DF\n"
+":40A1800000000000000000000000000000000000000000000000000002099A000100000001000000CC100000380100000100000000000000000000000000000000000000E2\n"
+":40A1C000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005F\n"
+":40A200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004578706F73757265204162736F6C7574C9\n"
+":40A240006500000000000000000000000000000001200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000058\n"
+":40A28000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009E\n"
+":40A2C000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005E\n"
+":40A30000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001D\n"
+":40A3400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000DD\n"
+":40A38000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009D\n"
+":40A3C000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005D\n"
+":40A40000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001C\n"
+":40A4400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000DC\n"
+":40A48000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009C\n"
+":40A4C0000000000000000000000000000000000000000000000000000D099A000100000064000000200300006A0000000100000000000000000000000000000000000000B9\n"
+":40A50000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001B\n"
+":40A540000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005A6F6F6D00000000000000000000000036\n"
+":40A58000000000000000000000000000000000000120000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007A\n"
+":40A5C000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005B\n"
+":40A60000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001A\n"
+":40A6400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000DA\n"
+":40A68000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009A\n"
+":40A6C000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005A\n"
+":40A700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000019\n"
+":40A7400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000D9\n"
+":40A780000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000099\n"
+":40A7C0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000059\n"
+":40A8000000000000000000000000000000000000000000000000000008099A0001000000C01CF6FF40E309000000000001000000000000000000000000000000000000006E\n"
+":40A8400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000D8\n"
+":40A8800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000050616E0000000000000000000000000079\n"
+":40A8C0000000000000000000000000000000000001200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000037\n"
+":40A900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000017\n"
+":40A9400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000D7\n"
+":40A980000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000097\n"
+":40A9C0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000057\n"
+":40AA00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000016\n"
+":40AA400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000D6\n"
+":40AA80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000096\n"
+":40AAC0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000056\n"
+":40AB00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000015\n"
+":40AB400000000000000000000000000000000000000000000000000009099A0001000000C01CF6FF40E309000000000001000000000000000000000000000000000000002A\n"
+":40AB80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000095\n"
+":40ABC00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000054696C74000000000000000000000000B8\n"
+":40AC000000000000000000000000000000000000012000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000F3\n"
+":40AC400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000D4\n"
+":40AC80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000094\n"
+":40ACC0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000054\n"
+":40AD00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000013\n"
+":40AD400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000D3\n"
+":40AD80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000093\n"
+":40ADC0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000053\n"
+":40AE00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000012\n"
+":40AE400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000D2\n"
+":40AE80000000000000000000000000000000000000000000000000002D099A0001000000000000000F000000080000000100000000000000000000000000000000000000A9\n"
+":40AEC0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000052\n"
+":40AF000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000044656E6F6973650000000000000000004A\n"
+":40AF400000000000000000000000000000000000012000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000B0\n"
+":40AF80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000091\n"
+":40AFC0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000051\n"
+":40B000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010\n"
+":40B0400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000D0\n"
+":40B080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000090\n"
+":40B0C0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000050\n"
+":40B10000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000F\n"
+":40B1400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000CF\n"
+":40B18000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008F\n"
+":40B1C0000000000000000000000000000000000000000000000000001409980001000000000000000100000000000000010000000000000000000000000000000000000097\n"
+":40B20000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000E\n"
+":40B24000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000486F72697A6F6E74616C20466C697000F9\n"
+":40B28000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008C\n"
+":40B2C000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004E\n"
+":40B30000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000D\n"
+":40B3400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000CD\n"
+":40B38000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008D\n"
+":40B3C000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004D\n"
+":40B40000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000C\n"
+":40B4400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000CC\n"
+":40B48000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008C\n"
+":40B4C000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004C\n"
+":40B500000000000000000000000000000000000000000000000000001509980001000000000000000100000000000000010000000000000000000000000000000000000052\n"
+":40B5400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000CB\n"
+":40B58000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000566572746963616C20466C6970000000A6\n"
+":40B5C0000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000049\n"
+":40B60000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000A\n"
+":40B6400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000CA\n"
+":40B68000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008A\n"
+":40B6C000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004A\n"
+":40B700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009\n"
+":40B7400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000C9\n"
+":40B780000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000089\n"
+":40B7C0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000049\n"
+":40B800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008\n"
+":40B8400000000000000000000000000000000000000000000000000026099A000100000000000000FFFF0000808000000100000000000000000000000000000000000000FF\n"
+":40B880000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000088\n"
+":40B8C000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000524F49204578706F7375726500000000E3\n"
+":40B9000000000000000000000000000000000000012000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000E6\n"
+":40B9400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000C7\n"
+":40B980000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000087\n"
+":40B9C0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000047\n"
+":40BA00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006\n"
+":40BA400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000C6\n"
+":40BA80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000086\n"
+":40BAC0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000046\n"
+":40BB00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005\n"
+":40BB400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000C5\n"
+":40BB800000000000000000000000000000000000000000000000000024099A0001000000080000004000000018000000080000000000000000000000000000000000000055\n"
+":40BBC0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000045\n"
+":40BC0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000524F492057696E646F772053697A6500C7\n"
+":40BC400000000000000000000000000000000000012000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000A3\n"
+":40BC80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000084\n"
+":40BCC0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000044\n"
+":40BD00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003\n"
+":40BD400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000C3\n"
+":40BD80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000083\n"
+":40BDC0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000043\n"
+":40BE00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002\n"
+":40BE400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000C2\n"
+":40BE80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000082\n"
+":40BEC00000000000000000000000000000000000000000000000000031099A0001000000401F0000B08F0600E02202000100000000000000000000000000000000000000C4\n"
+":40BF00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001\n"
+":40BF40000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004578706F7375726520436F6D70656E7371\n"
+":40BF80006174696F6E000000000000000000000001200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000045\n"
+":40BFC0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000041\n"
+":40C000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\n"
+":40C0400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000C0\n"
+":40C080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080\n"
+":40C0C0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040\n"
+":40C1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000FF\n"
+":40C1400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000BF\n"
+":40C18000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007F\n"
+":40C1C000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003F\n"
+":40C200000000000000000000000000000000000000000000000000002A099A000100000000000000020000000000000000000000000000000000000000000000000000002E\n"
+":40C2400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000BE\n"
+":40C280000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004672616D652053796E63000000000000D6\n"
+":40C2C0000000000000000000000000000000000003000344697361626C65204672616D652053796E6300000000000000000000000000004672616D652053796E6320333091\n"
+":40C3000020487A000000000000000000000000000000004672616D652053796E6320363020487A00000000000000000000000000000000000000000000000000000000000B\n"
+":40C3400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000BD\n"
+":40C38000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007D\n"
+":40C3C000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003D\n"
+":40C4000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000FC\n"
+":40C4400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000BC\n"
+":40C48000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007C\n"
+":40C4C000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003C\n"
+":40C5000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000FB\n"
+":40C5400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000BB\n"
+":40C58000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007B\n"
+":40C5C000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003B\n"
+":40C6000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000FA\n"
+":40C6400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000BA\n"
+":40C68000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007A\n"
+":40C6C000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003A\n"
+":40C7000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000F9\n"
+":40C7400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000B9\n"
+":40C780000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000079\n"
+":40C7C0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000039\n"
+":40C8000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000F8\n"
+":40C8400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000B8\n"
+":40C880000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000078\n"
+":40C8C0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000038\n"
+":40C9000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000F7\n"
+":40C9400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000B7\n"
+":40C980000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000077\n"
+":40C9C0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000037\n"
+":40CA000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000F6\n"
+":40CA400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000B6\n"
+":40CA80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000076\n"
+":40CAC0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000036\n"
+":40CB000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000F5\n"
+":40CB400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000B5\n"
+":40CB80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000075\n"
+":40CBC0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000035\n"
+":40CC000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000F4\n"
+":40CC400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000B4\n"
+":40CC80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000074\n"
+":40CCC0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000034\n"
+":40CD000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000F3\n"
+":40CD400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000B3\n"
+":40CD80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000073\n"
+":40CDC0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000033\n"
+":40CE000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000F2\n"
+":40CE400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000B2\n"
+":40CE80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000072\n"
+":40CEC0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000032\n"
+":40CF000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000F1\n"
+":40CF400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000B1\n"
+":40CF80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000071\n"
+":40CFC0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000031\n"
+":40D0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000F0\n"
+":40D0400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000B0\n"
+":40D080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000070\n"
+":40D0C0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030\n"
+":40D1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000EF\n"
+":40D1400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000AF\n"
+":40D18000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006F\n"
+":40D1C000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002F\n"
+":40D2000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000EE\n"
+":40D2400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000AE\n"
+":40D28000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006E\n"
+":40D2C000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002E\n"
+":40D3000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ED\n"
+":40D3400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000AD\n"
+":40D38000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006D\n"
+":40D3C000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002D\n"
+":40D4000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000EC\n"
+":40D4400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000AC\n"
+":40D48000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006C\n"
+":40D4C000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002C\n"
+":40D5000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000EB\n"
+":40D5400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000AB\n"
+":40D58000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006B\n"
+":40D5C000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002B\n"
+":40D6000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000EA\n"
+":40D6400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000AA\n"
+":40D68000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006A\n"
+":40D6C000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002A\n"
+":40D7000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000E9\n"
+":40D7400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000A9\n"
+":40D780000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000069\n"
+":40D7C0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000029\n"
+":40D8000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000E8\n"
+":40D8400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000A8\n"
+":40D880000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000068\n"
+":40D8C0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000028\n"
+":40D9000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000E7\n"
+":40D9400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000A7\n"
+":40D980000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000067\n"
+":40D9C0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000027\n"
+":40DA000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000E6\n"
+":40DA400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000A6\n"
+":40DA80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000066\n"
+":40DAC0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000026\n"
+":40DB000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000E5\n"
+":40DB400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000A5\n"
+":40DB80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000065\n"
+":40DBC0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000025\n"
+":40DC000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000E4\n"
+":40DC400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000A4\n"
+":40DC80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000064\n"
+":40DCC0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000024\n"
+":40DD000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000E3\n"
+":40DD400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000A3\n"
+":40DD80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000063\n"
+":40DDC0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000023\n"
+":40DE000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000E2\n"
+":40DE400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000A2\n"
+":40DE80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000062\n"
+":40DEC0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000022\n"
+":40DF000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000E1\n"
+":40DF400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000A1\n"
+":40DF80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000061\n"
+":40DFC0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000021\n"
+":40E0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000E0\n"
+":40E0400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000A0\n"
+":40E080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060\n"
+":40E0C0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020\n"
+":40E1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000DF\n"
+":40E14000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009F\n"
+":40E18000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005F\n"
+":40E1C000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001F\n"
+":40E2000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000DE\n"
+":40E24000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009E\n"
+":40E28000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005E\n"
+":40E2C000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001E\n"
+":40E3000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000DD\n"
+":40E34000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009D\n"
+":40E38000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005D\n"
+":40E3C000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001D\n"
+":40E4000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000DC\n"
+":40E44000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009C\n"
+":40E48000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005C\n"
+":40E4C000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001C\n"
+":40E5000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000DB\n"
+":40E54000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009B\n"
+":40E58000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005B\n"
+":40E5C000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001B\n"
+":40E6000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000DA\n"
+":40E64000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009A\n"
+":40E68000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005A\n"
+":40E6C000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001A\n"
+":40E7000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000D9\n"
+":40E740000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000099\n"
+":40E780000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000059\n"
+":40E7C0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000019\n"
+":40E8000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000D8\n"
+":40E840000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000098\n"
+":40E880000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000058\n"
+":40E8C0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000018\n"
+":40E9000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000D7\n"
+":40E940000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000097\n"
+":40E980000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000057\n"
+":40E9C0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000017\n"
+":40EA000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000D6\n"
+":40EA40000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000096\n"
+":40EA80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000056\n"
+":40EAC0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000016\n"
+":40EB000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000D5\n"
+":40EB40000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000095\n"
+":40EB80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000055\n"
+":40EBC0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000015\n"
+":40EC000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000D4\n"
+":40EC40000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000094\n"
+":40EC80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000054\n"
+":40ECC0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000014\n"
+":40ED000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000D3\n"
+":40ED40000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000093\n"
+":40ED80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000053\n"
+":40EDC0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000013\n"
+":40EE000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000D2\n"
+":40EE40000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000092\n"
+":40EE80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000052\n"
+":40EEC0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000012\n"
+":40EF000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000D1\n"
+":40EF40000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000091\n"
+":40EF80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000051\n"
+":40EFC0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000011\n"
+":40F0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000D0\n"
+":40F040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000090\n"
+":40F080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000050\n"
+":40F0C0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010\n"
+":40F1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000CF\n"
+":40F14000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008F\n"
+":40F18000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004F\n"
+":40F1C000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000F\n"
+":40F2000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000CE\n"
+":40F24000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008E\n"
+":40F28000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004E\n"
+":40F2C000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000E\n"
+":40F3000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000CD\n"
+":40F34000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008D\n"
+":40F38000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004D\n"
+":40F3C000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000D\n"
+":40F4000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000CC\n"
+":40F44000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008C\n"
+":40F48000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004C\n"
+":40F4C000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000C\n"
+":40F5000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000CB\n"
+":40F54000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008B\n"
+":40F58000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004B\n"
+":40F5C000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000B\n"
+":40F6000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000CA\n"
+":40F64000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008A\n"
+":40F68000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004A\n"
+":40F6C000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000A\n"
+":40F7000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000C9\n"
+":40F740000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000089\n"
+":40F780000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000049\n"
+":40F7C0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000009\n"
+":40F8000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000C8\n"
+":40F840000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000088\n"
+":40F880000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000048\n"
+":40F8C0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008\n"
+":40F9000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000C7\n"
+":40F940000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000087\n"
+":40F980000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000047\n"
+":40F9C0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007\n"
+":40FA000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000C6\n"
+":40FA40000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000086\n"
+":40FA80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000046\n"
+":40FAC0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006\n"
+":40FB000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000C5\n"
+":40FB40000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000085\n"
+":40FB80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000045\n"
+":40FBC0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005\n"
+":40FC000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000C4\n"
+":40FC40000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000084\n"
+":40FC80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000044\n"
+":40FCC0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004\n"
+":40FD000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000C3\n"
+":40FD40000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000083\n"
+":40FD80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000043\n"
+":40FDC0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003\n"
+":40FE000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000C2\n"
+":40FE40000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000082\n"
+":40FE80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000042\n"
+":40FEC0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002\n"
+":40FF000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000C1\n"
+":40FF40000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000081\n"
+":40FF80000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000041\n"
+":40FFC0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001\n"
+":020000040801F1\n"
+":4000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000C0\n"
+":400040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080\n"
+":400080000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040\n"
+":4000C0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\n"
+":4001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000BF\n"
+":40014000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007F\n"
+":40018000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003F\n"
+":4001C00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000FF\n"
+":4002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000BE\n"
+":40024000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007E\n"
+":40028000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003E\n"
+":4002C00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000FE\n"
+":4003000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000BD\n"
+":40034000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007D\n"
+":40038000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003D\n"
+":4003C00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000FD\n"
+":4004000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000BC\n"
+":40044000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007C\n"
+":40048000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003C\n"
+":4004C00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000FC\n"
+":4005000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000BB\n"
+":40054000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007B\n"
+":40058000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003B\n"
+":4005C00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000FB\n"
+":4006000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000BA\n"
+":40064000000000000000000000000000000000000000000000000000050003EC00000000000003E054A20B3371E40C0071DC00005002029C501C0F00502B00020040000693\n"
+":40068000503E00015018FD9A501F0006000000010100000200800000502E0100504500021000003350410002FD00030050340800500A02005030208054403C0E505A0E3EEB\n"
+":4006C000507500030CCC0CCC080071CC14085088001150930004000CFFBEFAE1399950A6399950A03FEF507E0199507B00020CCC100050FE00C850F4033350F100020CCC2D\n"
+":400700001CCC50FA014750F700020B33133350EE033350DC012C50C8033350C500020CCC1CCC50D0033350CD000213331CCC50D800A350D5000206660CCC50A8000250BAA3\n"
+":40074000FFFF50AA400450B8020C50BD0002640C001852CA003F53160147531CFFD8531A0CCC52D60FAE5322200053410002D80004007078000453240C0053280400714B63\n"
+":40078000000204000400551000CC52B700025DE77EEF52BF000401990199019901995539000310001000100053B4000053E5000200CC00CC54B20147551404005512008089\n"
+":4007C000544E0019544C00035049000500000000023200CC2000548900088000F8008000FE6709997E6680007E6654A81000300E00BB200900024000400030090002400086\n"
+":400800004000400900024000400010128000118D00020080008011670004000000004000400011910003010000800080F039000200003390E00100020001000011860388D5\n"
+":4008400061140006118900020000000060F1000280008000610B0005000009C407D0012C00146116001960FC0FD76126000860E000A660E500020186A00060E20CCC613256\n"
+":400880009600601D00020000653860164000201001705398350F202E000140100000100900020001FFDD602900020000199A20300014302E0014403000145344004F52AAEF\n"
+":4008C0000000202C03F1302C03F1402C03F111750002FFFFB50211810002FFFFB54060180001600C0211604A036C503240002014000120120001200100020A2807A02022CB\n"
+":40090000041920203C0020250004000041000000821430140000300100020A2807A030201E0030250004000082140001045030220419300E00004014000140010002078030\n"
+":40094000043840203C0040250004000041000000410040220419401200507078000460B10008A974B3A0B4A0B4ACB4ECB4F80000A88460004F38201001606016400071C291\n"
+":40098000056671C003006025000200300000602D00020034030060390002001902006031000200000000603D000200000000603440006040400020510008000100080001FC\n"
+":4009C000000900030002000100062065000A000300000001000900000006000100260001002630550008000100080001000900030002000100063069000A0003000000019F\n"
+":400A0000000900000006000100260001002640510008000100080001000900030002000100064065000A000300000001000900000006000100260001002660290002000105\n"
+":400A40000000000006000008000100010300AA940000000000006538380000E83C3038CB4086A201AE129A0129AC130EE086F84C89CE069980F26469ABD03B820288C68058\n"
+":400A8000423E9C5E66103080D20877A5411040C1681E083D6AD65E9C291EF4D5105041404A88115BB47244C938059F46B5887C0F04081520686C0F7028913441634016EC96\n"
+":400AC00093D90839886882A6882C6902DE8B619EC0099F4329082C69C300C06C1FFD024220A9A0C10430301072757105671105403BFD0060EF2163F486D18CA1C56A06F486\n"
+":400B0000CF20094E7C4200163275F6020076E91C226F7F6221E9D08319BD24B87200F32F217A6D80866C2132177A481886047A30DA65802631E6D681A6406AF80FCA466060\n"
+":400B400078D001FA276C7C1FF826C002059CD4440DA2EC856002276790294C09214101DE7E23E40C999400351406D160121041E00468870060141AF1CA8135437E7B3A2003\n"
+":400B800068DC09849DAA2A44190070EFD7E210016774680E4748CA7EFA34FC895251013435E9DD510F3AB4B9036A604C2A02CCA5009D8066A1038E648B1EBD471EEB4D19CD\n"
+":400BC000816F586121BEBE883FBF3608206883DE14492DFE60413F48CD08C40F8408C208B499FE748143D03DD13262009DA1AEFB3080E41AA1BD5E882246F536C1187CCED0\n"
+":400C00006C8F4044D00509002CFF30FAB8EC41328020E9BDA2DFEAC411E4B2C2089A5EA06F1E897120308209020EB15412865A14E00011534AE86030040223E155220E4615\n"
+":400C40000A86400D3ED1036A2040E12BD27B88D530E2C232D309B11A04D1A24DF074E126E0D12712271913AA275913DBDB8093C69313F0B1E37731E46B830A24FA00041040\n"
+":400C8000802962A6862250348A083128148A15142C8A25144C8A35146C8A45148C8A5514AC8A6514CC8A7514EC8A85150C8A95152C7B34FC6140AA48AA834793149B8FA29A\n"
+":400CC0001C04ABF50348C1001090129348AC8B1620D0F43148C100169018A03526915B162C41A2572457322BD457B22C1458322C5458B22C9459322CD459B22D145A322DB6\n"
+":400D0000545AB22D945B322DD45BB22E145C322E545CB22E945D322ED45D9420741081E90206822250348BC8312F144A1046144BD48BD8343D3D34304009A40A2815502C56\n"
+":400D40009348BE8D1620D12FD22FD89420BC2898091810689829182C8C25184C8C35186C8C457906846085869866250348C500F59D186DA4823B8D8D7003E11DF94E316BBE\n"
+":400D800039E478C94C901384F508F04A23C1408878E062C5A48A11E6304792C2CA83666163287047AB86847B2611F429B10F99190240615E1206084881E11F33F91119285C\n"
+":400DC000101B18909181033DE87C4467593D15D80246850CFA5120892F4A2814C82491E8D5C602499488F7CCC168FE07CD044649B37A84B0C129E8A0A2B490929E9AEC296A\n"
+":400E000010928562203707252C69F5C1540496A04534092DD99AC5460499E72002035AD849EC308203522128850479B9951447633E170E22940C47D1004453D38129F87F6A\n"
+":400E4000415DDC25471B882E0178254080CF9A1908A81411F42D611515202544904A8A283C15AA6080FC47BD2788A92519F42DF11532012A67A12AA900E18E18202E11B7D8\n"
+":400E8000251552E101684095540840568AB0311F343A11560C23E493222B44847D29A0456F128428A1C8C1AE71CC30817A50F5226115FC90E8A9C095FC4A20B5AC325902E0\n"
+":400EC0000CFA17308B30711F458711667A23E881622DB9544150612D87C47CD14045B9E0CF4AA511701233E85FA22E4B44A9309744835D83A025D880D4F425F838D7084CFA\n"
+":400F000012FC2C6AAB84BFE48EC4D17FE079644D12611F139011A7CB2F0A9009A7C4B20A8009A67423E8CE423569309AD4404D6A80135AA104269F84D6482651AF59C213A0\n"
+":400F400051C13629109B5AD7F909AC2826D7535514F026FE52B89C32E1396C14272D5509DA6822784B087444FA8A163A15604FBEA0C82A3027E44152E13F3A3050BD113CDC\n"
+":400F800054404FF9884266B29ECBAADB0401D6F7D04C5E3000F0654209A8C000363C2098CC4001022484682177F0060CFA1A106100684B2AD6410CD099043CCF383CF92C88\n"
+":400FC000401047D1AA85D207C209048CFA1A78401056D564037A13D860801C481D34100188B7B181A3CADB0778F71F0A7F088476766BB492177025EC1602BFD60751A470FC\n"
+":40100000068D63D7AC6744A6077AE8647B240048F3FCFF3EBC632A2110060B9E03B7904A06247B303058314703A410F5CB5A076728D74810F5EF4A2691D06D821CA74933FB\n"
+":40104000980D0E81FF453789A471A072A060EEAA53EDF76101CFE40E0374011F4C0F27410FA80EC801E84A62F5EA888653C8700681300034035F37571F7D150F63F5880EA2\n"
+":4010800068F5D9D89BDBDAD8F599E0F3309135068177C5FBA2030E5D9F0265C1C810984020441559343ACD487C2CF243D0F45C1DE6CF01CA3F159910F0260E017F52C32297\n"
+":4010C000314D20390D23A851A5AC1050220C37C7023E8D408C4005015ED1C911581C03C270D3A5C9C8FA3C02102B0C907876D87B724C64489B86094BC513479BD188104BDC\n"
+":4011000003BEBD522268210C02FF501B91B1C3F944AC958C30B07978C648D8ED73720206E9198F46F00678011CCA8898E15F43D99947E736F109C309399C83A9921410807A\n"
+":401140004803CCD54BD25CC3E28DF18A13A3AE61841AECBDD1F50329D0C0E6BE226292009745B3101E7503BEBCC62054231047108821A36897BD41FC32C4AF6783C4EC31ED\n"
+":40118000791820F01231E980F103CBE9390DC196F5D622697C308CA0EC8D13B00E394900CFACA1446A9A4C9A4FC2E7A2454A4C8A4C27E97A63A1A1D46103DFA0233A207E2D\n"
+":4011C0000E91E23727DED2AA01E2F4410023286BD7DD47E1AAD52AB02AAD1A3E47074BEA0861D067C53400502200E1F4D2038181E2163100C230C3B3498CB408E38CFD1E9E\n"
+":401200000711A7CEF3851A20684A8589C8FE0F38BAE4D5E81040680DD3AC433299F85A74BD695320E84932EED6A110C62268A2183A64A54F56C518F41AF07524F9E0F0F699\n"
+":40124000451086E0AF0C3E40B90A8741AC242081F050AC0838314143103C6A21D5D5A6E00A7747188810A40EA81B008EFCD0620F3D0C1CDE31360058D207014B6640360DCE\n"
+":4012800016C2C0E3E5D351E82311068B016101CC0114D00CC48798A18BA0ED84194098F066608260D8365B76B6D88167890229973CC3847D2F2020D8C62D9A0158F23A59E2\n"
+":4012C000D407A0C0230C83FA892312106AC08C5EAD2819D084B04C19ECBB01960301558107D2B8E409835D9FF02138FA1A8EA3184A410360A14BD268433581606C306B1A85\n"
+":40130000E0C9A40DCB86D6C46210F838061849048C5E5AB64C0AC1C01C3A192121040A02571244711A4094591AA0593A1384C1A74C2691F6384780F41148089D0A0B4103D5\n"
+":40134000A0548B06C09688F03763F5D6010957BD0FA4618814EB81043949E17AEB8901E02209882ED2CF10029B16FA0020E1B46FDAD807A0D2720A4EDFAAEE0694182E9006\n"
+":4013800002348A55260390C60D03A4003151A352C0669020976B080EEC1D268984101040782A041EC1AF8BEFC49DE62EE208FAAF486F6A827403AB2084125D0EC97E105F92\n"
+":4013C000BD9FC7B18B440508ABB8614492340B6088800C3B86DC49009C7012FD7E60203563902C0AA23A097D9310208046185033290A4080900A22481A42144094C194D1AC\n"
+":40140000A3E878D3E003433E0F1C4D10179D838C581664C1CC427948687A84C881493103080388057C72C46C009D90E84C09858981B5568F649D1057D238A3C25BC7A9F0BE\n"
+":401440004448F4F8419E4380F433970331730C6778F009D361F1044D18017108088063885E140881B87D4246AE0582B39D9F88AA388C60C85B5020127683A4CE6A0D400D88\n"
+":401480002120541502099204F32939F3A08E0318216519A6A0181010A7D1FAC32602F48FEE24121FCA2290E0860E6A0422AF711A14B86E431A6E47D9B10835742C1A8060A9\n"
+":4014C0001C0E8C1CAFC1002CD207460F607D9F66148816634315BA86DE22059750C4068D40EF78D20F00082F52C8892079013D85F85292E6E243DDE1E277F1BED204FA67DC\n"
+":40150000E04801E4F3B3307AE468A6212DA3CBA6A9440EF3FAD1773A78C80BCC68C23C867D737E52119E409273F5D0F1750B195C1E63D7920D061C8424C76F1A729F2AA63C\n"
+":4015400010ACF62147F3CC270501433E250018AC3FCCB0944EBA4407E050F1F5ED51F48C88F6A69109850A18FFA3A9AA480D3CC9134EAA4C8A1C39DF2884E876DC9896BDEB\n"
+":40158000A8F23CEF04496E42FC33E103E169200C767409544A262291A0398D7E2372160D00AB85951100500F21E4811B82808203AE491ACD23ECCCF13528F8B7A87CFD00A6\n"
+":4015C00020A1AA10F7EF38F863EC496057BF779025816EFDDD409605E1041AB1725100C01AD0B4AC07283A6C078E825A0DAAF14016E84912018E6006BE50BAD00E621C015E\n"
+":401600003D80002A1C8178F3DFF007B4AB24023A3A71B100048847D814465A751F20DB5E006077D414E359C14840DCF17FB0807E3C141BC0C5808CCF2DF838B8CC285DE22D\n"
+":4016400000694F51C012758D889B003D890814B428D918CA173A663CB468583A0900361448E48E0841B86858390DFF03EA8C8D12C07EE91962B1401EA1001FE4A9021C40C9\n"
+":40168000BBB3007315423403515C17178A6F259C8D5896312007440A063418682A011D589CB40603E07E0B3A52F4BCA7F43DB33833DA5835007C108900368490260AA02001\n"
+":4016C0007A47E4C04188B89C06EB1304A89882FDE86A33A00122F4DC60F2BCDA8FAFF287A918C6190BBD806B184B99600220AA010049DD38C73A244801D371807DB6D026B5\n"
+":4017000004DA4082616B000960498CF8C06146172400EE8FAD23A0078844BCEE209105E1848448A81C40B097CC51020ACD620415D3518E4AF50A9978381C4CD0E5FA30A429\n"
+":401740004F507BA1B2C8F1070D80DEB2C8FD2C3AEA724103584F36807BA4C48F48C4BB811C12C3C5E447D846625D017E112D1C10626908F8210BD7E0670C022A7C475C49E1\n"
+":401780000ED0D9163969E19E40EFAEA887BF02C402F3368256740B3191045059B000C052A0C00B052CEA16690E497A24150E44D0A148990D5F7C5D0CB2268861D2998372D2\n"
+":4017C00072066162090C43D1323A17422162299D6431323A9D6421620A1622A9A0149A2151601FF154231B434F1686266884DDC77E2201223D75065889DC0474B07B090776\n"
+":401800008FDCA200622EA242C9604076E021188588B5E4D804C220D10EE71E1067A1C784283A08B02872C10006802E68030531C053142040CC0EF04101BC32034EED50406B\n"
+":401840003E077D1FE82486FFA33DCF5C87281C1083D6C944210077FA457801FE777066A438720201C77D7810088F7311103A1A237A8103C4261521141100E304770512E9AF\n"
+":401880000DE2F0B9609A006F0CD02BF680D2030A2032A363C108E3DC7FA3D92882048F02AF93750420028F9E8C6D1F4D80A003A73997452B27EB1F03F591C21EAF606072BD\n"
+":4018C0002E30AE1747CC179B12C4003084034808F582A155F0FABD8C4722A3D7D8287ABD88C8051008247EFDB003D1F2420078B748B94ED18A21A746BF225C1FFE327212AE\n"
+":40190000E01E307CFFC4A01E59069EBCEC31CC1A5403D5E8122233AC265EBCED38722F94041E1E66207F5595200695D126217531F200693D0E7EBCF13024660D140072CC6D\n"
+":401940003457094644460D3D75ECE81017068702EF826424E06C7543A8AECBBC4FCBA0D1CC612D8A103CFE0D3D75E8C847D538A279015E3C2B2F5D7AA1300715F72E636E9A\n"
+":401980003D059A20218C3C81DE2B202C32A1C5788452E68925D414A3E41C59EA0E31300B6F1221220380E1A70A793EDD3548D109FC672A25204A029201F7494AA069049E00\n"
+":4019C0003D6510901A1E90F5FE3081E679E0091AC1112C2B0F20774E6418066903A6883D1A44B1AF1C4329BB84E8BD2CA62621C21D792DA840EEC2ED40B81087BF1F9B0FFD\n"
+":401A00003A84100C7B1BFC75F05E45291048B3043B86784110489A0040D0487AF289E0F491E0F562408D983303B26E47D6E7A2CF7AD015C5C005F44228F6EB1A96892F5F86\n"
+":401A4000BB2242220EF7C1E1F055C13E834F554F17AC5887CA6B66100F067F6C7B8B1CB1747AC0E4C7EF591188F217A0047017811387E340D70E46F00B807D8FA3714BC126\n"
+":401A8000EC877C98748FF88AA0D181D3348200F261B41815B82FF100C419A21881A1DF80AF840EF29AE2217A8090FD904C061B40EE2C213C03609FBF9647872B0CB8010F4C\n"
+":401AC0004F9FA40498801184C055361012427471888220687B1E1E3FB91F04BE21E4BBE400902CCE008808A22E4A806426E89B518D23DD21F8F2038D0EAA7E1F414B895352\n"
+":401B0000185DEB1A3318B0C0EA080165800440F051B1E11744067405E8DE042390140289A1A10195848F94D711F11071978883C4224391032B60ADE020672D5C20D3CFCD9C\n"
+":401B400088F8C2B113654CBE0110151AA75F9F7FC58BE744206FCFC0A4051F50C43AF8C2B13C442038F37361028E28B2F4CC3994D67D2F18548FB16448CE8B3EC95D2239EA\n"
+":401B8000B1981EF1853A0732817CC4D40992677713F9346D2602113642438F21A9870001400712A0F4F011743CB896460047D81EA210626E33FC648C4478E9E0D31F3CBBC7\n"
+":401BC000C8318830D631E21D0720BC781B2C720309323904F85D408004022F416B180E7F97425A1C2F651E911143A78814C17A1510895FE8F644BA7878CAA1D9037040ECE4\n"
+":401C00004C030380303C16EB7261F3385970C1B12980E1081E080D90ECD0297ACC047A1C1C498010D2293D0D4A2522A9341E7558D174C191803D05882231341EF0DCF10636\n"
+":401C40006210EC82F2603EF435B8FA18FCFA5FB0AC6612202C007D04DC85E0CA018005C60DC415F32E1904A450365C718361063C1116243C9482AE4C82401FA1AFD2ECD11C\n"
+":401C8000F12400B3CAE0513A47903A86882FE8AFE2E93371F268C885C1678D180BA313CB97C6163D4008813F45838FA1AF4980A661200BB14449A003A7CD87C82BE88FC66D\n"
+":401CC00070F06178F5D44A699CA9B881BD7B4C438903D3BF2570E0885D3A3A3E862B30AE6911F80206C6AE934921CC0E8711F87643BA024E8518163350640792B3D16525D8\n"
+":401D00002829308D88E2701C7C801DE1C41192F448340601E034EA9DB3C5CC1E047A2A6C278187E86CE2E511880EA29F50028815E46F411590043AB49CBA561089E086902F\n"
+":401D40000628C8B9D00060069021E14B5162A054018140297BD0D029F5A68884409B202CCA43F515320980BC30609E00EA20BD8B1E5189F9FE48590840E0FFD0E928F8D38C\n"
+":401D8000405802896A8747AC22C4051FAA212E8865162702E88761658A860990A7033F93F14C9913C02D4C152044FEF4359A3468C0A11A8B21D2814552495142E8AC01F425\n"
+":401DC0003B309C24300F72B8194329743C0763D0A86982D5307DB8043E86B140F13C8D104EFED0ED17B1E928113500F1F4B41949D0244F00C45E28F85E30D45319B0829652\n"
+":401E0000EE1F2242237F517A1C58BC7D1C40C8E9E87E1267A5F80BC7D28418F3AF022D3A0D8880B1EACC623C1B01FF4EFB15D22008929DD59027B13428F54040F4CE08FAB5\n"
+":401E4000A75440DE9FFA2CA2B103EF30130008C20C1874006AEAEAD2C53E22861C810B7C42FA5DFC36222F5F9D8929DBB887E0096103CDE070E0E84591E8452103CD285039\n"
+":401E8000EFC861303A74F0451F3383901C5B039D429A2388540715D085DF0649895D149E41074FF6186A007A278058CCBC12AC98148D03541012480200E826701A88297FD7\n"
+":401EC000E45439566C1B87FE118100BB5418708C9091C5B208D43325A431130547786591B644025DEA303D18F2268190301503407776E0744D88F41A6880400F6DA4A390D4\n"
+":401F00001A67F1D26A17FD1C1043293072F42BD881A6B931797980E66A0305C7C97971EC43C24046E80A43EB0381F1A6C8F72B48803E8CED3E1ABA468167E32802F61022C9\n"
+":401F400003FF48D32441069C33755EFFC912AFAA2C840D34CAAECCDE2F45AC970FE81017D169843F0C0418C5D0B08376C803E6914C41001DF6AA604FB0569020B91539744D\n"
+":401F8000FD197452C990411754EC176A661C20E13F8EC9452F074E1FAACF4899980425F45C311D050C1993E6912F333CBEAEFD9628E426622291F0E93A45C05980BE4943C6\n"
+":401FC0004086E2120206D1C3EFDAA1EFDA54B8D628F7ED30F669F9DD260D7A458100D3D3A88A0AD500A1A23BDD001D76D25D45A422C06C207A251CBA81A878C3008EC0D769\n"
+":402000008A4E078D7F2A1801AC7AA1E87A80807885891488F503E91A235F10BE1F14988B0462448302513CD274797119F2E05105BC5BE65C658C8DD4071022F9D400206325\n"
+":40204000D07D63DCF5A24800FE107A134760029103D1B124168000A09A6C67FAD000C7A14C47BE67499F42A20F8A6E466E02C410087D1B0C7DBAE82CFAA30499238B143169\n"
+":4020800014049CCA244D0137CCF92221F37491A40022750329438B1DC4405E2E94100BB403C89608BB895445E34046F2B20088C450C074035DFF6C2417B06844C1E5305207\n"
+":4020C000478F27816C7112C718DE2360B8088019C5F1EBCFC802001645B31CF05C6DA2007C710F40A96C218C23C1A41C97060954C60F5025840EE9DA104B8572977381887B\n"
+":40210000843F8A1C28B048425843E152653000540163678EE6F612138F5A0FA9E34404EEC3031E39E72181A7F068A03F9FBC8544415F01AB080439981D8758201775C88840\n"
+":402140009BD918822001C77068CF2A541F650D17635F97798421E582E2F2C1916C5402C03E77740B41600611619F34EA17A3608FD1AEC90988FA35E0DAF48041E71E17A030\n"
+":40218000F788306400F008823C47C10B8D90F46BD2C1A039221CB7423C19F226A178F8692004BCE239E3D0ABC2681CD55606A9CDD097A20250D1B02A3EA7D932C388E79936\n"
+":4021C000688F1A5142C929F9FF34786E0952D11438E70A1C4774B88EB97A3800C623C0031D41A340D3F470116919AB9F428F4A454841DCF207C2F786C5221A0B20B9996169\n"
+":40220000A095132107651D8DEF60C7118E1E966E1F0C6C0F855D84171C02B05F88FFAB0E1DB99625754F0821C3748664839400040D12FFD0BB4861EE10AC0D26A34CB5E348\n"
+":40224000C7036E91EC988488508C15F47BA9CC82EDC95FCA46F2CFA3420E4290069980C3D1F12A7A34212EB61920578E4EAE1800F506898042A06812DCBD6D1EFD291E8503\n"
+":40228000902EAB841E26468785DB06C64210774191F74BB974B67892C1143900DA6A5967A5C2CB8CCD8FA34288EABB2419603AE96FB2891F468591ACDFA22F4804104B60A4\n"
+":4022C000809608610C214022E23D0208FB044C70FF87480C0F562208005B047D6CD280796A7109C01030760D3D1CA258E143A81E4A6203191CBD42E27242007854F8808B84\n"
+":40230000C00FB92F47BEE604DE00B855409BDD97F67D97F03E740A2A643D9E2826377FDA8FA38648721ABA6EA8BD1C9A3DAABC3C513C403E8CF526060F470023E848D1A937\n"
+":40234000C2E2760555EB1A22CFA38019E27528F13A733C1801273403856EFB941F470021E89492F16940D0A79480E4002C832F01E1950B10D92F08BA907EE4732986CE4368\n"
+":40238000475C4D1D1E268C5C4D58A74403756F6145880FD7B30640200F9EC09CD05D29A220A7452B081DD1C5C20B79A534BD76C6223461709FD100AC9646803FDA4D63DFEE\n"
+":4023C000F7E37B90889E2C732F27AD17A166444607332508F8E8A732EAC2F2E8E932F2D270841C43011128D8EB42213C048E79A065223D201C59D6C5E281C3F4A14110CE9B\n"
+":40240000203069E8D98795ECC8BD9D52363CC3DC2507A43B58E96E02A6E24174BC29F0C2622E0F001E8B91A06EF4BBB88045C8485CE69309A26DD100A8B2F166D11A26C999\n"
+":40244000221076F8413422185D8D423C363CBA5EB4406AA12362BACAF102AA31340D0F4A552581C22F4A500F3590E17003D12C6A9903B023E897B2024D2910043D47623D47\n"
+":4024800013285E09C31E89931F3B030F8DFD0803F64C9974FC18F5F360D4A00F207E0281C6FF1983E3E8E6D12F140A92406B034E94184480FEB02CDD6076F5B38A201765A4\n"
+":4024C000898F414C98F42EFA39CD1E85FB1F5812222482BD5C5A38E643D1BDA43D0589E6B0887C1A343C977E8E731364B900B2DA04B0703549043A23F09828152FF0009848\n"
+":40250000E9395A3B39BFB0DFCE608F728A0F7954975C8021D31C436411E388E55FC2737A39D4FD1D58444CF260CF0CD12F161E17A3968980C0D123881101AEC3674C25E8E7\n"
+":402540000C81E2AB63972A20C16182E8CCB240930970798E0C31137A47CC40DEEDA63F472E1F8AF50CB57135079F472DBA692B81E310681031F3ED9161FD01A8B2EE135158\n"
+":40258000ADE09C83BD31879719100624A172F8180051D6418E5D20AD200729931F0C1C8D8800D71A013E3CE480044386C5D0503C8B0061F565E1E1ADA208F19191044640D4\n"
+":4025C0008001F5056A396064108E631DBB43D1C80F7820B44582600A1B8B20A040208001D463E1C6C802A78121D22C860E7B2DAC41D3C090AB320B41043A82284DBEAC74FA\n"
+":40260000124C6B01FB4818B0970D0500086EC264478100068FA2A03078107D5E942789E362E1036C8C36C91F643B94EC165101D4D163C37122C7992944E1223C2A004698D2\n"
+":402640007BD509621F1A5E4F9F1C80622AC212A820BD5C011EF7661F3F6D084FD47B85272F053E91E810F8B118A084123A3BE9B4414100D9EAF0A90D3CBEF423E82BD5724A\n"
+":4026800082407896F8409F5E5B8C2981C07460812A12316008BFD87167002A68851D16464331715248B05C8503C075E25B91080E901BCE01A5DBCBE20376CDF8DDBC35E2DA\n"
+":4026C000371C0041E3C72205FBA600790AB899C08FA38CD102C3AB8189905CE0F65BA97793E1744C51F47DB22030717F3217FD25D0AEC5E41F84C10C0008F96E30840C03DE\n"
+":4027000048778141EEF2026F80304077219FF887A3E592F4DD3C93556E4689EF8EC500109D0D38F1627E9EE240D03CA0C8FD09B8868219414A01841041E971E134CEC34418\n"
+":40274000EC24D8BC6409310CD13ACB1100D23AC930A4B2EF694124C6A2C860E98F3100892103CD6BC98438094095100EA277C648A81E8029A47274411881BE6B61440EE8AF\n"
+":40278000FC42880E350E26F92287453789BE3805049841E20A9236485EAEBE9C30C25AD0E404153F004D1F72F50F40699746780FA84C07BC6B04D1243D3E84467F496A889A\n"
+":4027C00011E86FA202857E882620203B40D5F122923D349A6C017A85D30520579840C32602663B76AC580C300311B5EB09A105CADBC6008B000790F628069168BA0F7AD3E4\n"
+":40280000D44C2F230E9157C2C54FD8E003E89A82AFE0EDDD9543FF167708EC5479EABC81B13031E22D43E8CB047A48C44750A182EB9F2A1F9C1D8C2322F9CC00F3972109C5\n"
+":402840003C91CE20DF77534C84034303D197EB8D468942805440FA3EA0789448814009806813FC77EC496C3E23E8CBC5DAF465D90E0871D06160193B80F256F569E426430D\n"
+":402880008B840A01C82BBF98E9980865F0C20D8E18F9C0131D244077021D4FDE22012BDA0E420415D5EC57F7981B2131D11E1D6E2C10C0DFA32CCFC5EA4243038E1A703931\n"
+":4028C0002181D6FD19706407A32D911C14874643DA870603A321DD9F78958B00AAFBF48D481A99054C6FDD0607243C60DC2C314847A0E14478F035108263B74F4198845A25\n"
+":40290000FA32DD2050DAE9135303CDA07336D07D1ACC44AFA32D92061301940797D1C628237B417A2D146611C6F43ECCB3236AF6B2F465FA0079951246B895C50D4440F43C\n"
+":4029400065B2265429B605240BAFD190862A21E8CB8440F25A545E8C941630628055D15165E8C951F4A181B801E3D4E47EC7501094809ECBAA58CA829F49768D6B17A33419\n"
+":402980009003C1E8A2ADF0EA5F62EB4BF1D01F901D125D37964078050A552C3E90812F01D7901FE8C862ED16429518423383F29102D103A9F9F64B399A5293F4650240A773\n"
+":4029C000498A17803788312830FA08108EB636BB7DD8FD114097A22791F0AD11910905C90D044C434B79C0391F468934107A313CBA0700580385E9E487020BCE3E65E8D093\n"
+":402A0000A2C6A21D4E0E348607EA7C3E873D1F4A489635100386E8726082EC60E2E2E3422474A27162FA1120793C07F040090AF33950E7C12220F8AEF0C2C3D8CD08BB4CF8\n"
+":402A4000A11E24D63C7EB478D8014AC6CD1016C9511CC8040774769A31998E7D9F6C2C1BE87152E2095ACC0410A80D3EAAFCB2400AA302A140F6103D19FCA04897A101873C\n"
+":402A80002F4840D35A44800DD3DBC27B09FE8CFD582454008CD0280807540191210B4008CE41E91483AB067A07031360FFCF75104CD612BABECC419F467E17A3400BA1815C\n"
+":402AC00089A31F31047D19FC7742040858683D19FC403211C5C8D6CFD19FC40D10C60280D8C6DE604AF6B3797A33F8AE6A0EF4CE1E45D43E8CFE43A6A1459B95807328B4FD\n"
+":402B000074630A04111E3F8F428754299044D0D26D17DDF7244720F2681742112A707AABA0895286E988F1F1388F58EA047CE9D4311FBD19F889045B7A3410DC0804240027\n"
+":402B4000432444169080457498089185AF4900880826FA3418BCE5583D6E4C3DCD1A222711141157D27CC56A42F3BD5090838185E8CFA50B511153C63022C1289090C081E1\n"
+":402B800002012C1D82E40303619A96FEBD238633E2B130849C5328FD38207D219C6587A822C78A2491FE54F837A084A243C11465DB42C254F714C95F4002381A13624B0FFF\n"
+":402BC00051E008880306B330160505EA4222794A9CB901A8F4C220F5EAC17AC850C05EA0221F0F5389FE755EB45C75011F16020F8B020BD82704071AC0F1006887268072F6\n"
+":402C000050047E9FD62F2EB414CC06C9FE6806D840401820BA774045200D034034347C3A6E26B06BCA07C6100C935D006028F0BEB886853D91C6E68029FC341620B8800C35\n"
+":402C400005912218A005A716A8760B90C3005E801813201C20101A282D401A8DB18A580E02040A7038D10AA6100603CE62A222A94E079E005B02A82E6101C315D8610800AA\n"
+":402C8000B717253F6063901A16829D69B13EA1F912E93D13688A3C5C28C74F5737A0139E0098827B8CBD8FD04789CA0283A19F8B780FA7698400CE0E43D45FC7A3FC10C48E\n"
+":402CC0004EF5180201A13555824C23C53708922C3896421C99B8C8C43A5F70700E0928000021E1F08EB330401C018200871CF43842FF60160859E99E21124B8441DEBC4604\n"
+":402D00001030669CC0D53E00F3C82038095303B8E787AC9C8883F410111E5997C20216A19F976F90108334399068F40DA8ED7B046A9DE7B9B773181A477843ACF412D7D055\n"
+":402D40007F8316469829E7695110CB2188F735B9CA5207F97DD623A31225D90D1E4719C11A265259CFA27DB210204281001965AF849087C40E63D8E8A20F62331003C4DD64\n"
+":402D8000085FC6188CC7BA1A8BB63684D0367CEC28402063409002CAE44D534FC2BC0201F837FCC90340D3E9A981B8264D634878F59E2082008F5E4D09A06D673C8C185FCD\n"
+":402DC000D00040BE109BC4A8C180540BB30C0B134023D4A643D103C87A621100741DF3820E20A00C001A663926301A063F2022107CD32F493180BB3A423F36540847E6FD7E\n"
+":402E000022C05A0611704578F7544882E087F3672890BD69B4241CC606997C55DD6202A9CFD15725E703F210BD32E42009A65D12BE15B01F3F22A5E69A223C80C34CB69ACC\n"
+":402E4000C4B6628904A840B027CEE7025A42079600849929BCBF14382483A0C78677028923917E5CF71D00989A6569065017A7504A6892470F9B80C62888747CE06220799B\n"
+":402E8000A65417B122481431A34283CF6CE2067975107A6C3470AA00A408787A644B3F0E7D096670743A7083E6911DE3DFE13A422F3683951F3C07613B0934412075715B40\n"
+":402EC000F18512608A180D0260A818002316CFA055041D510C8042305B10494220208203A48834D020CBE34894288A024C4D3C3B595C85134C9220CBF3489088302522442F\n"
+":402F0000D323CD2236420D960217479F0912488548016C088851F134DCB0489A243A3E81751EB1FE1944300F921DF1043CFB444572C3D15745DAE787E28051F38610F0F01C\n"
+":402F400051F3C1D08E224687E64061E830940F74E58F44E590442860858882E92161136888151E252A234AC7023A9219BA22077885C88BE0382400583547202C1A084E02B5\n"
+":402F800037C39993220EA0C0119880094D01BBCA8C49303F067DFD04A6D7692C15A6A8CFD3DAA20179FFD91F0265090A6079FFDD4BAD43CFFEC2C1AC2B79B62445F35C59B9\n"
+":402FC0002940027C0927FCEE1840917A0413E038EB8374FCC9222154488264B73EF12F083A8CC6394D0802E0A79CF44C01D2C9480A607A5EB8B2E55005C4FEEE3F1E914F7F\n"
+":403000001F01F7174EB38E23910144C8F2C06C37CD066E9979D4C4421ED6BF38B130029003B96F87D2F8E3D5786900A25755BE8881C9B24B122C7831D4C2F024BAA64038D9\n"
+":403040009D468879E9DAE103071368200242EE96C61890E75AE37B90F4467177A5C8C500A38068420EC6C442343D21924071E5105E90441003D91EC4071640E66F789E022F\n"
+":40308000C765AC19A088685F695C8A107207841DC00090448F49DC100D80291F154D106BECAEA9DCE44C20F38E78B1873E0288623D102A82FF2C3C1089E71AB1137CE3388E\n"
+":4030C000226F5E51201A8D88F9C410C994BA483882CC4908783848BB8EC8BD6910979FCB0C9868444728F8BC16B844B7A7788894470200EB0E2F0291861D149A98121299DD\n"
+":4031000040A899D952422901E7500377001D9DF57739CCC881A6D52C300F9A020B14F000D10FDABA63A111440B0742318F9156901A5B48482315828F0D341F479F979A6E36\n"
+":4031400044D6980AF5208A1EF708364D1360B8120B7F01BC8F823947C52EC4027ABEFD1028D734C9F0189E09BAB69C44D1F4AEE373E3D3F54401F54028E5F00F961144A2BF\n"
+":40318000CB4B22D806B0A013C13C73C900E4F811C68907C14DE409F82530AC58405883E2D262A2480140E84871A148C8124C22A2487703C0F90B9468900649844C733B46D9\n"
+":4031C000280B9123A4BE0ACA004F0517BB888169619DD20154ACB200513C14C7243287B9FDE2EBEB6893018A90CF960222070AD0A1D3E6CA74E5B8B137C60E52EC41E124EF\n"
+":40320000210415216CD5049F9DB6D421403F3B6D384F041E97C42F3B6CA40610D66D419097C0D08778905292D1890C407592F1B019280340B76F2C0F6BD28F815C881E8993\n"
+":4032400021DC0843D2B602C014A0072F4780261674310EE4162450E96B0128B2340BAF998B1239047E087A2EAC5B1EF7741EC1BA1EF3EA1BC0C331C87CFEB886942070ED6C\n"
+":4032800001820793D1240675D1B8B1AA9F163D202A2C1149F87E48AF671390F2C5641DF4CE20790B64D029828F3D7A0816C79D980FBF2F878F0F89AC2EA04D1A30406481A6\n"
+":4032C000E2D4A4C603D9008EF301D83EC410F08A389FDDFB0A44866CC081C150679C1A3A0F2235453F2EA208240601A120C85AA1C7C344C43C014C1C100AF1BDE1034F6948\n"
+":4033000008F36FC1EC79F2CAE6289446A9514940D711C24030A41038B9520019D2079480E84A9E0AD21C072C25280067501E4621D7B4C2C71F4E1E7DD65C8DA07B46607A25\n"
+":403340008A38C39EA2F443A82B08BAF3B4588206C100401E45679DA25202EE01321BA1DB87C78847E00983E8DD4163C92263EC38F238A3CEE7C810BCED14A79DA20821F5A0\n"
+":40338000DA6A1E76DF100CF303C140742B68CB0822943D1000189A00DF259523ABA3C9C5814486EBB01263C50EE59D3C5D1706219758D8092243521008AF3003C4F62180B9\n"
+":4033C00020284500411A06038845E07591093D0810A02DAA802289A27355085AB3843D33CC61A6438242174B88CF4C1A21C6EA8421EA36413472D9CBB9BEC7C4DC62689E56\n"
+":40340000FCA4790D7C30EB2C0707D080E40847CA148B19089E4409C1CA13D2344F0245025736FCBCA546392863D457A394B62761118C04BB7CD079495930793042782D54F6\n"
+":403440008C110480D130886A02F288E4034F0DEF97520C0F806107D1F763CA4DCBBBAB50F3BFD979DB8C4DC358DFEFB081150160A81115C2C1002023C160A01114FBA1F885\n"
+":403480004910582C047CCFE42C11A3C1E7DC38426C0F059C188A1D81CC5DBB523E62C911C40BEBD642B3510E20412C0BC4001231560963B52E325A36931EB66820241A906B\n"
+":4034C000238D6C581093E57EA3211024368640DEE4BD0897C481EC2BFA0AA4481C5F64041CD2A2EFCB81EB1791F3CAD99AD1043F313F881E3F1A61302A0AD41472190102C5\n"
+":403500002F003EBDB72EBBFA2022F003058129526512980866B014BCBEE444C0416E84B30045B1EBAFBECBD23386395B810D2BF1C410C49F72D588216DF48081393EADF386\n"
+":4035400019C867F0700F93D30F89833A00C05FFB5C14BA42307D36BA5A5B21080C2ED82F299C484ED83140D622AB2848AF196E17404D09D3C545C4401A029CF693CF1A12E0\n"
+":403580009BA23587A0380BAB845322AE692B1F88C64304435813C73B1229BAA568473B9451EADD61C414364C0F0A54A1A3EA3B9F51C0208F840E8BAD7767D4B7E2C10011DE\n"
+":4035C00010453101EDC7A124C4FF4BDB880DBBBE8F89410862288C6208C71F4E50980E240CE28867EA9FC2208681F4C508C0E2004328828EC60B2208291ECA5AC70B5101EE\n"
+":403600004404F87F34C6534C5624814C1C40491AD9C202601643A74A0691A62A0F2029240A926307A2970A2CBCE00281A227DFC40590EBE70CC1138B20D94005F08839CD74\n"
+":40364000007610A5184E812007A00C9F88820347E397D6CCE9484082038A20B61C4C0529100DCC9062014457C411ABEBFA4100C8334441B3D0941E703422C4A08B30FBCFE9\n"
+":4036800072A200C4A250A80743C0CA81893DFA1C221B051521208C05DB9F842D60E0A8012888030C82048A23CBCE3365E70DD2208F3F386F1507133D01CD80E83C23D6E5F0\n"
+":4036C0002221A73181043A9445A4389069CC42069A6129279CBC2511ABE5AD4107B9350081C4B1800719E0993FD7D9E56710244CCF38A50F9C50849150AA00E56603201FD5\n"
+":403700003865116266A7478444E40E2270642A1F6BF82394CC986998BC885CDE42E2BE9BF82312E2010811C05C580D0C44489CC86A572A60860200A1F697E8F1C65120817A\n"
+":403740007288F7A5C99F0A35EC0C170A05C8F080940E24C8DF388D13052A05D1446C84A8244CD06868ED2DA18931E00F3546135861238EC234A009EC203E736A3AAD005C1B\n"
+":40378000AE2B2B20981DD38803405A6393CE082C0C02066F7E828B05883161030747B397D04D646CF4EA59F8AD18452E412A45107BE7151306133404FB10802C0CF9C57593\n"
+":4037C00008B30653E92A711288207C85ADD3288BF4E5C223101E0FFE1E292C20692011489110C9528021F38A10961577020D901024063AEE40B028D33543D89119148A46FF\n"
+":4038000001CA8656452AE20466249421D026067C63D05814DDFACC45808F1246905D140490F24863E501A3D6F16A1A415104300F63E91029176604529D8A665B18DC88450B\n"
+":4038400040E47961F3008FD6436800C42867EAB524020E4B6E5E69022E4DB05AD5A107888B8A84D0074E12007A3039654083870F2CA918302A020F13AD18360507410FA939\n"
+":403880006A44D10489100BCFA0A45C14658805A5824B08B05780978911DE718C54348A137121E3C3E08A8E48E8E78B0A315E6C5970041A848C8162CF86C38D93D523D12167\n"
+":4038C000A859E715E6CB648F47A740398F260230A02C0BC330D83D3C202843114471244C13C553C05D17C6188318C671B0711D87B200852288E24C96267CE2BF25495C5A1D\n"
+":403900009726018E70000318B6781983D884781943D0D83985E7818DE71591C0001CEFB84F00AFCE2B277CB817CE07B2843816CE07828816050379DCE2C02AA0190379D85E\n"
+":4039400062C01E3D888781483D88A781443D88E78141D234C2619E04F0F639440935D24125C56B44963A87F3C007F38AA21E87321C1F20476935848C1EC583C08A1EC5A3AE\n"
+":40398000C0881EC593C0861CC50EC59123C082AEF2AEE23C07E892ED68323C0788544CB3C07452328F01B99198780D4C8CD40C8C8C53C2ECF06023F38AA90B912899C7800A\n"
+":4039C000ACD106780A9929030602879E8004713C04E02F06F01C1E715230DA10DB2B81B381406320121E23C455C2C0AE40221CA041038A2F0B60C94A0704C0EC9498344372\n"
+":403A00006F38A5A37CE05450136A3E714B136A1C4937E3D10045B00CD07E0738AFE0B03DCC080125B55517B3F94A203A7C450C0EA019B81AA0D818690381079C56D305B377\n"
+":403A4000DEC44F3C45FC83031490D0CA2809922177AA3707319C7CCDBE46FE9FB4790FC881E6B74F94882C190220896C0C9AA06DCE1010941CB118BDA7D2381A0021F0EA94\n"
+":403A8000E97631E0901EAE9C1080B606703508508FB7840A10B13D1683C08353934D24B7A88FC4FC47B122441FE4EFCD813EA1E313934D245E853B1034D0018180C804111A\n"
+":403AC0003C8AD08067DD9089F8CA88FB15A8B18586BD904D73F393940809DCFC43E79301340FA24029F1A2E243A851DF7F227D97A147AF00C871263BD0A44F721C440B3132\n"
+":403B0000B10087E884C920BB4C08F17741E1E6F101038ED014EB214D33BA144083B48642280ED4804E3B942307B5B31021C211E4D52C4018320089DA021D7B44886552CA83\n"
+":403B40001AA6E94A0196A22F9B3B0402294241E8503A009F3C5088428106681BA0617D93BC262F51AA09B848199DDC124079647E9DE3C1A0528025A989DF02650A07F9A290\n"
+":403B8000730024A80AC1F3D53F0800424D2F43AA561132833E3AD0467100007B33E04C51C81AEA5E912788600C86186990E1760607B2D610442F40DC880C0E04049F8B9E91\n"
+":403BC00004782D4B0385000FD7A2031E39A1425D540A839051D74E22C17480481790043FA83BC9921902EC29A801109400734EE5E8282991798E78413F26AD48207590C30A\n"
+":403C0000D9DE6A969E6EB0102C0CEAD3C1A8612C883280F13C4D52C47BF13280B7EC7B13F1E334867C6070CD2278821847BBFE40A124C20F54DC0D6E06C0DE2048260093DC\n"
+":403C4000E4905581780B20A8D229A2C0FF338011F6E8C40083FA100D728CDE004AF303B11A88782C0FF3C513488F24805F2F438E173027BBB43C89202B4F2E24E151D16E8D\n"
+":403C80004257B0548000086B2C2EEE7E40D32149311791368DF8102274EA40884041E240791C3478FAD1767298851C7DC91F53AC90C1EB3241238A8283D4EB881A044428DF\n"
+":403CC000913042461A246150C7B548CC0DF6E2C9014431FE37F65AFC9CA19F45EB0900144101D24B78E8E44032ECE5EA3352F4A4111A44264AC08BC410A538810428940223\n"
+":403D0000EF8822CC02F0FF78F2AD412803DEA09C11F490094D018BD5A0023E23E388A3BC5C0263405E8811E147C2AD453681AA3B01A2F04A3011BD6E1B35D2056F18CE132F\n"
+":403D40004455F424F1771639162051E8061A4317A9EA46BB4062E996B317B50BA455040680A9D8CBC55E2186048D019F8F7726337A9F04C5544D9F48108F73298815CA2658\n"
+":403D80008454D43A8F54EE8D9D04502A020E3DDC4609499BA25DD9A888B440FAD3207B480C981650280C0003B8334BC700C2C00E7A86610488BADD2D0F66A10881E74666EB\n"
+":403DC000AEAA0B82E301BC7A9400AC3216FC0AE68EE42A11A40107CD50B885F40C520230104F03989B8068F3FA08FA9D7C7AEF8440104F5C71361880C347D66688853D8459\n"
+":403E0000BCB4754220067164004C037268C397648908801A2068075262AA10B9F825820114025CD680102553710DAE4F400715D0CE7644D10CB3C50676002002137931D1F8\n"
+":403E40001A218729182F6B371861EAF162E41024780B5A2E24007F6BA423E266E3F13391667D08099E043C3E18838CBB810104EF179B371817CE0951B39496F96F21C133DF\n"
+":403E8000D13B48731C02CB202E400841C137300940883A427AE091407705F1030CEC4305B10810427C23D21FB3D7523310231C20849AFA240213C11EB75A394080839C6059\n"
+":403EC000850C8017ED0DFC13E08CA13C18E53C05D4F8E45004C7881FC9A38C3CCF031098E9254E804BB83D470D6000DC8404CFE06CA0500240E0FBCBD312D00A799FE6798D\n"
+":403F0000FE6100A77C1800A75F8DFB16D7E8096167E31C796289DD810699AA387A953C80B1E0FD3080F0881E102188081A383B1C9F219F68BC10F4198006B0D26A8D3E0E7D\n"
+":403F4000C31C9A31298E003CF607BC657C3CB95C805306AF40A5F1CFC10C7C99CCC63F716B1CA02F060F05F220307A9A71517913545E50BCC3D514664AFAA5A10144D116CE\n"
+":403F8000D64D0163CF4A821E808281AC2BF8D9247A1D2440C19A960170021A22A79326C7CF4E2981829451F9C2E47CF4E480182144189A8F9545CA7111353F532B2DEA69B9\n"
+":403FC000F2834C484C95F535C20189A21DAD722132109808101098082D3D4D30F2FB6F3D859500443A835439560E1B06ED8366C1AFA9AC910D14C0416433F07002628F4299\n"
+":404000007121EA68A309BD80BC8FA9F78BD4D50D74B05178EA992D3521794290CB44434F54702BEA6AA6BB92309FD7DFBF736CC1F327998143204400F2EB644A6003564A25\n"
+":404040002048D5EB36B130801003C79864689C7D369887B15147005410A0103868DC86206E8C087C6BD026FD7C8FABD5870C289BE681C0108B201F8AFA46203B314040D3EF\n"
+":4040800048DE851F42B28C41419312011CC48D8FEC4DFDD6388A0114D33798090D2378A2182088D3920C60146204C4069F43C291C05194133100861C9C9860060090B0301B\n"
+":4040C0004CE6C1BD0A4011CB57C05009F45041208880344DCEAAA6122D13C7416642B067D79F02699B1EC3881363AE72130B3B05F88E1213C23F237CC804C6CF87CC47C036\n"
+":40410000ADE3E8D6531E824F4BF291AA689E4051A4689142079870C41036982B840F3A0D090052A06919A490803C88814EA678836344C9980009196E520364082BBC8C5FBB\n"
+":4041400025C901D533C335018DCB85C8E901668260242390348BF3A406EF04E1F3E418B0101AA6002A2A82040F81664E2930549A044010242100C1E880F1CDA081BD747E4D\n"
+":40418000247799500AEE283B406EBA452F329F14B04AE21440F1461A2010F4131A258122607A0AC50297B091040137BCF51823101C1C8243AF55AF181FE7A8D4BCCA56A143\n"
+":4041C000B2604EA0C003339365C9345C90B0C4DD3409843DA25843C04851ED6F6371410104B54E01A048111C7F0CFB92488D01EC80F16FD89A04A033E81D82007C6248893B\n"
+":40420000FD711206B1204F280E5E5B092A9A016EFFD0BF28091D5E609002279537C7BC2CC88234C893888435C89E74DE358E1DCAEC4081B1D3D3336950F4370890C4C041EB\n"
+":40424000E3BD94878038D12109908100500DC27F1E628F12AF00989A03F931E77821364101E4BA2AC202BC201E0B8E66505A96E12E0790B8D71C30AA002FDC5212C7A268CA\n"
+":4042800087999C11C444045D945E40582FE075F1087C529A90824197C79018680E06DFAEAC04A3023947908C7C80A04123406E28413AC703406DF49B38FAB5ACBBAA787AC5\n"
+":4042C000F66C40CE962D10607804C0F2881BF07C04EA3290F724C0945CB7ACC0A98101E0B32E0CEE3E326029B431F891444322881305C5B25F2704842E8FA71204B9310EB3\n"
+":40430000140683F4BF310B8313A5C2489E40E7007C14643747009E4D0808181DB6C043D6D82221011C3905E731081372B1C13D3D39E22011830400181C5D09BDB70E21603F\n"
+":40434000E4446A314441F1BC810E227783D948711087E340BE04309A80F462946248F2181AC221461579A5BCA842196FA3923E23F85C4F764E00C3075F2C8C38EAF6642C7D\n"
+":40438000EE21323C076B8B10070F4CA46433218BBDB70BAC268855B8404422411EB09E20E03847C390C41C7B8FD840FE47B457D50823B1070827282C6642065F3022577864\n"
+":4043C0001E14A0437CC6010DF29B84151319EBCFC20F6585D92305D82C08F7437179B10884B1F042D9CD8AFA82F316E27C01D6BAEB90BCCA6C975D7E174F59175746103901\n"
+":40440000A4EC47BC1C0CB8478051906F730086FE18741E14E02C314904372DBCC5E843F9F63FF633B0C11033DD4D8880DD05582061D40DE81DC40D2A81BD7B608D05E773C5\n"
+":40444000E989B51064D03687642C8F83A207CD3D445B0605B797340C062C432540384A0CBAB3610C2A80379200D7424E880BE5FE02F2F868821D7A445CA900B979011308F1\n"
+":4044800059A08D62E4960007A0B22072C2448E103D7ABA830C72F262BF2489B180963847B033CC704878C7CC59F5D8F0F993A8BC6506260F7082091E529C85280E3D0CBDB3\n"
+":4044C000C10C452F98E0C7A45F46FD80E6884330013A061AE52781BAC719180C1CA7988B8140B81972E1840F354A02943C27FD17163E6DC9202E930B35EE16BB027C0B25ED\n"
+":40450000BCDBA460598D1288244F8192244B6520409F0359144BF2B7A8F56680847E734218E1003CA8B821EB030970667AF0B88B8F32BC100A6810E5287D6AB0F40FB88E3D\n"
+":40454000BDFACE41978F9584D720FDA2C85CC3D840EED5C9221BAD49C79A9E1692384993D80103C220C8E0E433847691E0B01B2202BBC695250600693C873767103D127B6B\n"
+":40458000D010A24F77FFE0CC07E775512B80CB560F819E449905EB72099060B600699004398B02680D844041349589A0D21AFB0DED2B780134C74EEE178E058AB6C0B930EE\n"
+":4045C00058F20268972029755300129A2319A631F985A0F00A88FA1397AC7B8CBCB234C45FEB7A0224C622F40AF37122221FB04104A5E91661117CDC3081B037F95C8C8050\n"
+":40460000438432CFE6405A840EB2C1202C1208BD70523E9887234052ECC07112CF60040E14A9421A6EA104FCAA0C669A04F1AFD94D23DA7CA443E72F98142F551972D0E13C\n"
+":40464000240D612086C52407F065E5CB3321819030F6852F0D0808C27B21DC37420610E00C9CC2E5225486032DF112112AB42F420D018654298045A81A43D660C90C0652EC\n"
+":4046800024117638154D7A895858C353051353501F1DC470207582C09DF35B0179AF705810D036D875C8B096A378140159B080A30919000D06E13A07012794419656744449\n"
+":4046C000811F8D32D4301FA750347D07587E16421A5660F801E9DA52D90588C0E4FB1248F49D9181199CE220143EA96E10CB97871F992712CA4E2C7BC3E66EE312C78D9BB7\n"
+":40470000B0428473980BA8928BCDBF4B76427106F92B42070988ED93F4C0A880DFCBED8B1A884D00699E6691E64D8004D0404D697B44D03C8982A8983B337504402408D300\n"
+":4047400044F0ED33F1390BD108A12809B284662F8982AF5B9C31631489424D144C7B7C8C4653F629589030C9A28C983B62D96183110290983B9D14883149A294983BDD140A\n"
+":40478000A83189A2990783A29903393423A0111887AEB48F163911A4F5CC919420380458D4311A063FA5010B632A33F722184FEF3300173D252207B90D075B1E974F99A0A7\n"
+":4047C0001108D8EAC0B8F2E8D8F98ED87CC7A63E63C531F12F2FA01305DAD7937290C7E60193A182560E26D0E45D0E64D76BA39045EA15F21011D25818888FB565C981206E\n"
+":4048000031B6389A25378574880BB0909B40C7963350CCE2103BA6A28B33D07C9E003A82B2E970E1105AEC1711D55717287A2D568972C562EC1C51EA1131C61E1A44B1F4D7\n"
+":40484000EB20CC42C780EB84CA1C8AAF22C997B9F54D868400389E08CE0440447934C858F269B0823E4E042F706D088C1881EC08418F7F8C17937FC7B2588C2F03C8206C91\n"
+":4048800020F26FF25DBFDA87352F1EE128404A1D4F1C9AE407B1EC0F074131887BF26DE0CB02F2100C4013A48604C52831D65E17936F88021ED0E7A3620E8083178B08C4D5\n"
+":4048C0001B0128E00911C244026274848131420C7C5F5825EF97D887C9BA0C8CAB61179365CCE201FC9B2C87935E8C0453000B3BBC12D3608801E8F731B8AC7BB0910F3297\n"
+":40490000413CBB7841896DF4D20197404EC69E388FC0D11149807099D0278F995F44CC4F29CC7CC7FC35DE0690845100304041793D30BD031EA752138F82CE8A9020348A1E\n"
+":404940009D8CAE20A9038E3408601002F21A108023D80C5D80FE501D234836268603442826BBD8744B10049A008B1008D00CC98EE6323AAF0348312C4638E08D1016304685\n"
+":4049800046006402E66588CE7F84E680598C04CDD401EEDE071F31D9884026FA38B8C29F2F1E0E6DB88430E3DC4DA5E67042A1E069849E8068109250597A8226F63A1970EA\n"
+":4049C0004AC9087D56F0617CB12F5F329798BA4424346980843224029EE5C510CB642020302CC76086AAB07CC778398908041988C202108D0B08F522B1910CDFE82306D450\n"
+":404A0000B9596985D9B792C01A162222601E1F71E88F98ED90F30DB21E63C23F30DC2977809B451F9C428989F130BFCC6285C9E698038AA0C880E66145E616C40D633B39B8\n"
+":404A4000244513D804340CD2D816BFCC2B342FD42203A7C9C84436BB3AE081E275036BA6BB50BC884E2007997F9F2AD3227F1C786BE350F30DC09825D03DE7B382354BEEFA\n"
+":404A8000D086120C85098EB014150A41020CEB208B9286348B934079117CC61C610810308040F1AE5B12E0A9A25B685AC41A0C8A0C6702248080813C09F97D2CBA1A04BC46\n"
+":404AC00014423E5C0F1C76A00D841E5F4630E897053CE7E834243DA7AE407F9DDD889704E204CA51F2DE1098BE1D0B9F6FFF8EBEA47CC3E660306219101CC93932B90A5E1F\n"
+":404B00008D8E48F601FCC3CE98360719C11781F7C7A0EC44CF08750483E9DAE2BBD07CF9363D32325B2E98ED4EA43F065D596A25C1945C79E1F46567EDB983014F50C8A0E4\n"
+":404B4000EBDAE60C12A01B3835EB43D7B4481E0A07E0F418C4227C0F218FA86E8A1D13D3AF5A8A24C41EBD6D630090DDE00407903F91003CC2BA9F548F8B05279856511B3B\n"
+":404B80001449238180D2AAE281A47839EBC889210BCC6F4223F9952887BF191B08F7E6359134063CCD211E4DD18CBB318BB02305F8798E144C6EB5032ABE0ED5E81050A5A5\n"
+":404BC000ECA4F1083B2F2C42037FB8ED48D1ED30B13C058D02C1121D7E40776801A62ADDA245C84F7651126611701405C010202B12661F2CD412061458BC480270BC2530A7\n"
+":404C000046737C7F0E89B09797448824308B3D70B620878511C826022300D6123D848C44F02206885526167E01C86AEC8C52F30AE2188705AE71E62018D01D04CC046601E0\n"
+":404C400077D5502447DDDD03F8CA529CC6B878479C1A00A2D719099C3D80A528CE0B046081060B5A980802EC08F392C8F971C0FCB2703E614612973C307BC6CC716F413E52\n"
+":404C800052F26C113402D24072240D32ECCBF2E5011200A79998058B030CCE16C300A4D70ABCC2864C50C033BCC282645A8114C0C32ED1D2BD026997CC17C898A52F9845E5\n"
+":404CC00047CC226D1A60E14A08F5AA889D68020088E8008AA12F98449104C220045326FBA4284F6312E950250D23D028F69F90810780B3E068633091C32C1D938886412131\n"
+":404D00006BB50982C2FE8479752220A109E615653CB1B459CA45D8A845A2982C36C1D7B6C4060241973BB11F69D8A1CBF0C7ACB18620C3AD4C41047AFDE475FBA2060167A0\n"
+":404D40005461748A2889DED0492D9864C5FD2D091C03F016694681B23FF432E08140598D3321DD2B025F4290EDEE67722C9BE91E121F8CF2F8081E4C5F2C5F15A587CC2A79\n"
+":404D8000C2528AA6895E4C8064C884A7E0614160BA336AD85866AC84A9F30A888A84818890AA519804820D029BAD544460D54D09D2417B61CC80FD879C48326EE1D0288B97\n"
+":404DC000810C7E154A6F30A609A6504903CC29452122210C19246B13BDA5A020F8062F1A3EDC29125BCC294433036102A013995620D72E7D1F30A59F985292F30A3AB70028\n"
+":404E0000A4E04B2A12CC0A5063C14DA2C01861045CBABC48EF30A422528324B240615D1451204B798525129500513E37B9123982E120A18013E36411259C0A543A06F8651A\n"
+":404E4000403D264779851D12941C25940A5412C070182F469F98520CB9260B92663C7CC294A0CEABE5A2A1195B295447DB8512B7021DA486222142C597E022E916420FAD35\n"
+":404E8000EC0680B7DF1F2860863306D6C56B503C81E3A09CE621844A807D003C2077A22C440327405D6728C2000A4EA1E71A812882308214B59DC508572A016BE9A3011EE1\n"
+":404EC00001D9181E0109D24E9D00EF4CD00CB4862481D640E0F21E0F1820606A96112C0113A12A1EA6421969836A1380B0018142779FFCA4190CB985709A01BFA382CFD7F2\n"
+":404F0000102800DEADDE1B8DC7D5BC258DA6023E7B10441064801825049A6581244093A004244AB3C3631C1D58F223BA963480243CA7CA200F9910442034823E5208A12507\n"
+":404F4000CE3FC793BC8807E6383222C604BB36D2460360D607BC8D56443791BB0BA6A50BBB2986183D2972654FA7FBC401F6F5F176A6E8DC1E07EF6F8010FE029B40EF2500\n"
+":404F8000971394790F6B9C3CD9B4780A42A940550CB9FD91F612F23E629C1F31481798A2CBCC218D67FB221123CE320C14F50B21065DD5183EB8CF22EC8D21425340DB36F2\n"
+":404FC000827200ECE55C2202ED5602675C841DC4D422F104137A821C4251E464038E32404101CF10CB334840F1D832103D2638B1AE6791E069AC66F907A08D533495EAD009\n"
+":40500000A4470D7330E42609276C91F0AC4080862C20927DE912370781C9D8989208FBA004ACEE07904F2C0F216B09241302A08803EE4399C8A310BC9147BBDE842203CF97\n"
+":40504000A0CBCF7AE3607028BC48CE2790792311D4003488F0B486F06D08847D8F7A2C7707210823C084079AD230E8D1C12887DF74790F461289750427B9DA0DF31B3110F1\n"
+":405080003644C30181AD6F89F893F058882C54E0DEC14E2026A1950004FF4049DC92A7221C7C3D0E32140D64FC831E80FA5E14C56E25F100086B30980C6CA1CB0291F46231\n"
+":4050C000D0F8B53C7C8B683E25371EDA702C958103713F0924381167F97468920408AE156B0D8BB9F6040C2F81ACF3A2EDD792287C8AFC89104002FAC4543C436421E10079\n"
+":405100000776EB2CC847BE5890AA85FA243C7AD2BC8FF298D21E07602012F334C09D013C18FADD344B010BBB7BC423C936407040B90B2AA848338402EE1481DC72A618483E\n"
+":405140001C1F604179F0FC42BEF77D1F12EE899E43F800BC47709C7F28BA10184F12004203AE800EF1A11F023788CC4003474019ED9DC1360A2047BF234882D7370FAFE212\n"
+":405180000485CD4E1F6FF4CD9BC3988017294E1202FF04796BA284B06487902C0403EFF8C444B43C04CA23E9807A049E1F4B1060D213BB18FD220BB24B488EAA323444D170\n"
+":4051C000F413047C8F783DB9F8979B01C43E3D00EF41CE8EA6FC4960E40B1AA445EDEA72CB981C05400980A508643078D58910A98E76AA3972E20B9AA1ED4BA21C254CC0EA\n"
+":405200003A671B390040793BD8E3826B063DA504216816134510CE0F93A0D90C17171E1D96205A2080513432F730C8E3CA33890100D60A08E034D109B37504B21D469044E1\n"
+":405240004CEA203128C0E0981B080D009FA611872E74CD20849200FBEC38C912382DF1C370925DA81C5290020ED2005088103C00E79F82688324087474A1E30641C0CE45D2\n"
+":4052800000CA4E94BE017010CB96AF202956E2A5F760B691A0069AA07921E3BD21F2E3D0E0000B8820F804011F45BA88A1D466624820041000D7A4F413EC12113C01AC2FB7\n"
+":4052C00083930C206697B0880F5B73280F617C2D1F617A8B58C16F21AE90C77B7199A8792A20FBD0A442137F29904850DC1E130100094C850FB470E5AB3911000A11AC5650\n"
+":405300005E04C71CF8B541B2E0B3D564981A4D1FE77EAD207C4AF63CB56442CEA6FD2384802203CF558F8999E71E91048E920F14F8817E2E071080E91F7AB920A87201C1B7\n"
+":4053400031E938912D0B0108A83F33E8CBAB43076147121B9B240EA59C4403A08EF19670823D47EE4389D40499D3E18740F0900A6CC38243061DEB92474EB1186671601485\n"
+":40538000D6B3894C187B9FE48091CAB44BC9C3E5E4F3430AA28C5E4FCFF6024F7268812F0B0F740698122545101BEDA8B11D7BB4EA7A9AC4F4ACA3EEEE74441EE8A7120BC7\n"
+":4053C00060A22D4CA0F93EB87BDAA24C42D901D40A1F4421F7B5E244B3F68E61021E1CB420243AA125AD001E8E55103032AFA0F37700D24036BB86D04160285D0C01105877\n"
+":405400004DEA99B10AB9D458B1A78748F208886057C95D05688021814F092990107D4C05AFF621E811344B0EB7B62EB0109F30E84961E4C9B19EC07A0081E03B12C0428B7F\n"
+":405440001A6122E5D6C5102022009042096B0B841306CD42D08421BD2E0E20416D4090E757A3E1F2E3022A010658C6FE249756D597567014C65EA56442E5930EFCDA162076\n"
+":405480009860080283078721500203E951F31B91C35C1DFAF63E1F891980BC9CA25388D4B08100F271053D816C2078CCE481B270B3302B84013253D4E3A6C310432F23406B\n"
+":4054C0007CC7DA2541A03FF6301895BE599611F87102898EC50C23881ACE0E1EC2683D5FB0F2B141F05EB0F8D2F041BDA05CCC68E3F64AB08E1D5B40575587AB274403EB17\n"
+":405500007CF230313B08CBAEC41103B09DCBC73147D25B8278060050AA100213B881E3F945DA16221ED6315EBC12F2B29A5E2916138C1B3A25E0069CE4B085B1C79784592D\n"
+":405540000A712F649490F278B1E63051E9BD419947C73A220553623C008F64EA96D54E539156B103C2682C017A2D10AA38AD705B1280D491E29D063DD3C47E1ED7301AC9D5\n"
+":405580002571705002034F7C3B60040FFE5B6712BB14F1798CA8C41F475220050440D841AF082F1BBB4881E66614309816B000A652DC7AA441ED9193999724042F65AE1178\n"
+":4055C0004C5A14C0AF6492A0071B40D6B8C47C3A6E3348F7F7F9DA14C0E30A2C99871034F0EBE07102807B1B85A6407008BDD2F263953842898F74179003526868160AF6FF\n"
+":405600002101276400D3EC9338BC3EB8566219980764FCCA3E3669036BBFCD12F12059825E12EE29E111493B4A05012EE8A8116401178F0062E1E2B88873CB88A74745CCC1\n"
+":4056400059BBC41C64D30F74B5CDC5C3043B13717A1240870DA07CB9EC8881D46CFB26A06184024C7202025F130E8DA0C2A5007112B65102BD28B02514E4271A32B42FFB38\n"
+":4056800086F9EAA09A554E414000780C71E20C80287B83DC80D2EA3912D930A8C0F0E6E0F8E65CB4C24219FB2BD884B21F607B2F74118C9C24C24729114B0A368762F0FB35\n"
+":4056C000F8968000143BFB0BB240B09485F1AC308339712412933DA58657F708555484040B6037A65346AB080DB001EC956555899D8A002551901A19273C0550A53D220D9B\n"
+":405700002902CB0A8C0043D967C74300F12413900039C5398700D0C8841CEF3731F2CBE8DAD204C04CC203C5E09020B1D94F804003373B114DB206A040865D3AA490BC19A6\n"
+":40574000287696F882A480078D78F00B8146802A9EFE771F014B89A208912169C241682DA40BD08F11A20691379D99A2061020B9BE007A3B3522043EDBA4847EAC847DC922\n"
+":405780000C7D66B8876855968F2080CD7A718181353A2BBD17D13F0D69901E591FE57F4EB7164D90DDB420408C7F99FD72B267B54D1945755217540D93C00EA6A7EC8AF138\n"
+":4057C000F6B829FB7D9C40C01A7B21DF9687CF8A3EC4E5200521DC3AF3ED320029C21978F05143A4D13A8800689129E5600782DE1DE72E737E7DC30F2029CB4F40D0394DEE\n"
+":405800001E95DB16188310B4D9057981E0884681CA500806D7B6EF27CB13C2039B04FF8C8007ACF2106BB405079E478F8D14D0F77588805D5D3424072E0744AD47DA6F033B\n"
+":40584000CB8C49860D528728307C94423D730020C858006E4D46C00C19041E343C40D533CAD072484689964008DEAB731AB7118058EA6D71332A64407EF1EA120C83024BFB\n"
+":40588000A184A302B382C4532344C1ABC69C66000CC568184681B7E589645099588D808100B4DD84061FD5301E05C0113C0E04C133176F091213A79984C4F2F1C973C9E14D\n"
+":4058C000294D9F2285118BE22A8122372571034AD0300D3A81A60D02CF3ED4CE5A8A480CAFA47C833A22BD0223A80F34CA124C0AF1581274A0182CC0ABA2406A0247A040E3\n"
+":40590000B505E8101E867018474F006FED30C2681444006FD6B8C574825E3B389004BF23C0A13AB08072E823712140DE88E61C63C0214396C6F83CBEC47B844841100084AF\n"
+":4059400002BBA0D07AD880444F0598977FA10FA44CC7BA0E0AA202EDA0F23BA11A245F748889246811155C03F80817882499FC7901FD93E0236FA3C3C4621E851A6C207F4F\n"
+":4059800051E889803C022800E0020A5304770A30CE01B204763688F747B9E1A5028801EC051114CD71EAFBC88E0ED6821227C9B962331AC3B15E06F5D350E2CF23ED1CF36B\n"
+":4059C000C1C50E0540159CFF3E8F4028B33DD2EB6B8160A9890E6ED445804008DF547B48120C0AD87784A90085205C1DEC472434DA4341C3C3E543DBBB62328F02110A2319\n"
+":405A000010A63EBD5249360681E8C2A1C26A10BD1DE54288F6616CD427B3988F57C288C5B5CD95408975D15FE3DC9E436FF0031006BA2BFC767972F59AA10F26881228F653\n"
+":405A400078556CD72402805EBE552D7B988663C0A80487D6642EA8F01EA46B10303694979FF90C33ED35C100C1F074151081D0B815113AA8686BD0083872F4807972C4A2E6\n"
+":405A80002BC1DD1CD19BB67653D2D4220B9D0480146F1FE47F7693114A0702A1EF321A2363AA914580A490013BD768A5A0011DA1974ECA10DC190406D82BD0D6C384B00439\n"
+":405AC00092EC111E8242804920CA2F4511C801EE097311CA6EB04B11E4A4BDBC7C85C83D056A60CFA82E07C66B689E40D77C668807DE29C5E89A822FC2408EF930607B128F\n"
+":405B0000CF204315C87A6144B47725A5EC22E02A08007EA6A5100CFF1975B9426D790BC4BA0CF67D81EA6010AB3E814C507437718740786C18901B5A3218BC0B6B6E2E1DCD\n"
+":405B4000B34016746099A7A23AD64233878C27857122578809BA8E13C2DA650983B923010156666103A431A3EF22A1B718DB787C9D762D5B282D9EB68861001C8D3FFABE2C\n"
+":405B8000004CE3B26E2B6C1E32100B3C5D3C5D4B863E361516198A40274AA3004AE9041102CA1137462A2071A0129A2134DCF27D2836210F40201141ED2C9210B48B860DE5\n"
+":405BC00006598123A45D1070D10708005C0F0B81AD7EB159704D2048820347D08AB0C18036FCE1114DEEC4071C71605F0C277007DF4C420F76C428E3EB187101FCF58C996D\n"
+":405C0000F207DE3619AC8385C407836280800218865B8828D410929A52442F922A902340A4478662979C1F87985B19421068130832F41692B75CADE341E1E64F0472D1F31C\n"
+":405C4000096FC12EB8542F5C9197599908BDE5BF6939628E204D6EE30D121BA97147DBFCC375A0181E3D2010127E2298E0BB44BC92DA8065EDD4E509291858F844D3404E4B\n"
+":405C80002142EEB14410A80E0FA9C910A16853A0A32D50190FB478427ED91A2F248488884005A4077B714FB4534425E90FE4CFAF2E6C081C789F38CE843EC7D020B9748641\n"
+":405CC0002A542840336F68A82297098C18DD628565018A6AF5833890BE21C61A1C4007B961482F294C02004D354319B00A5128950CCA502C21C5F425CA192BC21EF81964C4\n"
+":405D00007B7B044D30A413F65BC0DCB68026687320010731A520086820083E1E2F2A803413DDE5C42B9E8BA91F87A8624405E682A20D212A80B7996B88A478008710025237\n"
+":405D4000895E1DD9106FD93AE36610028D10500D24A85110A15F75F2976FE48E93D44F0056EDC0910659F0D371020F7F455E89E05E981251C2DD03339F6FFD1B172D0799A2\n"
+":405D80002F840B0347E3FFD15F2218981B37D25E00E09ADE1AEE401EF268E21320DF9C2570639B1A9F7C7F89803B02C691800B0C1DF6B222012174E017F9BA244C8405C072\n"
+":405DC000840B0D010024061953A0767828FB347C4D12E91C81720FD0F1703091C69168061640D0C1DAE7846816A88185356611B3E11A244B92436250439BF58F922587B2F8\n"
+":405E0000918415D6440927DA57C43C977A6741250703AB01C8EC1C626F8425F82443F45E4890FE7443105B984C8F909D87C1FA03D041630A2092880C385BE000E1B43A0348\n"
+":405E400007A9415E0A03C19E5C025390F10A29C9CE1A812EE39E1F51500E2AD024C16222EB62D8EF840BED33E41965936409EB8621F45C08EC74E53D8627E06CD221B000C3\n"
+":405E800008C1D52B6200859D4C6E375289D5DD93C45C87A3884E116B6384B910F01C0CEC7BB26090248073E25B010340B3EAAD8B0208EA85D108C8C3D8DAF089899C40D667\n"
+":405EC000E02C8602A228AD8C7B7EA11340D254584C2EFD69130A425E10BF104C87010D11A3ACC7510032374BCE4884538081081012001E5D60403152CD88400B0182438378\n"
+":405F00005C6C6311202892038055CB5ECFC76EA45004C7580D498B4A183ED3311D0E70861101E3E462F0ADB97A0C78410CD432F2EC5084A9F374853636143D6846231814A6\n"
+":405F40001EF5ED708609007E8F99498035005014D4250F974F0C05ED4372D801C418F1C431449F4B2A10A10424875EDF2212241128218210A920AD4166BFC883143A76209A\n"
+":405F80004BA1C49A1D8481CC7AEE5812EE3963CEAC1D7488809CEBB043ECEB620502E400D3CB052069C548FB0B2FA113D03439898098CC25C223D030CAE51C2A4013062751\n"
+":405FC00001B37EB0037D951E2608E287942DD0D07C88103A865D89D83E3F2A210BC3C905E20251327DECFA6407626E10103F04BE611E2EE250100CC81D432F06FF118B2263\n"
+":4060000063A6E08E298CEC22C20A12C40033F431F05461F386843282846047D9AC83ECD683D482240F7A66F0FBE5D0AD34874DC98FB30C84D110B395CC7504747E6268F4E7\n"
+":40604000A008F2F6F1013C160E20E1DA037B5FBC41E862A420C5D8078F88486B0497629E889E07A00902BE9A411D01589B2147B28A87C34122048D51C44B061B2B42000818\n"
+":406080000989220002046915773BD1BCF83C6ED63A8401F179E8948307566A081200A0059EA400087401634153EA40011380203BB5E7C48D8F3F070D0B079FA02507D4A0B4\n"
+":4060C000A23D86BDA27C7ED9E4138086E6DE4551225317A01799CBD2D2701662497984A0417ECDEB1303C6102539001C0D82672047DDF283E66E12DC7A64072882729464D2\n"
+":4061000028BC2FA43061E11782B9A80A508FD23BA5EC8D02F340908478030CF50C7B33C110784450B8C8F805248557D90F2F6A1CA0E10231D88E0C0034826DD23449808911\n"
+":4061400012C0234FB8700B5380905DDBBC88E56210184C601A1B068181EE0912F72CA1764E894F20101E01078B9A072DC04F920C8202C0A0C702E0DC281DA186267E69903A\n"
+":406180009F9E0BF211A3D52A8206C884C2F106517ABCA087D130E3F067E88FBB909081676F7E4188956BC2ECEBE2EF568301AAC8BD63625CCF78B0D7C5DF03D49DE421EB22\n"
+":4061C0004F0402E74B0221E11F2830D9BFC7B902CFB97410DBB60BDB0CE9EC61A8B024002410E014686007A359441A083BC9010B59A1E0BAF2DDFF10A480681F79D0224110\n"
+":40620000E73309F4805BDB64246B1F44314BD794A5E99FE122820ACB80C7C776C21690DDEF903CEA5047A8810C816EF7C8448E513BF72721260A1F39370839942E40F04214\n"
+":4062400021F9ADC8460357658C1254771E4542C46035D02186B1FC5529C6034CEAED49110147B15095063BF70A444E9494101086033BDC3C8950781B8610044D0C7700A4EB\n"
+":406280000E2A10270F7BB99E13E063BE5308082868681AA6A91B5AD1D1C923EA6372023CDED9204744AF493BDEEE2881E07035AEBB3340CAEF770480E3281AD7559EE4E8DC\n"
+":4062C0004079740D70E369EE6E11ECCF323018F78B28835B6FE1F7BB80984981EB3180B08ACE0251CDE557E06B79B8EC7B216C7BB52864A5DF07C596B4240F9860C480CB9A\n"
+":4063000035400E1AA311304D62E47E0D5862FAA00C79EC3104418A06A96C4A8B21377A2DBCA255A80F604128F90281B4FA0384582607344980C903E9300A203C403C5FA0DE\n"
+":40634000F0177C0A6C3DE8B481488136D88F5116FDB130FD8126D4C601189800197C214280F207200E1800116A6F247B03900E92B80F40CEE65C47BF4D0CF622717FDE8BD6\n"
+":40638000444711C6096A7CF9AC28404EF45C2D1AB089E78017DE86285A3A28D01B6029770A1D44922C03C0576B1711F3DE8625E253A2EF42910F3D5A6C3DAEEE31E1DA28C6\n"
+":4063C000884843BD0707BD0C56047BD08D0CCD51643C8E130D3F06C58B23EA5DE87EA03D88D4481F0DE918AE680C8040440D141A2CA22741B2743DD28221ABB19008D91FDE\n"
+":40640000CB901F60643167D381821DF6B6B152602743E2741CEFB47196202BDA0446070073B5A14DFC3C50EF46831D94876640738039B00DE4D2596F79BB2E849410CBCACE\n"
+":40644000C7E230F9F5E27A70C88610285500043F43790883DEE0A749C4153F090007C4CB2662E0C81217CBC4421AA009789DB44720AE4E605F44940B03AA010B600871F57D\n"
+":40648000186919AC01A8F55B0A02021BABA2182F0031EDDA057CD3723E120F12E0E20140CB7EC76DF50F38EE43CC30B25C9D1EC6761007D5F285B56A8803E79EC2EF5344E9\n"
+":4064C000BC26787DD13C77340959DF26C87776A2C1A1A57480EA29844CEEEDA47AD5092EF5463C39320AF86BA05827E4420F410895ED5CE4424677788212C98D80BC7BD1D5\n"
+":406500005510107D4FCEEB82E0C1A5E8198163BC210BB60447B0FA8812AB622C725F8B5F523D22305DE6FC5E6E211323ACC80F493A30420865AE1021E16B919108E46B18AF\n"
+":406540009D9938860651DA4A04F0EFDA82048D0F3A9D9027D0360405DBF47BD16849A043BED7C40B2FA18BBAB98416F68EE902DCEC30C20EF4584F03F8F77F61121DE8B04A\n"
+":40658000C042B61C2FBD16C441EFB6E53CFF3E443043E33C31063C527E5DE89639548268143D724A24A6C19C80F1ED6973F60E9084195C241244990C11660E14A10C95623B\n"
+":4065C000CBF92EB309106A508025124544992D9CE4C909789608E47A8B1B7808812687A91B264C55C65B2F90813252ED0201027A43E8B603F2AB80EB97E1F6F8F10F64C7AA\n"
+":40660000B9BC0BBD1CD002C710C9212D9094049CD74A1011A13121BC3010E4E05B0800A8140888E11494427ED93F30408BDD71444584102BCAD4E6C9164EF8EF484161283D\n"
+":40664000E1203B364882088182102B2BAC8D21B336EC4062098F3E5D0909E25942E9BBC1003D9576582502B90C50EA290124085881EF34F2F2BA7913AC73B3F101025E848B\n"
+":4066800095127463D0DD91760204FE3DAC9D65821E1C511EB27E1F243F1899DB3582008430E3A28B43A1164442F57540F57730843E1B994043D41491E66C9B1E34FE12BB93\n"
+":4066C000440C5E8A44192815C101D602843ECCAD11E44F2B8403B4042E482D3E3088A0F0100A745830831E29DA1CA28206B6ED41363BC8C840443BD0C9733A8585070668B3\n"
+":406700003393FA20680A2191D2619D40EB0121048144E95CE00C7AEBB840A048EE046D600159700277AA819208F8F21CAD6507B0B24E811EBA2B28C01CC10CC922B8EC0976\n"
+":40674000D01E443EB0992ECE3C230244629EC0DA528444DCC381F58F017762E89EC23F7A7F94890F0F544F39361E874E11C78BABC818408C15183E0FC81F0D7888C6508C03\n"
+":4067800004280DCD138AD643A67A112CB8B6F09408F7A4610964633DD9947A0CE112F3C8A44BD06F0896D0965A33DC9206502381800850140B27C00EC2371033AD7547BAAA\n"
+":4067C0004147C11303DE892A13A22175DEA1C40F0243F75FD80F59D7193B4947BEB588121E81110FB7A890274622EE4444F0243E022208F3ADDD360252E510540210FBB229\n"
+":40680000CC89D2830BE98D67B131D2DDC221F44E788024C8416422ED61F1038722C82033085BDF40CC2080A3D885B650F5AB697B7BF45800BBD184C34D5431841EC2E02F08\n"
+":406840002AF7175F501F7A1495FF407EB7EF40F27003B9A9F157795772D5DA599045D5B4850C2606DDA85D8DFA5E793B4031F06CC243106287BEF80B0FB883441775BB9864\n"
+":406880004BDE7E4D0F438894071840C9C088EAC300000327038EDFBC3E2740121861DD47C4411EC2C218621C7BCF187CFED02C8828019B5911779E3A053779F922532B7BCC\n"
+":4068C00005445C44AED57430CA694BBCFC9120932197DE83A2433810CB45332299B7A1634413EF2A140D029981A81BEA9E010148BBA107A7CBC5804C260502525C8628B42A\n"
+":406900004A026076CAF8883A6C01F2E0088E0118103D54201B2030E02DDCDB04A1801189DB4538F9E5A5000805250610E7C14F84329703C76D8D8EE248376700A52531E8B0\n"
+":40694000DDDC4B0F18401E009F731F1B011F8BDCCFB6638C6AA4640C701EFB9096CDC022D826618E025F79E0B0166E3BA3108EE26A2C107DE7FC63C247F2A24FA61404FE21\n"
+":4069800079ED69412548020EE901A9A02B7C3E6C269FB07BC4EC902BEFA7110023CB348C882EF3EB3B97A049EB7B612FB6F5F1EF3EB21F910A53B4338B0408187D5721744A\n"
+":4069C0001C4901879574A006F7D8F102BDE7D688B204865536406A00310A18E7AF2207085EB70E1023C540A40E1E858191DCF9C4137A94648080C7D07E47DEF4E380240A0D\n"
+":406A0000ADD85C823E9ADC1C7801D9766303000DCD2220640C0F79E4884026DC462206C81220284F041D0DFA3D78902216CAC020C761511F40940F577E162E7030C41F13DB\n"
+":406A4000829C508E02DC5A5D70444D8E7E42772B450EF09E2207ABF24777131098800380BEEBE32094C0C19E1185E12811A063E57D92EA4641058020ABB7214825232BD443\n"
+":406A8000025107B69ECBB158CAB30BAF8D84453B89F0243B0C01EECBDC2EDEBE30AC1110FB53C8481B510103B7460F7164C9E3E1BBC1194F7214610675B4424273AEF2027C\n"
+":406AC000CDF203C38F02780AE3B194780AE071FE48886049F6586867C7CF5783D108C205893DC31E3E21571048FCC1460411C1D60782010EFB45B14C0043792F0AAA1A006D\n"
+":406B00003313BB220BD10E424178ED190EE456209858C03C594902245F6C5AC5A2910DC3820080686DB5E385A824C075997E06F62A1C214A90C0C4734044CEBC80C4028E1C\n"
+":406B40003F3F9F88095225AAA5100F9DAA10142FE821C45B2444136403C7B8225816228400881220861D73F423B8D1DBACC61CCCE660EC71C2021022079263AB05B05361DB\n"
+":406B80001B5001A8E0803A09191129B9D160600C03420343C9CAA22881604842210EC0D1E027637B02C35B7A3A3F4100BB3128431A7264182691069CA2D960704A63001564\n"
+":406BC000200F69B61A7258E500DB200C26004A5CCC5816A4020751B06D6F0CC8E0E8008684082860D2F21841FA5C7318E1490ED6211112973A3C90080163A9428F219C0918\n"
+":406C0000A2050DA5A6C7AA34C83B5F98BC2DF273208204710C307BA90C7AC4647421422290C708160BD5F057B8982C7813B47B6D304C421822A5A3EB80B10C3C6E7A4157E7\n"
+":406C4000545C8E4129005EA61A104CE9F727C9000610247501DD7A042297B1DF50F28949598875E1E260FB3BA44C1054E9EEE8D1304143A40CCD77114BBD3092900D251FC3\n"
+":406C800024728E6D088062E863D97523E858230F831D04EA7EFA4821D448E7028252FA9AC080D0FC1011075347C42582669EE6CF829A901E0BD1E43D0246EB6095C4643B0B\n"
+":406CC00067A1118C10F91D20A3085650CC051F32F08847D78DA2028121F807302062A02CA702E089CC03A3C97A0485CABDE5EE5C00A4A30C1650980805D9578A9B869BBCBA\n"
+":406D0000EED5000C31181BD73415D1E14594090820E805C7B2567B108FD0BB03DCD8820685C0D1C1D7A1626776C7F90F068FAF51C418EBBA412AD00633D6CBCD9902051C93\n"
+":406D40002101A46E76C63088434064388C71A1DC53624C0265596C00ECC5C221F8894440101CE23FEB00408008E1283B4C6C8F13B3C808440E009042C326B19E0E019EF76B\n"
+":406D80008F2EE2791F260C0820046D40A3B90C918BB8E7098C385C0A04C6D7E44391F1BA1A91C0101A462EBD8C7049C6DBD03D7728339219CE63991A5CF08E6721F0112892\n"
+":406DC000B0706C6D44D4C8221A21C08B3B2D3A910DEE4871A1C5DFD1024C0E5E3FE63F4CDB17B6674B72092E8A7C1DB26487C2C10344ACC25E22C41895A8922154615A4411\n"
+":406E0000182B2581840C40B04478007C5D8E3E2CF52363ACEA87BA1544AE2C018E7D685D05D620C83657C30E38F104468C2AA25843081090C8180040D9629277D6F0E420A9\n"
+":406E400003659428802812882001B2CD40123D6FF45EBD75106CB5F075A19750631E05B33B85809745B21D612222DDA490A364388E5E9DE9103023D391D709049F01DF11A6\n"
+":406E8000E00453B1004E042EAD112A0840BA24354602D00201F8C88044E02CC9ED18411E3B6158BC0E0E5E19391CDF7109B74299CE5E9D2C90D530D3A02CCB6034782D7629\n"
+":406EC000CF129D8BD1C9C208F7DBA9494C0659EBBD02A1E8494B01484B00081B6FF5004CAD2DBCD1B53E15301980F0DE0803E21003E65F33594389686C4B17650030120404\n"
+":406F0000B3289CA86CF204CEEFC833D064D08F892107B0EAC63C42B3DBDADD620C01F20204CCAD0F1148844D020BF20C43087D181440275C1C1176711E442D0C7BAC8284FA\n"
+":406F40001204CB4ACA1DD25E7BAD4880D3E819CEFE1870BBD03AB808443EE0AA2948F959285C743543DB04C32B034034DFA5C482A3A87571C0980180D27B0252646A4189A2\n"
+":406F8000AC7A0E84FBDF90430030132C6740028830C3E00A210988F3C3D1B143DE91222976A998D327691150B43CE9242D8CC98DA14F53858E14D0A6E0435A154EBF4C3383\n"
+":406FC000C3DAB1825990021F7B9F8D4325322268015B0A51514400924C8000EA20980B54817C6908702391604C842E783C88305A5E50863540A9354D83C01704CB22D90093\n"
+":407000009D90186B2C2705520D96F66E0D84F07B3264708595BDC6C6405B21B5E516A45C4F0068E1B2916F8FC351CF4CC5D1B9C32C439CDA0837E0F4A1367DB8F06044C6A6\n"
+":407040009430F6F6697946947D642030E05A100780A438051410BBD4F4C52A0455D48802A0009CC80855368882803ECBBF1B06F1C2A0860E97230C218320996E5B7BB14823\n"
+":40708000B7C519B043542CBBA24444370EC6F6176F11248F5FF99D04203B9CA20D094008F09490801232DF908BD6D6A25796DDDB224010265716C81D046C38F8BAA87B3448\n"
+":4070C0005062C4B80080A1D4208C4036D9E04A14BA07104613A030DB7446C1080AABEC0BC4D828CB344276405D401DA0CABECC86480160254846A000B3AF7437BF11003D2B\n"
+":40710000189D3E77111A9C2EF89D1600B1391CA7E1C50800C023DD9D12088D81875F8C09420B62AE2E0F74211FB73F4826D0A8156A8C1804DE055E1F000809177028F686FD\n"
+":40714000B902612D5A900F3AA0D0961288450129B6FA0B012080147AA010424F60FB8849291F255708175988806A0019CC808D880159C504241560881F08261F656D082F4C\n"
+":40718000EAA8B2C76C2030265A96DDD40E612904010067010C7A167EDCD832E3AFE848F61576EDF40B6BA844F613EA747B222C7B82F041C891F173D98142354310E058F748\n"
+":4071C000D8D11E04AF42C00D2C01D11D1A297602A978DAC870124101143EDC6C2D1780F42920867E43BF2A68E6F1FC219F8C1C8405096CAC758083425F520F8C6130124A9E\n"
+":407200004A9A130DB4C81EE0015891B8A0C65C05441802A2252D600C00BDD1CA33F81768030C0086F6E056B951C13A3F014A885000CF4600A7B56B8B1B9798C90E771C1D47\n"
+":4072400060C618A1228D725F6CDC1117B4A804421C4A8F010B143890613A13F181A9FC042638C162C7C05DA000FA35C08F443C0768560F204CAAF0685086A0218365021E13\n"
+":40728000013E8FB0120AF882D0ED8EDEA63E1758408043A04B86CB6800C9D9644A1842004B23FCC1F478FA34A60AF0C5C3001190C1884039032E7E14961CD9511CCF81D4BE\n"
+":4072C00088D5D51779EE889C3F6C7763E8DBB11CBC153C5810C4D3EB0371034E0083DAD4E60A1A0330D439636381CC6306C74203500C45380641FB51A8423C7902478C41C5\n"
+":40730000C6C6743DB62246CFAC2BC6E7E000EFD13328F13940DC18206979F7747528E5E4936934C55D43E9E022000F770A20607443B7A0C85F98C79A274CC2202281B6E027\n"
+":40734000E8DCA2C68008F40AFAA2A8C47180401BC521C98C2DC00D5011B27C02740123086750EB73F17A03853D4B188772E2C112468873E31DA3C032060688B8402204E0E3\n"
+":40738000F756110FE306892CC13A5A1B9268F97D58874E82681133C1C7443A7625A1F7EBB189B4E4BD158C24101A548202901A5282069DCB25D8B2446D76B9319EC47F0080\n"
+":4073C000562DA6F8646272905A621120D38D1F264D9005E079521A26F28F000CE543C9D842423611A1CEE3A6CE81D448C44001603806620DE34F96C14CC61C870BD8870700\n"
+":4074000058614D0030A418314E8997DF69E20BA0217BC2A4A287CD16E271B1E5B0A202CF78C03C06EBC28450CA5843C07288623028A10F00D276AEC499045008A89A26CA67\n"
+":407440001EB1643239D88453D5C995111078683C87740171D09003D042772568B851E0C38B1871C288881A8F58478B0359D2391E37D70B1A49E41C0E048C920D01082E820D\n"
+":40748000372820749EE20481D62F0B98828B881696B40859188BAE8F7A20650C7C61875028D082983CCB07795032910F62A80F651E8C6900DB73A8919EF51B9DCD9C8F7DA4\n"
+":4074C000DFB10EC59610DC31081477A2C539C39C86196125CF200430E8C403E62553BD1399C1E5B9A1C9A813D8C3A910BF11CE9A1990099F1E2E4E99F88ECBACC3DB514462\n"
+":407500003013050041BD122D690203C460C0C0B47A81A00C0DF8208041B113CC1C460C7547D0F7A440F7D1891C04C769FA1785074BBD5DC87E045828B7FA01DD3F870198B3\n"
+":407540007619D0901DD65E7E15731F61F89762EC10E64559FCBA656040DC4442068D74FC6A300182B4831600B086CFC58F8C06371D6290B801A98062520E9DB964B2A384E2\n"
+":4075800018033D375C20D94B7F203005E0FB1CF8E4CF33E3091094A88265296DE21CB3BB68023014E808FE00972B388078616D4CA22C86C21FBC3306CE0359020A8D78764F\n"
+":4075C000C7B061C811EB6EF11E37BD41B3810F4968C94C8DEC4A62064AD2001802CDD20FD1F843EBEB611E0B42001526020BFBCC15251000771743140B0860EADF2937405D\n"
+":4076000030549C083716E43717D1054A8083B1058880DF92E401EC4543DC5E04152C2287BBAB4582B121B15EBDDD160B84B4C222C16897AF46887067B3848BBF940B0EF0B9\n"
+":40764000410B0CE581082C80AC1C0300E0190C03901796A4204619A105F72462C3EA3E2C1410C8C5CFDB20888203C04EF11C2F382FA5EC3B21063B8254440EEEE642710312\n"
+":407680006004EE1262D869841AABA10E4F6F5CF0CF6C30A2386F13E5DEE7E36B803A819CFFC43B35C08AA065A06848283BA88C882EC012163CC18C20CE9C808E20807815D6\n"
+":4076C00058B1100043162474AA40180242BAD90DC8D4403F760B0B03682E3976EAF10947B78B08040A35EB74022471A7861412B8F00E4EF8EB1248271602F10C7B2D4271D2\n"
+":4077000067C066220A8062204E2C05DE139D2116207C7CF442353C5A9C102DBB8F1F740688174C0BC8D8A8B011000131A5C001CC16C57E2288DA0BFBBB3086D1587A0D0D01\n"
+":40774000113FBEF6480A3BA8F1057C0A8C863ADF2C766613847444B5C9A2C5F983C0BF44CA3D8431C462EB2711F80D68408002D0C6051E26DD07113FB85D058A06F2AF79A3\n"
+":407780008710E7E470B31CCF8A8944543483118812A88792059B1B2E0E51CCEA08FA2D446A1C828301442F65A85E972A8D1200782D4C0106833D51299800D16850758928D7\n"
+":4077C000EF0364091185020097AF0804121F0A070048842810068408A1160A0003C51F85E10104322F911336A1E4333A12C35080E011FB7780812F40550C28771158E9B3AB\n"
+":40780000466A2DF438C0D9B472EAC86E024BEB0B1743EE8889B99288808001A37D2AAA21C10D4308941D8EE638B34C0526F44722C302531E15EA13A00DEF5871F16599E85A\n"
+":40784000658419D21016B27C8F00C0090F700B00265262DD3F003008020F4317B1E188101E18ED3821CF682F62870803E0A1B23DBCA14441DF8397D063B685CC34F147F183\n"
+":40788000061D5BB62610F36C30143BD564BC50423CCC527D29A420817240C200E06D7A048842B25C0AF04CE976FC0900A0D01A2E03435605A112829E03463BAED08340976B\n"
+":4078C000B02004971AC73CDA020B7AEE7442D3DC0C25C2A1C7AD3144200B8F7327BD774C62DFD467432664F84E4F80DBC4A8821DCFB03E374E10208A0677D4D127CA627CCA\n"
+":40790000292F7B9E6049F0222D11D94028048482C017EFC183063C094853A082A0AD6185BF007CACB1B8103507C3DC874970391401B29CB0F70A090020A8A05002470EE885\n"
+":40794000BA5B60D0DB150F6F9290101133D391C21021EC12012C013AA5100423F1DB30976111D20458BCAEE38D0E14D6107761D082A6182596D4238827A7B023DC04C84F76\n"
+":407980002AA510041116B82420FA544841329F09F0780EB0483A0420192E256889A485056C32001F859484021CC5036810F64DC166970931A2FE127B7E10100E4E35EB017E\n"
+":4079C000982001B551E0057562F080A3D1A63D1AC350345C07BD122C221971BE321F5C1D0C900A647A03F8B86768D67097270836549600C1E445D361012A8C7C1B4920004B\n"
+":407A00000D308F81928AA9400E9A887504388858FA24A06EFC0B4D175ACA080569B793D746890169C54D55838FB41D8C1D2F461A0A7E33351F502888463A8043A924106394\n"
+":407A40005700A7D40CE241F5F9891B14A481842D2306181605C39D0E1F09DB98EE101A7DFAF45D4A94605F64200923E16B81F1A51882A3814006CC405E8A036DF86578381F\n"
+":407A80000024B815D678C222D202F78DB8B2009A01681C4B0339FD454BC620B48803E51312ECDB011A305F08257900F93EE872BAC40D1BC9320C6D89486120044E047C2772\n"
+":407AC000BDDB1164D0B361024202CD340ADE23C06104CA9B48082B54E5D4DA6268C624040132B0030A7090C060A848DB46DF63212183E82D31E9D2B1F3C4D09205C6B444E9\n"
+":407B000076F8228F2980402F3EE70FA23C074E48868E48BBBCA8B43F042597A70122790A27B01735A4740240478CA7C40829C04042B0C3305C4443C83563D6C1A402481239\n"
+":407B40003C839BE30446F0EFE0D750035E1DFF301E3523C4F4F31628895BD608B1DAAF02355134C0B01401DAA9042C0203B010813C029CE4021EC11CE62424254A04E3A671\n"
+":407B8000460D8491A611AA99E4030F3803081C124ADA2CE39100AE182F25F60F5E314E8B984048710046BE93451862EC8561107C3A1E22167DE988005FBBC808D1F7FBC180\n"
+":407BC000B1E68231280B6F419910157C415C621EBC061246CEE3E50ED320462F0EE79F9439CB61121F5AA4207A78D68480E2F8503C2D104071A0600E615101ED9941988837\n"
+":407C0000762E2613039007D0689A05D04825002007570B1469795C2C445C0622030FE207991E510300618C30DB671303842860DA2244A3EFEEE12B50ED29A1084446326A62\n"
+":407C4000C4913800B05D9EC22E11836E21222009F8120CBC6C7A24C1EC00C289EE448C05D8C2300B273F9456CFCA4625DD2FE7E9E3121040A1BFCDD5E20178C6844820700E\n"
+":407C8000070C08230862DC09C4022684C34C9AF3B39976B2D8F8C6C44DA28CBA23883183CECEE559A245F94584E99001A68125A68B2DECC48723A72FD04A81FBAB9C07A26C\n"
+":407CC0006306D7E3DFE103DFDAA670931DAB223E91C41004A22D419A480029DB46C0C028CD021656A658794B0BC950A4741E3DFBF899AE4320680F80402C0D7738C880022D\n"
+":407D0000DDEC61A0341C21E0C7467A88C4800248825D77803C00448C32C412043BF7924D51B7DD8422079220968428412F398E0825DF7BE5DA2D65E5C9123406DEFBE13013\n"
+":407D400013C15445DF7C061A7002E2023587E5B9538F71848F60C4497F97003E094123405C1DC98E8D81234061E8530100B63BB104C171807604776B933277908222849E73\n"
+":407D8000E2B63EFBEE44D016B74052222E4C9C76E1D450E22BD96864663DFB21345800B03F8823D41383D93303AC7311480A11C2027FC2C5A21077DF8A45A8351C46A8981B\n"
+":407DC0000C17D73F010A2077DF9222D428B869430447E8D802BBDC24654B8182FCA0434AFE221F00BC40042543020373FC4030E01BC3BD3888044902506200F63D724590D0\n"
+":407E000024680720800FE83DE11907818BBD330B5D9E52101E0658C024A9EA3D6CC2417FBEEE4CF4E27273A1D41243A4D7C4C0F4BF490186F061DF832861B60326A14BE072\n"
+":407E40009F53078D105FA381C889083BF04D0F6966977EDC0F7A14083BEAB4E2077E08934004EE5C11E856320C080F41B111A20E9AA0477E099922902D41CBA83F6412F308\n"
+":407E8000EA115FFC3B4C210B08E0122CCD2212F727E100054685CD07A20041888F7DEE1ECFCC225E83C044BE2990213690A0426DA038B3CA858C9C410987C674234704455D\n"
+":407EC000E23DF7DC8747439023E0954124019CB5B2B1281A27BF7E1F8F8003076A3B2F00088801DF87A88B0A1D60E8A06E51C058AC4293A2993A1977A290ED31027A115DBB\n"
+":407F00002B464C003EBF8B2340E71DBADABC7BED64BBF0650F5EE95701803318D03848860D6387BF061107521818080DFBF0444B2EFC1754AC522A18149E52222EFC1854A4\n"
+":407F40009C50268D032E6C01D48BF169F0880CF7DE3174C850D5919E04651147DC3102C07087901309835CC225C04ED74D2A1C5E79ED100BB01104401DBBF05C8C947B11CC\n"
+":407F8000344203C4ABEC0401EFC162000D62DFBF05530554BD325A2D7BD7BC582A522BD816AC0B14F602E177E0B2A2725A37C1EA8832A1E650AA77D2EC9E25977E0A21D463\n"
+":407FC0009082076BACC45E3449FDD0DC46D0009F36410EFC185BAEEC08D72576B871EA45A1D974C48D3D810EFC1A43CB09C2E5BD5A9993ED306420C0AF378A8DEE14802EC4\n"
+":40800000FC173E088E30C654A7ACC811FBA3C490602A2BCBFD87087B0454FCF648240F863150A55018141DF318979F51CA9881601CED00833590F50663E687ACBB54F913A8\n"
+":40804000CAE2C21C45AF775A97BBACC8D01D8DD636BCF11D60846B2403534074DA8F458280A0ED66F1A281BE6009022077DD52DD29AA37498303C81E5907043685DCBBEE38\n"
+":40808000ACBAF8F84D11A481183BA4C0C4A29C00063BEEAD1C4E314243BED28B5FF841821DF6ECB87CADD3FF22688A739B35100291506077DB9B966789A50ECD6644120CE6\n"
+":4080C0001534C4E27D789B70C3A095A09BBEDD1615147BEDA4C23EFB66130331C8401EFB544B0D3938075B5B69047DF6A223F03BDF6A44041653A830450CE0FF7DA9AD0828\n"
+":4081000001990D9F703842400303CBD2908209F714413C4DC0201109805D977C7D148E20D67B5081C4F56B804DA4541034FA0633DF0CD009BB2178BE0BAD1253DB9783DFCA\n"
+":408140006B0981A6D4790EFDDFF87D668621369CA87BECD0C0D30818D6BD1B1AED41F821E44E0F818211F1D3E9F602321C2970B853110965EA3DEB4858118B8531168BF92F\n"
+":408180002098546426B8D0582011EFBD4212F6CAE912FC191C5B1F40897ED3362822D0A308965633DF3D4801A0D4E85EFDDC3EEDCC203A1CBDF7203DF69C808187E0B5ED6C\n"
+":4081C000C59F0C877DAB24031BE18285F902450619BE2B5DD023A851BF51882E0BF7D628E3D913012EC98012C72E58AF06031F5C58352420303F71B8F4DFB91006B77BD1F8\n"
+":408200000D8900961EBBDEA440238FBEB187B6B74EE9E02FC85100880800AEFABE305D40F604BC344E25D77D5E265027BC11880639051BC790F85628B0FF03001997EC596C\n"
+":4082400049EFABD1988C14340AE4FA26A0482742C122A7BEACD369837CE12049E148F639085F38D59F80EFC82510821127C1F853DF4BA3BCF697682D0802719C26E0E3348A\n"
+":4082800091B839C191E40379C85487106F14B01E0039B5907E4400E00D8E21D9A44AFAE358416C83A120346B020179DA88822F20C82000174140363D14041747EC88F6504C\n"
+":4082C0001040DE178020816F3DB78E5070E02E106CF62C143284048434886DC1A8780400851A86D125B0350F7CF9A607E8E10767482207BEA207D99EE3D97683DE38420691\n"
+":40830000F5F7B0FBAEF4409080D0F0D9688F190A824D602A312C710AC7202FAD4110C08C888BB2010831ED4F140302640D3E830EE2491BDC846D0A4400D003BFBCC4BF2288\n"
+":408340007708D43B77B5A1EF3DA202F7B340F42F30B0708263814040D3A0EF66A361B370758331DD33D3B684C890C90B1F2B2F0B1D9D5623C0D81175D8B8EC3133E75071D1\n"
+":40838000F631C0EF2A43DDFBE2269B25B81E290327017245F990F503637A072C4163E57CE1C13A003FB5DF08A0DEC147D4F2C406FC0B0640A84048EDEA824116C0CED81AE9\n"
+":4083C00037E180467882A7514E7404F5B246887BA4112F43ED8C3009EC6059060D310089CF72900CE3DBC0CBBE934BBF6C0BBEB854B6F89C0781B8DC61F7D70247A554070C\n"
+":408400007D7088380B2241D8E0B39284C338A8099E40977BED8F49898CE481A214DCBC03C8A68F7D1C17960BC4E0607340B6EFAD8106E58E8229762210B7E98241183B1EFC\n"
+":40844000307BE904FD41DE27030391E04D56F262BA91065C23C773C2C4BD112C16EFAC944D203ECE812E0F05FD1DFD4380091F01E7175DA4884C5433904858041067005050\n"
+":40848000EEC90613168D1588DB98079F00550D4D8746BC080753A5BD43977CFA8820087A98547AE4E08BA120A8A9B2DFF88800841113B0EF8423A9B4BA4980BBEBA0446489\n"
+":4084C000E18D91015045EC63D30DB5F988519443B43BEB9D1E015A3D93223DB2A73E5DC512AF46833B4DA14E276E60DA18C7920C88084B0F4719C0790147512329100A7C37\n"
+":40850000110CBA1234F30261F43C48FAF9EC8009E111C5002220CFF521C2DC859B262D0E5D7B5456E5105AEFB12D818D40E18CB71A24050548FA81D0BA6330414053BE78A9\n"
+":4085400092F03009B1E19BD1DF26C6FDB3DE194401F4BC4169F3C7BE78C813520353454BB81E4BC1EA85DF3C640B9B63B02D145E17BA2F496A91C000F869008D035BBE7880\n"
+":408580004AD1E5DF3C65D6BA62028E43577CF0A18A0430BA88D5DF3C2862321060173398057B9A10451348CDF356D21D822E2010F207F7CECAF3AC0065D0906998CE7582B3\n"
+":4085C0000E401258FF00A2F2FAE8F62D04F8C4FC400EF7A02B9942CFE21177CEE18543EA402100829FE0DB71103BE51CA403D28F645A900304A00F0263C3414209ED3A0207\n"
+":408600000BF702F0923D83766C903D78145DCE063DF320983EC7A69B4474EC5951182C9E879F330ACA038354052F0E9889A32B4878089580565D7B5235B212C3698191401E\n"
+":40864000613C036340973449734898C9832C1D457CA81242068A6CFC34D244177CF30803DB680581B2031D03088103BC2877CF59028A13B10E5A3CE18923D8DDDCB548F27D\n"
+":4086800000C1FF5A70909B88D86810904C77E4A25BB4794EC238D4117C17A26150FF50880472B3011403F45DBA03002E0077DFE258074A542387849AC46DE889D1EF9DE386\n"
+":4086C000EC5BD23406AA9609F4B0241953D19A84680C9A2E12E6C6D3E1084440F37830EDB3843CBEB83DF3C26310EC0A2880A472CD517FB11FCBB12247BE7807C2C8A41129\n"
+":40870000F7CEF1F6A780B0CB3EF4972ED4F642E300CF011EF9DE3DDB10411EF9DF183004181B132D0805104CCA71D4752AE0357011E21E5F48B0374BD66E050731E4A38212\n"
+":408740002AED8C45B01ADC94551C1DF3BEC8FA6885E44F8F7B8860703CCD30B381091027D2A22877CDEA7DF376A8CA688446904532A4698449F7CEA35DF08873089E2739BC\n"
+":40878000A20C4DC20B291D5DF36C888AA420E04043BE838F22791C09478110BDAEB044E680D10F032A25DF4209696A8C8446E7A2C0BC413411179DF3B8882EA409F9872017\n"
+":4087C000891157D67D0454EF6CE5A2532A0A06DCDF12043BE77CB49365E3E7F32430A90F7CF10FC161D2C14400280E479172A3447604DC9BFDF3C226FFBE8D88D8CDE2305C\n"
+":40880000FF62003323C1F3A44C09A3D059DF3CE4778084C08FDF3B0221A0741604243088C908483A98775650B1DB36E2E024A422A0EE2C104C097BB81930256EDF64C099B8\n"
+":408840008000981387A0B3BE78510B0D22CBBE788882101E80F5428808134014027EE7E31EF9A8321D82F0F6D8AB4CF200A9D05F1E25C5A24AF5E43D909A65077CD5B5D874\n"
+":408880000B441C80A3FF727B49E03F0102480228827DF39A9F987A4402EF9CF438022894D3215ECE83811CBEC2E23016B502E5E79AC2EF9CD5C4EDAD7899F3CDBA0D1EA886\n"
+":4088C00090660360F9574C8306B8E97A90023DF398982E610229827BED60B1DF39681A43884695FC41DBFDC2C895B174162A4063BE72C6E62004402CB273EF9CB30854C0D1\n"
+":40890000CEF9B44B46A25DF36A89CFE31293EDC11134460C51A84812EEECA2380A13D08625B1A211046B8B44F8404F024380607A0FC47FAEE9C4F21E8D015E9D0FB20B0B26\n"
+":40894000DE94C3DB3843E89F41E96BB205F548226876CED087609FA8130432A8510571459793058BC2D045A1FB2C8A82203A2B80FADDD06A36047C84E10D0D30EFDC23A223\n"
+":4089800029027A2EA4023F57151F0B231AB723403FBCA8320B442A1CCAA478188986D29100C92070173107005EFB43112F0C0648F502BC002481E278F2C042178F001012EC\n"
+":4089C000E07D0BAD8B1B094C65DF5A2A7044A2AEE1030620E230AB8128B3183D91825AC622014401FFBF418CD006EA31106947BE8919D0B40EC9B222077D11AA03AFA0220A\n"
+":408A000040869C0BC860582EF9B04788601E05026060472138B21D0B126160702003D98008F10AE2098342B41EEFA4030CC04206EB11642B489F6C078101915A9A04256F72\n"
+":408A4000743D1F008B9081BEFA3E42524C1DEA076A40EF84CE04D00236AB31C7BD004C21162051A1D1D03258817064008327F95E58818CF7CF8103DE9A9E5FAC590B72AFE4\n"
+":408A800011D512E0E3414C791B5D8AC27E2F86264111FC13DA06C80911818DB5A47A523C7C5F0A573E40E5BBE6082404865145AB7511AFCA5CC5BFE6962DC1F81F5040809F\n"
+":408AC00038182811F1B79A00799C0C0C08D6C86F3745B0D20E1BF1DBDE08762A74D0C3C192842F243C5E924680B9D3F4C3F0A480EFFF23D6CFE2C7C1A4C44B4AC8D1163C6E\n"
+":408B0000233EA4D600796D212EF5BB39381549FBACF0B84F00905293199404B6C5481E433026B3914423358471B4F21F8B51C0AAF20C598740C6B8C0C7720FE0038122A2BC\n"
+":408B40004C264CA700CD70F887EB9AE400A3443D1E4B5285021F23C8CD10EE180E5D29D881A5F920697A721C98DBE7084E95178BCA88D50D09DF179D101E608020782D1260\n"
+":408B8000813A00983B5DB90200780D1084A8C03EDC4B2038F26F18504A40C10100E39A18C3A93880A0753F3AB91004D20887DF805A87C25F82698FE798F25A8FC5AE3F5808\n"
+":408BC0002C8202C8C22C8E13481DDEE9C40E2CB570231C0698363C02698F05A966101666096601779FACFA4F527C5E7081A00AEA52C80E2702520760DE436B762F47A425BF\n"
+":408C0000B5BF1048C78C0096D02F09388F0880209034F479B29AAAE2DAE294642E2D30080994179809F7C48223D70BF62EF80023C006D0D38F7BFD99C2601EC5E1DDB89FBF\n"
+":408C40008E4C50FA5AF87C3A7C27E900298422778FCA8449C3CC0C09DE23DE1F8536C6B1440DD0DE8E87B0405CD3D10C364071F053091499DFA4C1EC5A73AFA1DE56462C19\n"
+":408C8000BE02D33F34E9980E5285EA18148C520BFD36DE40D616B118C75120D03B0093F819DCD04401223D43005DFA7C208FB39D0878042840F822F040D15818E2244668CC\n"
+":408CC0009CBAA5A1108BA143DC6366281E002F82D70BC5A4421F015B00C0F741A970F2D29526112603892179C08EF7701E952A33382FEBC575786370975A7C911EB7D41471\n"
+":408D00002A000F6118D133BDE44E86A270A2D0E962D1127A7A807CCF4E3DDB7820357BA03B953B6B60F7968897A4B7C2BDE274E19C1F816C4598B0C8AE1230A463BBCF46F2\n"
+":408D40009F008A071CA4F9A03A884789E068178486459897A0676FA6098D67244B694978C740C22E957E5487A8C500E0591C83A503D948158398D66895811904048106A981\n"
+":408D800057A04C2217409A214754A48903D781623979BE947BCD44BB16907578446067FB8835E1FC01244D028C779501472C0F0C1B110BC378440A9408E474903D752E3E3C\n"
+":408DC00032001033DF3EE7DEC0E384283760D106C6E2C87518EF18825BD617A6059DC0C6C0B865C9296BD10411D359902A3C12D4AC74D32803E3C9200C03A3C410532005B3\n"
+":408E0000022284413D8A304C762DA58816CB3A1F22F1095174AE4155F8321009B2D0253B354C628412F193308290420B1A487740B889C4D0419F9046B8F84D1424F813B191\n"
+":408E40007A8887C2AD8872000781B3BB38501E40E03839040322CBD07933B6AC08E83C0584F85FB6BE178108101E00E27C2BE14FA3A1871347E15FF1204A0EF8FA538591D1\n"
+":408E8000101C65F7C89102891A2345F8224C13E0593210050028601F789E986FD801CCBE1600CB49C6E35E3A09D1062FA72F107B97883D8808187CC0E422F133BD808F7D16\n"
+":408EC000A911320617498321081213779B19102386376000AB8CBBED412028BEB8F4D90AD3028B2872731E41404C74A8E1DB42C40A269B9D4C48F0F3D0941E7CC02AC3005F\n"
+":408F00001C0CBE442B3000702323BC6480026E81025002639F8788440B2E42C1C8AA8F28C00547929803EF960304C1042A5444DEA1B81F73D50840290EBDECF45EA5FE2C24\n"
+":408F400064D05C0FA07762C10FA05B4FD18D84010BC06EB47481A3C01B0504028441F80DF044305042284401E4A2EC2EB23CB81E61006680279C8C37C00806250EA014E678\n"
+":408F800001BFB9FAC433110131C4B7137BE5F08144FC2A4C24F81DE69762EEF2F1024D107B38E0412060A0EF97A40D707122049F0469501E01A65FD100A747BCA71183102F\n"
+":408FC000748ABE08468B90042847BEBF8F6296100386570819B43316F4482C0288839E202E38C132BBEC590E3C8A4131D8CF7C191771481033EE1621E35A45B8E516EAD88A\n"
+":4090000085BD8403D58220300F05B823E185040081B401142A1C443F1720977DE3A11C16131D225883C126A254BBE6EC4110410D2D81331256391000762C4B8098B8337B20\n"
+":4090400045A44813C808EF9BB4BD5AAE25583DE62D81ECC2E43D856E850903D006B34949C4CE344042C413BF3CCC10BF5FDC8821BC00110417980681AC401C03B97413F83A\n"
+":4090800070506C324128B0129ADE1C1313610053B21B45925CE321023F038E9055BE2016D23E2268004A1A26613220F7AA69639000283DDBAB84CA208C03B80E264A2F22C7\n"
+":4090C000C08B1A0012D50E89044C846CED6823C38204EE238D030FC3870448003EB454A343C3864640642C15D4A04704F1F1D87203ED64F22E0E5D62C0979DA05887870779\n"
+":40910000C581D0E9CE2612001B018D12E0ACF3E1B8D0102E085F29240F87108FD7EF2527000FB337473E78BD7EEC4391D3DEA66411786BE87C796C470F978744F62D8E32CA\n"
+":4091400010F22FCE3214F534BD232081CC417B915C40A09CF408C81F0D5809280615E10786DDC8221B90EEC562E2360368B8B278086301F18828365DB9104621E8B0108128\n"
+":40918000021001F1C26083042302211A0304DE1BB91ED0E010180A1AAA6C21C0E9213A71D098F0DBCA009A911BC1E34491024B57007C6E0D90EE012905CA105C40184F92B0\n"
+":4091C00067DF7D6375F002242708D61C9D5186006795110CD2A82CA1E1B173666C2DF9F4667123416F191C8F71AF8F86D184B74624C1B0303D28022F3C7B8925471E511E4F\n"
+":40920000862623D044A2108DF0DA5095A05418012594E41E1B4A3A388010A1E1B76263509234680B94E7B09E40700C806370FF33015F0DBB24344E46004DC40BF86DCD1625\n"
+":40924000E91888338322929D23361B3C4D8083C399280049004A00940128025004A00940177C0D2264B3A21C21B456403B1881A41F5E50CF9C1800420080268FE4888F0F00\n"
+":40928000928F83D106AA0881A6E2C6BF8C443AAA2D7F08880310F4588855583554891C9F8B47C4AE0180830992392EA96122B9C3C38987558427381669F870C0C4E488329C\n"
+":4092C00081750803DA0084E8620D6E3D39362F28842C27523C4D9F0DEE11B3E1BC61F0DE297875288F00F70DB18F88F6C494F76461F87840BC3C385E1E0E4B0DA1096407F1\n"
+":40930000926D140DC84F0E08A241219FDA3E8BF51B9382F0B1E90542E99A6209FB99084200C830DB4F46751207A6948415E08EC582983C3B424C5DF81C3D2C8053867F21EA\n"
+":409340000BC30E857E886D998220201780028FA8C4048D48000B44124BCA31227901436EDEE686C9EA20793417B19A1A2367B22548D0010B0B23C17A17ED958613770F5120\n"
+":40938000ECC1043416E348EFEEA1612ECD41EC7B154231C003F3F6A88146505FE705C1E95FC9203BD5B8A0C3A4D01E503C5980C56C98C4252E934078E6530188193182CA30\n"
+":4093C0005D2680F1B6A6030AB262034EA52E934078D053BEA224C65F29749A03C62A980A7EC98C924BA4D01E4CBA66029A32631994BA4D01E2BD4C052964C61D29749A03C7\n"
+":40940000C522980A3CC98C0E52E93407899530144D9316F20C2080182305FD38C438ACC4EBE93482E93212010BFE933B48D0030D1F6E940C187193F103120338C9B0FA6C97\n"
+":409440004C6087A552C58051205540B61C843A4CD07007C1F1B35218020D7177E106B91F60835EEE0C106B8DDB08346A7040A1D6098837C5E7041B160D13DBAFA590DE4C32\n"
+":4094800084F640023A095F34AE0820689E9EB1D610D40A1E81808378C23C7ED05D6690178B92066E102C3E3F04F3C4FC3C4FCDDDD8BD862A3AE5B1EACB858D13B20D13B5AF\n"
+":4094C00023B591DCA3B991DEA3BD91E0A3C1975A158B0C367899DBDE119B417E74A09AA6892A00E3031147DCE122101C2861821289124422360112E4A2F7ED309CDED0A6DE\n"
+":409500001F4BAF89A473901EE105239F0AE811219F8C5FC45E0545A047C36202049951E473100051207E084019F368A2344DF8B02442C004B18C2A3C26EE76699B9E1C8C88\n"
+":4095400012E480004810D40923A9B226C81667289E245627432C490EC66B2141034788961E370032B8BEF89A270081D54FC24123ED56911BE8381E23B6E7E05390701F71FE\n"
+":40958000CDAF20076264104C9132091108910109129811052F68035CA004418004053B80425C6D02C170041EA4822212203122542065458808088380080BE5CA62F71D90D9\n"
+":4095C00085E1080FE71292E1FF624384B0C0239E406F8C76CC4547D11203803C0042F4481D4DA1F8042F848C14401305E1188E13F68F48C625166097A3554408F86460BC33\n"
+":40960000EF8043CF7AF808040B8FA578FC67E0C8083096099E3B1F413786894EE7E0F33DA104E655EBC1E1191205481F1B39102A6081DE64761EF276105819080D9350970D\n"
+":4096400003BB186C4022DC0E0BFB2FFD1020A60638026A0E0040CD5284381B5C2D78BC243E4041151EB88C990E520E07D1DA05794AE87C354A71A54A20F0F82FF8FAB16849\n"
+":409680004CAE9DA8314818E22A67180748100703638490F407220285BD7C5260406D3520680F3E56AC1EAC623D90BC4B2B9D05825C4C06C7808FDAA2C33481D442F03C021C\n"
+":4096C000243D305E3084080F800B1B22389AFD468646CFC1C1827B00F0C7E8C392F2EE188140DFA0E14C088A2033D8EB8201842C0086C815C2C98BDBE5C5E97B92F26AC86D\n"
+":4097000080DB65525DA070401945D46F28008007BD080C45ED1481104A30176A032EA35F2DCE24B6A0A10461D01E7DFB98200DB80C090182FF278509AC2279D3F471798121\n"
+":4097400083D5BC0219A25D00DDAFA63E9F583EE0381E11A04C1A022EC3E47D7D165DDC943E3CF8128485B3009A5E2F6419406872C61883F500E9807AC01A601DB0269737E3\n"
+":409780001751AD17A938461D4235B24452028EBD1AE08C40000385B098DEAF840D0C32BC1029FC9AA2210190CF512D0803D44A82D802129A8A000E7AE1340084E5C280020A\n"
+":4097C000149F9B5DB180215938CF6DA09056503210F061A10B0646AE1E1073AB37108C0311C220090DEBC89907418DEBD0B65D013D11EA2A03F703316D1D4206F5A12170EC\n"
+":40980000E3C2E33B420E4F820E1E10C1C60C47AB2F8B8205204CF514134488A8050477F281222B015D28712488B00502E028027780A4889DB22E09027401248861D906A5F1\n"
+":40984000DCAA03DAB706039B2178C00F0BC12185E9962402FF06A517C2A233EE5C2400A2B0FF30896F21231127EA45B1148D13D76DEE10E6B0C492E27A02079A279E77589B\n"
+":40988000885ED096108CFF040960498297AA268B13B812A7712BBEF30F9F17C8F4F5CCD892A1A6E0E820D82BE060D9380020202E0BFB74E46AE4095058950CA2CC745005F4\n"
+":4098C00097D748A4589C4589C05880658F19B9307852F3B0709B9B76C204B0217F1083DDA7985D58AC20A1E1A5991EB99C109BDC5C645C81DDA4B83CBCEC4D034B229C80A2\n"
+":40990000D2E0FCEED6D101822258313A41D35CCFCA641147C2FBC44A8044A846068440BEDCAA40D75F1F95B4C01738325ED0BCB82150C94C2030CE05CE047D3CEA207F07A7\n"
+":4099400087205BC08E02C1106817E06E39B1F40B79547875C7F89C217F58B9202705FD582E90F47B7C383420EF5C86892BD4C008807B6E94B056FB14C06CA0058FA98408AA\n"
+":40998000D8F349F118074752180F56130882A04094C81E06229801E257238FB0E38462484364112803257DF6AE3ED3E8304C17207C0B463ED3E9125414CA9A3840057A8612\n"
+":4099C000E4B7DD41ED0769EA1CE106A8D13066163E666D3C88211819E292E44A86C38793DFCB3284844ECC7D43D24667C39E07E100216B872A8CA50279503763D5DE220DD8\n"
+":409A00000366B4AC386DD8831C0C40B1AD87058A1017D71903C3B18F818A137D56C841C020680F7D586E8F0D641EBD7B5440510F40334074CB491EA1E7443B44E05756193C\n"
+":409A4000A1E4E5A2F3EA5092A1C92A2C784A80BA8774AEDE004448DC5428150801142EE00084C80BBC60502698CBC01F4813F4BA518F609FC03883DD4D6201989E1A672DB5\n"
+":409A8000C04045FC524577E08903D829D4344379680C4317B5994420222EBA8CEAA1CDAE124066D334083DEF4691BC1C982E8618E2EB1D2163BB680820F3FEE8FA6C746533\n"
+":409AC000C3D78C83DCD667E78BE104C18C38B002027E616C302C70B11900431469030140084245A22E28144C02C0104464223038985AF626148304C0308B883D8833EF872A\n"
+":409B00000300E9F90F7C0E34BDE8CE4640E00954D1556A9EBB981EBE1B72B012E1F0C2C393BF50F08843C0FA0BA87896ABF3EA1E34011B1E179929C401254501E0271ABD68\n"
+":409B400035FA3E99E1105BA877C4102A72EC48C1F853808BABB2C0272E8C0F60E01F087E1014F4DC1010DF5A0B83130803B9EA1701184BA89D16E747761175049301C0F4DF\n"
+":409B80003D00F81540A8103A88748952EB74653EAD6020F82F50A8021C3BE7C64741341B3AB84CE09D150A67627478A9829C2B50692223FF5123182DEA53130504D2C0AE57\n"
+":409BC000AAB40093613004E2EA2402F2A11A173AC1620847225E26010456B7302943AB7750108A6101C230811B5A9846E5E80F213C3BE3984A6F739B9121E2BA01088A6EF0\n"
+":409C0000F61C44022AC2FCFDE4896B7AA06A96E4A877C599503A432EC5F71EAE0712540EE9FC722543CF6DCF8F563E99A05793033131E91E812541D18078E9F5530389D0DD\n"
+":409C40007A0C44D1E06CEFDAF22543FEAE4F21CBA7DA0E0848D340A5F10EE180DE9B831000B00F3AAAFCAE5F2020F84EF9D0F736991200E0160105E3012A1710DE1D792F49\n"
+":409C80001EFB09A04D01780707CF18424CF526AA1ED2DB40021842FF5E95286105FA2684FB8534BD78AE3829880F1CC7A8510589717BA808CAF890E9BCB23548A25447F65B\n"
+":409CC000F048831DFA1E20A84FB50209D41A0142BD2A00287E9983A820888D0F6998827EC45F3237842C912FEC1F81E33E847876DA511A24B835C01007870A895A0EEE7AA4\n"
+":409D00008346C4B7F8121C4081028E19C5D40985D55905D40925E6D7111BA4062F241031056B54CD8CE531E211A5D322A219A554E0488203006000E8E34B3A088713AB2589\n"
+":409D4000C47026107D33955910E217C724787AD79675A563043216B68762F07C11607D0BB5C030E1F7C44766CE1012555290A76584703A9D5C7CFB6C2C058805BEB9DE403D\n"
+":409D800000366A714022F781E14B222292DE63EE1F0884088DA3A6225B00F09D257E2361048D710C09BC04020F1FBB97791D8DD131B07D881443E1090C47627493FB35A9C4\n"
+":409DC000F912F07D5AEC2049E7EAB072378AD24021024E78522F8EF40E203CDF240D2F015E087568213A6020B63D21842E4FA83F441325854ED2DC11307540F000C7D10843\n"
+":409E000021F22A020007AB58CC08F26C411DA7B13C0481BEE31D12D8A9D78C981FDB35C60A96230752720F630A8E28B8F620F89DE3C0218EE04922581402835ED6922F2227\n"
+":409E4000A890400981E0F4607B7CE4F0DA8067D9C264C02A68F9621D1C3D8009FC2868879621071A4C12C051D19C3E3D524C63DE06E40072111DA828EE021018534788457B\n"
+":409E800016E04C4068E08EE050580E8780E11E038200800F316F98100C77BFBA144C012EF227324220B1D3C05EC55506EDEC5CA86298E3AA467F9E1BA3F896878313545381\n"
+":409EC000F0C4261C6038C360BECCA034F4DCF260C2000779130FB4C4480E040CE6043043DEB6024B0823DF745C8982545A98350CE24693DE0300125BCC50679DA861A71656\n"
+":409F00007C33D3C9EE244B00DD326E56291B1D81A9C766C461DBFD8B56C06705D70580D03E06BF4000090E809656B1E1EF9FF3BBE23DB31032047BF8CC6818CB4CD1F0F87D\n"
+":409F4000B89C649885EC47E1F67C30FB014448D03F1B60041378803E69FF2DE5644CFF58C3A4031AE17FAB4D161582F5528FD0F0E3C3A10812EC8624377C222445E257D217\n"
+":409F800063258586058CFA31C4D600D13A218C02C7185D2257CEF2C447F6F2989A64AF953F480EF3262094969C23A007ECD551A1045A48CBBA230B721E1303D5E3661AE58F\n"
+":409FC000C61027E667C1B8F80E9F0D0C08CC1F7C1D662027ADA68B934D962440DA53C6B9847F3C3D216A5B4830EC6983E45B521FC462544B8A03A813D2FC8805E6A0A1232F\n"
+":40A00000CE901C603E25C5D40082428FCC4EC89323D7ADD504721A88D074E8F49D99611A0368910789D08C080640328BCFCA25D62B42618C177A46FB5236FE0AD50B92C4A4\n"
+":40A04000C2DB17CA204034806180581E810254E51C87A9401AC21677A94C04588344752F1B5C41F7E39E0100C6225406CA9A1F19BF8F82F9CAE3420606400CC4901808985F\n"
+":40A080000C311E00D459880A2059D8B01022401D2C303D2DAF3475CE220375F4D0F6B11882232418545A62AA770290EFD43B05EF220440507EB412E06CC218698B07A91D76\n"
+":40A0C0004488073D283A2265581FC417E240F6BEC911C881E111F9E959A1EA18C2030A6AE343AE04CBC987693035750A61712831037CF6AE373009BC0063E683440A972583\n"
+":40A10000B9F88E71E9E102004C82BA88000F803611F26D9584CC60360E0FB4418750A72E022FB0062389C81652EB202360790BF6F4E500EEC6B0122D003FAAB14C0E4BB7E8\n"
+":40A140003F4B01DC5E081EC2261EAD3B100F20E87E157B1700240C11819E01F87F069015BD10E02987D96608E2684370EE32D49001CD22D7787C12D76F3C2354B5E059E47A\n"
+":40A180005194069968596DE8038B7C0AA080AA004AA198D22C482E22A83D8F924019EA17F5AAB203505F79A09AA567643B2039874A42531F840304A06FCF93060E1AC4F68B\n"
+":40A1C00035A0F6EA749403D81E42EF2B43D8FDC5E375316085F85F8C48EEB3D2123BB21FD2268700A9302442A42892F86361C4031667A46F8A060D622FB220103DC18F0A70\n"
+":40A20000242E0883A1D88E298C5D90FEA012A86B301E99012D0D06037207C683E3F6462373A0ABECAE347B21F9A737B737F44AD60151A02C1B5D9B8C2C004A35127D90FE20\n"
+":40A24000F24040455228B0050C4E2C014BA0107217F4E86118D726ABD90FCA09ABEA0DE810B039890A3D518C7D90FEB81E5302E3028060049D53EA22301444B412AF06CC3B\n"
+":40A280008266842320B5414BF7409BF7C023300435B4B21C0AD900349A47B21F84010BBB2A111E05B841178339900042D4BB21F98EAD5C2B52095008F7D7E89AA53D9AC35A\n"
+":40A2C00077D813BCBA0A8720E8AD10706C07C40B0469149DE5145C90008B5C8961047C493E34AC02E10AEF280449A43E16BE108C871E4C2DC50C4360244A0BFC9FA6367D21\n"
+":40A300000BA200D6268BAC49E00790C7071A15208BD2CCC3550855C87A4BF048421B161810F5640398D556694401B452226D982D0C03688C50509EA98947D21743360536E4\n"
+":40A340000D7DE19DC17280E20D1AA41FB4F326BB07CB57A255DB011DF8887BEE6C4D1ED22B104742FA267A202092050F80C153ECDFD235C7105C5CF0DF70F15271E234637E\n"
+":40A38000EE015109801B14405FE7E391398AD0838CBC8EC7DA47B198731A1A25423D888EF3CC2EE22F40E000B898E99C8855E8F0941120BC5D645E6CAE2F542C8F7B460FBD\n"
+":40A3C0000FB01A68031EBE3081EF87A08761FB2040613405C4005EFBF023D2CC03D94E8566A0648961AB35A3E77E82F208E086A068B5626445403C9E4343BA7C0F8511AC0F\n"
+":40A400002EE3070902C171806A88A46805E67153042F4116435440819E6C8F73BA0D9DCFDB35A20F1A01F9E013DE8620113A0111A131FE5C1E0129A01E1B5E2B7D9EC9E036\n"
+":40A440004356E04688776A35EC322E374C450047007003CE385C82C6416821F7577180E0285DB696181C4550210910088E90FBCB1A046B055D9902225AD9A00FCAC41F36F1\n"
+":40A480008F4D602880369D5402482066060DCC819038AE9DD105FBC2E06FB10EE227120083F329E0805A5C02F01C98DA700090851304B60D4AD01BB7FAC8FF2FFC586C3D25\n"
+":40A4C00096922030CA1721C19610B360F89499060313615F06809108D9B8831152CD8A139E7D641ECB601225708634886510CB2A406363D5726254EE768812562F4C8054A6\n"
+":40A500002A9D0F6D66B86C091A501DD886CD00F1382E381C196C8877874383A1C0C4E85F0944F04D0688AA5D91E40765D19913E70961F505288DF62E600A3F94C0D109AD86\n"
+":40A54000E26017683193030BAAEC1112C5CF2C07CD8B957939E459BA41067CB8AC21D3FA2050FCCC0C309E80854B10302E5046A0F10503211DE03CAEE4FD1BB2D49EC2C56F\n"
+":40A58000A443681945BE970D19D500680C15AC58F2FB0301880806B2BA608AA510D0346362A32C382B1296341004332C2C5C965F709DD62D13B970EA41D6A3AD895203D865\n"
+":40A5C000B03AE4D0AFED31AA8B2273EC24C4DF9457910782EF3EE51FBA720B443027001BA3461364230200DEDDAE1377545A30C01201A80300920DA46851858094BD00F832\n"
+":40A60000D6209A3DBB922239AC679B4761AA6B1B651E02B0C05485804AA743BB3547A45B66282C140C5AF00A18C4B01E89E488E625442781A00DC64DB146FB648023D6B262\n"
+":40A6400090C7F40CF66710982BE9022F803344B1BBC008919FD33C02029A05B5CE2F1A256F667220040F4E4558145D288044A85C8F28B714181AC5011C111C2449EE0E78D1\n"
+":40A68000B0411EE26430140A058221004C160671C086CDF32368193FCBA3C034344A0C0D0A92C91B0C89A6C4828D26449A88C6048BF410AC0C67E8215D17AC87F745BB213A\n"
+":40A6C000E943C3C2BD90DFD99CCB380CEBE903C524668F2030812495989102BCF628381A14185300469A9E2020F647714E31408EEB1E4338480C570079170C0A1E19EB1123\n"
+":40A700005895156DB4181B18D631889330089B6A0236C04C27A9300395C87983404388B105CB902BAFCFC6D482528160719540D10FD003991185D1C0791144F606D707E453\n"
+":40A74000CB5487292B985C3C181A443147B4A447038977E518E05C508EC0DA8F6783A452A552021DEAEAC8171A01100C7AF535C955080DE39021AEAA2F473C90E43877F671\n"
+":40A780000179DB3848C0958DA02C7BFA147D4D2E5E76E522B807F4CA010E3E7B1B39A83C2AA2240D7808FC5C183E42D843C1750416083ED07720A4021C0019EC0D00506133\n"
+":40A7C000167AFBF91B58C30088847F8C5E576842DEC6592886E3431B78105D98D821B6F0283DFC5F382593C124B08C2860B402D540073342E28178880CE5354E6020C6B9AB\n"
+":40A800008409509C9501CD1392E076CE1348E148E16DC16F85BC000357081BAD670C980E4C85DDBAEC80250816C2035BB52B4477F5B6C88E60D797030AD846516F7E46118C\n"
+":40A840004B0BBFF284D1023E1B1E22A4D631F7BFF100CD733C7B1BFD551646D0075E65C986121ECAF21CA06004B20AA607BE3510030DE9F912F80F08944063F5881C4F2418\n"
+":40A88000D62CED9C5E330C1EA3C44AD9E80120B5EDF0280BC370F448D9748D02D0F0220D12D3B3AD552A5234966815FDA238256A8016C0A25196B340AAB680946913CC0A65\n"
+":40A8C00047E825D817EE08459A04DDB4449720903549AB6318156D244B54F37F844D34890B6981AA4A47236D440AE4E3843FE12D836D5022170A65E0100E0AA823FE23E3D2\n"
+":40A90000005540E3DAE5E03408434474B6CBC88164F321B80D38AA810B8180F133501DADB4AFC29746680ED81DC017100052C42EF0EAF2217281AA2D91B6DE50A4405B1DF5\n"
+":40A9400081135867C494233ADDFBE1BB8088205AF8F0C4ABB070C408008EB0510D56091B40244A1D9DA498A16E953C6CBA582F400A3EA89A22281A1D289E0366C46B20F690\n"
+":40A98000256745E520FD98101BDBA47699C160DC5D235D625622B590E97DFB72B5FBF6211B39E801D6C54C4FCA0081CDB290DCCF0ADC42785BD112E9443B091C872645FE0D\n"
+":40A9C000087C10D8793F83D65CC2CE12E160134407059203F0BBE101F38E040707F735E40070899DA08E608027B818A1042946E080340ECC0022762E1D2691D2A3A58E1202\n"
+":40AA0000D2B850BCD67C2146F22C3F14660F683CA80194A17701563354DB237629D225C01F78CE2E0184C148660C801830098360801009DAC21C1860689AE088D60300184B\n"
+":40AA400009CC1AAEF44D3605E720ACD133CD0346FBD33FA39133101093B4F0083A689986C5A200DFF1413082A6918DE7415105706B1102029041A9E26E9A263596D02E0E9F\n"
+":40AA80004F206621E3D24900F06B1982980602D97900288244D52C88DF2BAA0F71CE8979A06636182B490C2AD045F0B551143C6FFC2017BCC1C809F878546B74300807A76D\n"
+":40AAC0002188D62C096057C411822097042599D129718E0D0202FB106195AA6040AD45512880A25A91A20D61451B290F0EBC110B89DD96AF088210177C561F0F510F22657D\n"
+":40AB000010548D9800E6F088308A1838CCB143D99F440A8042285C40051C080C40406419F0B650F0AE242AE0C9434485570083562396B1244D023B05F410030605C18206A7\n"
+":40AB40000020742EEFA02196251C373700EEE98E80182D540091D82EF174008E20D788FD1009C2FAFE035476363B6D6CBD862C3A00B1104FF21CD8078FF37CC1204D80F06E\n"
+":40AB8000FF3BAA240FF37358A030C475A46C982414289D291AFE987C235871D8000483360402E08FF4CA1976BAE088110980C9010DBC380A3DB6642010428E9390F8D2099C\n"
+":40ABC0007821208FF1B2761310C120D234D460A43359A0A2F8C121146728BC40188D1B98F53B08E11803282FE23923E3C1510383103C783B870F049E883E45ECF124139940\n"
+":40AC0000E099D60A6E6EA3E504F1918842A7C8F487B5EFC861067DCC505BB9E88BD50406C8063B6FDFD20A10038044048A50E43D19DEB17F193011FC1B188D30AC7F3F3C2F\n"
+":40AC4000EAF04599CC5998E59F51EC09667616666966076B0B8453D2B38907B1640989E008A204C82D8B34B49F42090C25CB0C302270C60128BC9F045AB2791D42E283D04D\n"
+":40AC8000A1890100D05DA76A2607122CD80A0FF270DD3FFB5FF040E2F408F2A078F95024801F8A8F444FEB92D13882EC8BF2018B8023D3F2020F8EE0804FE17B7200F8C1ED\n"
+":40ACC000117C53D22208FC678F262CE05300845A2AA324BAB7D842F0BBE0EB23B828CC4510F4E06200E8158BCEC508003E258C228420647FF3F88256F610034BC043823C44\n"
+":40AD0000CD70B00617AEC790970F9C7E88FFF42B32106221D5708015722068E245DF9E13F08DBDB0B243E97BAB612248051EC2F1E01C1D7C0A6665900A818E300F5C1B24D2\n"
+":40AD40008F6F82C70787560F32E3200C721A07A13FD905490F222D1F40FE3CD4062480E3F85C30270071804170C1E994F3C96A53B4D864DD004B0EB5E31F862F84571C0ACF\n"
+":40AD80009D19C08ADF017A0DEF601666708855ADA91144FF2AF79A0135F7CD733E8B103B924C0F11591040C11E831DFF712EBC9C1A0E1F00EA0F053D40B9020760C361A268\n"
+":40ADC000112CF611CD9036191124F6027B61FC8E5392CEC0799AE74808769AFD70BC470903C6E38B8E978F698B980C6A85DC805141682EEED259A890EF78B123BE19AE1073\n"
+":40AE0000AFD0DA059BE6206EE1BE45AF048B12D40A3604CEA7E41004FF094D80EBCF49247F8475EC243A00D1B043D1E1048FF31FC1DDA243982101FE079B1F10FD89FE0E75\n"
+":40AE40004BCA5A52C1BE1802F969CA40166C182050053C431E551C901A7320201FE70F8771CBAAE48704341224AF5BB00FC53407E88F612C7D90F8334012A121FC4F5C7CFB\n"
+":40AE800007379C9F09838447EF4782372AEC0C000FC5732208809D756020292A2781D74E892A381B1DDD5C25C9167F1266C1066C9587F1DAC1406F78B0704FE3AC053C670F\n"
+":40AEC000502B4C29D047EA603E65E11CDF2103BE019D19B00803643440E4362A200A03F8E24084364E03F8E1A4A2029FC6F9B0521B33C01BC6C0746C8007F6D06C30623F26\n"
+":40AF0000DC2E2C8FA8030A1F10201B343C08F3F87AF6F6508847F0F1062221FC3B9A2449B023203AFB71C04302E48E3F873344873604A3F8723604C873B6745BAC04E3F83D\n"
+":40AF40006E363E03D81030133F86C34482360523F86BF6F6B08A87F0D26C0AD3408D0688F86C0B07F0CD4742C1E20D1FC324388B880C6688F66C0BC7F0C3062301FC301A91\n"
+":40AF800023A20311FC2F1B1BB7B0B02EA033285B346E5F01A18168D11C4D81A8FE160D81B28398AC6C0DD1A22A9B0384188A6688DE6C0E47F0A468CF403A3175B80611226F\n"
+":40AFC000279B03B1B262972021FC269B03C78200C8FE12CD8218D99B40A5360883647040A4EF3401034950CCE920C96092CBA22251B1DD53C5810AA8442C409D360853648A\n"
+":40B00000C03F89BAF31214FE287D6EF927ED4989C6812E825E6A1258D8260D9A800250D8266186AE038EE70B048D4F8C900903607A60072E784064F9406640FAC8442F5018\n"
+":40B04000A92063DBA00244611123C008C1FE5C835C80B11817F20E1909B60643285080B3490CF0931DC286040542A13F0A501E46F8D8482D88068074070C40B9C1E449B2C7\n"
+":40B0800063C5686334856A005C02F8218442001CE1D011089BA8BC163D593E85C0E15F31F0C3989427F01C12F7A2B21A30F2F6C440F14C4206C583DC9C882034905109C147\n"
+":40B0C000046A458980D9A6F01B8304626368006C0FA147B3210420F83FBCC750C0D107075344A102CD805A7F1019AD9F1867F03F4F63608A3640D3F851E206A88F76AA4B17\n"
+":40B1000001C0E813846ECE44124B86140FBD6E25811F03808FF043E43E0A0A07064728828411FA442288608ED4C22C074105CB8860743EE5242F414B08145B545802E776BB\n"
+":40B14000F84A376F09AA768E381751CC7A22B4012B42064D1EC1831618CAF12F4E748E9D3C7CABF820895A03F624B883E6B9CC059C5DDDCA2C71F5F236BB54B04DBED5DF4E\n"
+":40B180004CD6387AD9F061C598C0020F7204DF8754CD2010990766E221780BB9540201BFB1D50F0B318052F480C19818380D03466B4C004F0B48812010D36B71C9CA302B1E\n"
+":40B1C000D5D9E39094264AFA812058E04F1E7210187B040D0D88004D12DEFF94B25404BEED52944EE05B306502EC0A0CB3D8C990080DECCDE430F4C4207BDD20713C108C43\n"
+":40B20000B4070341308881706B1F092340A7C41E7DA99699E01A9A255627D549E4BB5E61020D0291B130D0774134A251813989EDE408DC84B74AA50164D223D976BCB24530\n"
+":40B24000E2809A8225D16CC0414108A209E6425A0189A03CA00035F88B24470A5C61028E31231C713D3C881C5555122350107728F019D11A713CAA33A60018BD9B14889D4E\n"
+":40B280006BF40D515313B2A6202E2D21843005C68635C13709C88A593E8C1A024E663950E07A12F21758C24A0C02543511110149911D90BA24662747480520E9E190FDFBE3\n"
+":40B2C000F7EFDFBF402AE856F11131E05E23B944480419625E22611C0945B113CF6AB821C6B790B34417190C0E76AC9A206B1BFEF245505C81A06C920139AA6CDC0458472A\n"
+":40B30000E19C7C50699B2C625F036580041736476EFAC9136803CFCD22B7BED8847EF2F9B09AC6AE88886DDA006DBC08BA03071020D73480F32816EC7971020A2B7189A10E\n"
+":40B340008D548D8B7089A4671B601B7F189D901E55480027E64B03A24B28D0368F1960810741ED254CC5400165EB30516C18593DDA176D26A01593069FACB21CC086817201\n"
+":40B38000C1C7566B001815A8102B7E115E22982EF2E0E09AA535C5CF220596D62D260DB60963489FF8C85874B9E371614D80C138A20592CC899D943478819A05A85DD5B6CE\n"
+":40B3C000480ADEC84492108D0073B59E4C8118AE310608D449D0059676511BACF758C88E2C10E8C61B63BA5F04138C608CA6B0FA430406B8E7DB21E2009A23F5C46E4588B4\n"
+":40B40000D8E065A256F7892096A70B24680994DC52E111D81C8829D848D091D0C2463043B3486C20987271B8BC188C1ED0B91B88C46555911345A231E2109A22E5C24C45D1\n"
+":40B4400003881443290AA061955108342A28D060B1487BDBF10010A1A92400C0A91C2C8A1A2239AC255C1A221AD9A4191A01B16400DBF40AA005010480A7601AB25D0148DF\n"
+":40B480000B1DB2FA60D4EE8874060B4A5DAE8C9042BEC0305008C0A47EC804B7EB8F4022FA30B50104EA0195217040AB6DE13D9444C0D000E0A2636E043997E1005A67A152\n"
+":40B4C00001CA4F357E21E4A382EE87E1D15F0C108268DBA08F0EC334418EBDA1A74400000300038C000000004206000038000007DC001FBF7EFDFBF618FE0447810E95F7E7\n"
+":40B5000096343623B885A001A6202C0A4E29E2C3A6E44B251C11626E2D42121E688A162083715E317F720320BE174DB24A8521175E2F7AE302DAA0D20277174C376942DCF0\n"
+":40B54000F5CC251CC2CDC858C4A1D46E080320D0200CB706D1B8C60380E8320DC3A0D589346E59C2136E31EA6E57FA6D827B0479220884BEBED04180C4B48443BDD308073D\n"
+":40B58000E06B02210608E50497639315832855C2A8382987CC76C8694EC80848044F2E902C90BA11CC0480C4F6DAC10024423CEC80A10BB5C089B108244664A6026520A10F\n"
+":40B5C000400A4348C47A0FE8B14F5878900A9E769C5145E3CAE200439A30F2FBF7EFDFBF7EEC4C1BC6F1AF76A2D44DD450CD6F00E5BB701EDB3C20056F1EC655617001BA16\n"
+":40B60000602017656E9756A10F50D91F5AB51625522CC3364E619BA5918B72069D42218D2190C6106C8BD412869B5C4D801B92E37B93423B9303CF901F2D80B97FDBEE4817\n"
+":40B6400009EA2811D931C69940EA386E7314360C61C0721C064188643C0C90E4320EE1C86E1886830C2E21C06084290C43A86C1A0641C862338EE3D6E76263586FB0880C3F\n"
+":40B680009B20E4305098CF611C9186639DCE41E57DC25D6DC058B6FE5FAA493DB94F3DCE668780A6D5641E07B6AE4057DBA8D7DBA93AD88FB4DBD51E142BB002DDCC9CFA68\n"
+":40B6C000ABBE76EA6A027733AC21C0531176F1D560C36ED5289480A8ED3656A1D95A0467A5E3A7C1AD9E1AB4F085AFF4BD411238274CCF34314516D8E480EFB15616C83A87\n"
+":40B70000AEA31B3D8D82475DB112420D4B26437EDEE88041B4001078106C4F07266C6819765A73937D9852B423C8DCA32C0142BF5D3048981D332479FD2D8F072D8DED9DDA\n"
+":40B740008C716600104B1978ED88120180C01811EB8F11131013830EE4FF10C0060C0080C00A0C00C0C0120C0180C01A0C02A0C02C0C02E0C2020360C2C61020061700405F\n"
+":40B78000BC180C018145E38C291E8312B100203318833D5F2275FD80BF65746701DC0194A7B6346C9B73A9553A7C5B7D59ECB9043A6CAD35BAC8E017015AA9256CCABDAE73\n"
+":40B7C000EC39C44C2265DDE230730EA11D00492361AAFB8B4BE36E2405610C4DDB626C41D85C077606C30D0C31B061507BABF147CD7BA36F281A031000680C90EAD5211CC7\n"
+":40B80000396F40865E8037914F7AF419200915C65BCC5C8D2310E5BA43A1BB69D0DFB9E22BB77188D2308E70C90DBB6A1142E2308F0A3B13550EA31A1BCE3D33727053C551\n"
+":40B84000ADE5A35399B1BAF118002789229DB51210C5611452A2B988A3C6ED293C1CF0610C31520C9906610200000000060000080001000203000BA800000000FFFFA1EC67\n"
+":40B8800038000013600077E821C5E0208418EED8D2D60AC80C1A00C0110120100114157FF8B566A01BDAC130040340400248240480250280A4160A02C01301581AA0D0684E\n"
+":40B8C0000D004E0480E004EF560D409C0BA46CE5A044029A88120085F481300A6420500298481500A5C40B0046FA40B807282060034C1900D60D006B06C03583801AFD1206\n"
+":40B90000952D03C01A7D29F52D514892904202488B014C47904602C6104802A7D21422D04C02A78CAC1B0A0064C2901961500CB0AC07585803AC2D01D61700EBD2084B41B7\n"
+":40B940008011124188130C4190129EBB9A5A0D00A4C3502D61B016B0DC0C5870062C3903561D01AB0EC0E5878072C3D03D61F01EB0FC0F3ED21087E080EE18202240207AB8\n"
+":40B98000242340223824240FC113B1212A0121A12132012391213A01327921417E0A03490A4BF0509548545F82A08A42B402A47242C402C05242D402C42A42E402E012421C\n"
+":40B9C000F402E3EA43049F218203140303A86080C900C1E290CD00C8DA90D100C9D490D500D0CA90D900D1C218203740364E24390FFCEEB22C0750604A221DA01D03D21E9B\n"
+":40BA0000248C487A807808487C1FA084487E807E900880C8F8182020A4F748841F8403A244349E0182044404236244549D0182046404432244740460E8608120BF463F505E\n"
+":40BA40006049402405922524920C1025A02503522617E822830409A809806489C920830409E5FA0FE48A05F84E3D245149EC9148BF0A07248A693B522A20291A522AA4E610\n"
+":40BA800048AC80A86248AE80AC1C0C102C87E82603040B480B01448B69B2808B8C05A06222EA4884D1A80B804645F46AE84600FD83F0304061405E3C24624D5D08C6806013\n"
+":40BAC000A19101828654062A199018A8670FC322743040D080CD43497E1992C91A901A02491AD01A11A91B101AA86D406A43246E406CA1BD01B0FC182070406C7D24714041\n"
+":40BB00006E3B06081C901B9E41820734070A1D101C1D291D501C8CC91D901C9C491DD01D28794076A1E901DA87B40796C511F20C2AE847D403D50FC80F543FA03E51001F81\n"
+":40BB400087CA2043F0F8F849041F87EA20D01FA8844080A2143F10144307E20A88745EBF0C9108084A22502182A9228BF10C910C1045A0440392462044511A811405491C13\n"
+":40BB80005F88AA23CBF11544817E2328912FC465124811D449A0473B924A20481A830412A8120E5492C5F89230A49740940DA4994094A269025A89B4096A271026289D4015\n"
+":40BBC00098A2783F13544FA04D51408135450A04E5144813945187E27A8A4409EA29502828A640A0A29D028D9D04A8405251525F8A4A2A9029A8AB40A6A2B102A28AD40AF1\n"
+":40BC00008A2B902AA8AF40AB574258418345897E2B245920565166815C6E4968815ECE825AA02C28B640B0A2DD02C93692E43F16945D205A5176816EAE84BC83068BD40517\n"
+":40BC4000C517C1F8B8A2FD02EA8C040BAA30502EA8C240BCA30D02F28C440BEA31502FA8C640C0A31D030A8C840C2A324BF189465206251965F8C6A330BF18D46697E32283\n"
+":40BC80008CE40C8A33CBF19146817E32A8D12FC6551A45F8CCA34D03328D440CEA354BF19D46B17E3428D72FC6951B21F8D2A3683F1A946DA06A51B881AD46EA06B51BC8FB\n"
+":40BCC0001B146FA06C51C081B147087E36A8E240DAA38D03728E440DCA395037A8E640DEA39D03828E840E2A3A5038A8EA40E4A3AD03928EC40E6A3B5039A8EE2FC7451D0E\n"
+":40BD0000E5F8E8A3C0BF1D1478A07551E45F8EAA3CD03B28F440ECA3D503BA8F640EEA3DD03C28F940F2A3E903CA8FB40F4A3F103D28FD40F6A3F83F1ED47F87E6F15A5F09\n"
+":40BD40001DF903C45194A80568BD3261042ABE7040A28CA668003FCF50083200CE88A3E9A4AA0C827040A339358D860FC846148140AC17C2150E00C03C8058C41C09101122\n"
+":40BD800031BB7A180C13CA823BEE60A3D7181180050510866100E501464A085832C3745918430CA7E16EF9F000DC04C8C444E721424088CCE434016701460A24354398E19B\n"
+":40BDC000162D8ED06639451DF94013C218F129447E72200A13B091F1F1D09504216C0C6D0AB2486467C9231A22C6E5E661977D63141A051E5380861D472C30862208A4023E\n"
+":40BE000081DC0886CB0C6A549AB9F20440B98E11644694199A92233582F3FD30C0DA03E11037128F237930C4E001C815862401281A2C311C80201A653E0657308601004653\n"
+":40BE4000EA8754124B85F41020385F1903838600009F500300300A10C1E0002250068019DCD805005015404401C07600C462209290840A822C0166408321018F58A0487C39\n"
+":40BE8000D87A0108E30261EF52460B800D088F172017002805041400C2BC0860070042930040481BD80242E8BAC01420056600B10609B0A85021DC01A1A848500706920927\n"
+":40BEC000803C015589B0101062CA804446D30363B214E5C026122488050210D2A0150D44AB00B059221805C2D106C0301608560190C534201A0C444A806C3012EC03815EE0\n"
+":40BF000064403A1805C500F2FD38700F809185404014258808410120A02208708808C21B88902F914A025530444C2706350138808440502A6A7101489715D405420A21010A\n"
+":40BF4000585CAA040582FEA71016816B021B17404534405EAAC44600501C5018860884064182BC0D81984DA1880D02E524406A1AAA1101B0ACAB8406E11845501C04496259\n"
+":40BF800003900AE23A1012440761A8C6501E05FA9C407A17EC506C0F84058C0D81F84AA10810001CC0810473806A1B4DA0B810C255582044081491022AC1089187ECC8810D\n"
+":40BFC0001CA44822B0102484F2A1409413C8C604B5981060982F847502688884409C2F078502786BAD440A01AA9A20510D243281483591CC0A61AE3102A108440AA1AA86B1\n"
+":40C0000020560F84FA815C430D6C0B021C65605908D44102D0E38840B629879502E04AA2881756E94182F0442F140BE1C29E206052444C2ACC44C4040EF5031801B814D82F\n"
+":40C0400032038AE840CAB0022660AD60C40CE04E6040D021ACD881A441389A840481035859B0E206C59D113682092206E06134206F3021281C0495A0103888616940E4201E\n"
+":40C08000858607310A31303A0808440EA2165881D84958D103B88208540F004189E45BC6207A12766C40F604019503E2D5089F448086A07E11D0881FC420BE9E07C020E925\n"
+":40C0C0006187C0110108800840D9B0D801ACE083004140E0C01448B8300638B00738B0085831060123FCE55005010059802D4E106018AAC4180681C9621EB607170CB4212A\n"
+":40C1000070C4511724187C11103450C3E091023D61F04D60C403E0A2E18403E0A85FAFC30F82C1BC464C3E0B84511161F65318B61F064405A00C3E0D1443E0DA604438AF43\n"
+":40C1400041BB1C43E0EA0CC3C500F98080C0426022301198090C04A60263013980A0C052602A3015980B0C05A602E3017980C0C06260323019980D0C06A6036301B980E07E\n"
+":40C18000C072603A301D980F0C07A603E301F98100C0826042302198110C08A6046302398120C092604A302598130C09A604E302798140C0A26052302998150C0AA60563B2\n"
+":40C1C00002B98160C0B2605A55F196C000990865D1545528178005BC8D83001EB4F1B06102005A818819C420631D55D4819037DCE46C19417894A06600B7CD1B0670401D9A\n"
+":40C20000A87064798433489A0F540D42182F606B0817351B06C0817331B06D13560240DC3027040DE30630C3409816883F0E088870DE1FE9BEC8C340686014530D020844AE\n"
+":40C2400038A7C8DB18F8A7D8858D8625A04669261896C099D2B0C4B8092C746189740E0D098625E10D4A0C010480C031300F714F96C0301870B791806014E88006054223C5\n"
+":40C28000911E2E19A0E2D8600B0037E51B002604344080282B5000A2110180728D435FB82D8623D0823727899E189D1013305B0B62734D0600602375B18600501215261817\n"
+":40C2C000034015E8C7C5E244A86E2041850C0E68E06F3923CA5820D2881070B660313FBA430A470017A38FE484093024A201AC82A0AB200DD02AC803740ACD673481268505\n"
+":40C300003802651B0808010841878EF0A5C3B22F47093198984A913194868A682D8A8A42B4223AA0917016B095222E20083017A1111824088C4E43200004754F9CE11612E4\n"
+":40C34000A474B282205281B04058710068470D540208447C09052E162400613B24014AA26D14A4030B3E015AA1684206110FC3EB07A005014A0030E62CB0002E6142C06201\n"
+":40C380000529003586C954B402B00330C48D7798106E2802508352E961994491002C30801061A88A29AA03014145100CD06152800429009500941016836432059940A733B1\n"
+":40C3C000200C18EB201114C4013A19020C8086C5C36861E0EEF2C1602001A64162680A3080150A7E303A114C76600A1838667081A5E160080A652160080A84514004748FE8\n"
+":40C40000E166325733239002110DE9AF02C340C525801030E4F21000000000000600000800010010030044780000000000014D743800005A8434051347CD19F2680A5068AE\n"
+":40C440008A7D0C882299A4C724AC164544854F0D0408A90A81A42AC188AAA42B2856642BA85763E8715115F7A691870F47F10B02C20021A02C42A0690B30622CF65FB08B51\n"
+":40C4800030A880C8FA7C5C60800844D216A2458600934188540D216E0C45B5217142E3217542EB1F42748C280BC90BD0688BE90BECBD207A2C0C050816688C06821C46881A\n"
+":40C4C00059185218590C4A1899765AF8B031A9792C5C58191486550CAC86650CCC86750CEC8684C100024682E7043077AA21DA480011477E8A108EC083D1BED2008A41C09F\n"
+":40C50000856F80373D07346008A80223E838E10045CC5E1232E3A8909384F388CBAAB99E794E384FA3A09F87CA37C2008CFAB0190905860011A8C867A83B06F9F8F452A170\n"
+":40C5400075EBF08D9E85C82B26000236F3EA11F3814C802388D9E85FA300472F3AB708E46A23E85F0100475F24F81420FA067E7121D8476D600047BE76C923E4FC23E4B8AE\n"
+":40C5800047ED19108473008FF8C0247F3111F059ED101400B20164812619E8962160829B06E221840C80116325C0485E0C103E159898403C11F41F70B043750A2090D4A051\n"
+":40C5C0004242B1121F9757084A3C33E6954AECD62100491DB9307071080249F44C5144092932092BC9B70496F455817997EC497141AA7424C7A1970A910931E84142C82941\n"
+":40C60000926BD0CB8414420F99B08B2A0E49B2C19E29C1200939EAA282A8E12783847A26B85827C1447A2FC06102D182C79DE644A5C080213F8730C4A6E845222321042458\n"
+":40C640004A840B01A25E1280129E485EAA731034FC10BB0FAC7D02A4416980A7D7D3424D759B80831A867914C023079EE7A0782014881E799C90B0B901780781781E7844E6\n"
+":40C6800011C7ADC0C422F43F08FAA6907C6EFA5D23043BEF197799920071CC0B0C03B135C940C8760A0ED020D138C210C804E01283D588A5CCFF0B9A2809823C805D2F661C\n"
+":40C6C0002211A86E74E598F80F24424F18F21023D71BA3D0356414A60398216FA95E941DA8707534A0EFEC8244803DBECE2671AC681005010DC5BF44081282EF5F54919A22\n"
+":40C700003E8444002C3397FDD79E5BEB4A1DE77C3CF4C078B728805EC18D2E04A23D4D245108739C32F2CFA094C7000E4485BC1760FACDC07CB2462010BC048C4111C1D4C8\n"
+":40C740005E93D7BDE2070DC0B081DD9D85DD9184068440B7AE3DC4D12E8B8140B1030D12E4B10037F62400E3882D380D8F05D4A85A7498489205C9D9D79BA5C038C401F090\n"
+":40C780004D611E40E9A258132659321617DD331E3EAAD9102410EC8702E90749F50D70803EB1E132A51030C605BD728E87531718185D02DEBA5C3358A3EE8C41E029C4C469\n"
+":40C7C0007A254F6E3C9304D27DDD787CFEBC40C23A1CBA71AC4C21F4B6188BAEEEB54A524C81B47C5824C990FCB9EEEAC46EDC8AA44BCD24075E6A98254F80A10B82118F5A\n"
+":40C80000821687C417C3E02892E1780258F8512479FB21733C1130583C10103A188CBC647420AF4B23974A391766901F4181225121C9BBC58F03460901C133CBA104C79611\n"
+":40C84000EF08E1E41B4209FA7394C44180381A034E7E2A220F8FDC041A088400C059B108069D1B0C242883E7D79106021EA01A12E7BB78468A0798F948210398F015F9F659\n"
+":40C88000E3009524902681B7E0A7429A1737148F4F3BE6889E5F8A037943D70D253314C89593C414EC9C51B258085E49371F2B29886A0BF69A299E9DCB8E3C20B4701DC75A\n"
+":40C8C000685A972F2B109C0B14AA78B9FE09053274CDA0024CCFA646CA4A01327D06AC5D36623E99D61087CF46061F9FFE09D922E44EE92E010580520088283AE1404101BF\n"
+":40C90000F7BD144FA534845308580B85102CEA05BCD782424B056772BD9737CC125C700A80D2782DECD30102CD2ACE10BC8130066077A417648E892E87B3128B8C10A00502\n"
+":40C940005800C60F59C4A15B1049D6DA1DE7544C9700330110C09844BC4871DDF0C40606D5CA81A3E609E1AE732D4E8014B8187D078B210153E65772EE0522178D9BCC80D5\n"
+":40C980000B017CBB16258051D5ABC88E96F82F431E29CCD28CDA48CC4F3BEA2E4D605E6FFA2E8E162EEEF04BAAC90BCF66497777E0F79A01FB061080CF1EAA1049E64A9116\n"
+":40C9C00033FB51CCB9DA21723D03EF3D8160E3F27258F9BA367B079C4172E0E3E8C7B30381701820308D1378EAF2B198F0F5C1278B822B99010809CDFB9007F938B09A06D2\n"
+":40CA0000C750F89598219E03DA2071A26AF112020347E0B7B267849607F7CBB32FC702E0D0347AFD747C6AC24680EC0D7111C232000E223A97111B2278AD1FC60F1E930E21\n"
+":40CA4000057032483EBD942000830847A157BD0247BA288483F1A0788F02A794DC06D343E36D420284EAC21307BD0291302AA0402F35741755E0974609883C6817A4C04039\n"
+":40CA80006917BD3E5A5DE0A8468979E36EB28532E91F1A1A133D16D85E9D6B33510E003C26896B123E9DB21B808380AF1711B42A83400117FA77608F0143BCEC045D4AD45A\n"
+":40CAC00083DE75823E21E860F12EFBCEC0AC601EA6AC3340A8EBFD268344CA351F8C8A1747E3027587068945A6896042A54C7447834B9B44F7314213200091A5222A9243BE\n"
+":40CB0000AED54B890B151522E0E73C884E84402097A10C042282161AB79806B083040780E4681086A909CEC2CBA10D444D4FC59B89F4CF209E8317421B97421708854C12A2\n"
+":40CB4000E8429110E98A1D08462205324C71A4C4D00F49481B330B1301469B0F871D086AEF4123323B4ABCFC083024B02548CC43550582204446E46B254958E46B641708F4\n"
+":40CB800000100DEB710160300641538B9C680F4A0508F1E5FB31084141F8401F41C2F43EF57328885D64424078C40B041E502F43A3C74BC40D444C020381641279437C7B79\n"
+":40CBC00060ACC1F29014E3CB82088EA156FC122158127D05BE3A223F2363101E2F02DBFF6093C19F7B0917AF518A6329A83C6D7820B8400813C1A759631461804A3609211F\n"
+":40CC0000F7C20AE7C3CE845E27837ECB9F1901DE2A0DE497C89B1C46B865BFD3093FE64B21278A7280F00639CA291A2177A91D06741EF4591EB7EE2E90A5194110FE523457\n"
+":40CC40002E54943D092C200751A3114E101AA1293A0013A11782928887EF48A30388A92113A109AFE51D51EE2774020006C96881A8D0813013EF5282EF50C42DB000402125\n"
+":40CC800082D90EF0E030311EF5102E9EB82E7BE441C05D6E8104910E02C841040FF3F07D0C3AF5190EBFCC6B9FEA25D20503CD568FADE210F578E916E01F4C791700671049\n"
+":40CCC00043A85604093A01F27835ECE9F10AFB982C788CA8814118044F81C075332EE7D4400D33A8F14A07C2F2A3E37F02E8AF51B4E096FCEC3A7BA2307956B8C281E1E79A\n"
+":40CD00006C83263B26C06AA4F114C1BC040620113F5305C10006F71030AB34C2EA982034824CD1ED1E81E40F33CC4006A64B8785081BE5D222EF3FB28811072F7A44D3C08A\n"
+":40CD400042EAB5B23D03E340E5F18CF8F7A0611C880404F78E3307D3B8D271FA21D4B7C661E6AC420479B15048628CE8060D737FBE6FCB017C77A9F98440B7AE51D01340C5\n"
+":40CD80008288FB13C1720C178C480A53024F208ADAA361B027803F566F0F652908E0210EA1155F00EA310EBD98E476051F1150093C51754C9098A50785F7CC062D42D50FAE\n"
+":40CDC0004EA4105BC597942BF85E78975D248021D8EE4404FD2B0C3D41F4382880201E0E21C0DACB0CA034DA863168D02E498EA7A61358B4EF6982C0560137A15E842604DF\n"
+":40CE0000CBD2409E08FA626C6C706060E4A2018A914011D9491605E5214F98B3901A494CA7C8B5C430400D21A18AA48026E8ABA101B9EBB8CC412B067BC50042E94A3D3C04\n"
+":40CE4000AC2C00419CC685A04CD2268602E4821002402425E11482C7501A0F446B882BDF8B640A9E9D395437C18027E4A8C1B4C08181156894C022C503480C03A25114F918\n"
+":40CE80009728816060050E43B011E4D023B401F4FA6A14C01812FD73984059C561740D02080E36B09209520504217907D3EBA8753920894059851E88F60717C88EA2D1A19D\n"
+":40CEC000D70342688F450181C59E8480F5AE38CBC06E4705289B5EB3B32EA14728731680C15A1027E0E98B81A8210304A467E0E891118620F9232470388B81201D3182000D\n"
+":40CF000070D51A6A84885EF1EC40CAC002210360E99210038060B5189FA75185C41C0C3BC6E50010ED0B783A826061955D4A94A3A8D3D3334247245E42091E960220368293\n"
+":40CF40002E85051344502042303CBA08820EB444200FCF6A03D84FE4019023307DE892692324E41286087A8BC08C4290C0E99B53312DD424E94BE953740D19D950C9570151\n"
+":40CF800060133C449443A00ECDE616F7ABDA65A0E00BF922A48170D021107A12A8400EF5472E84002E0E503D2048382A8408EC9621881ECE3A3E83EC1343D31DB40982E021\n"
+":40CFC000C749711037D07CA3E100512820858E83DE2EE251163A0F6080D178FB0BF8434882013739E91E90CA23C89B35C2125C3C3A409B459012792801001A0970F8E9F499\n"
+":40D00000E3C0C519BC9F41B988033998508F88AD48970F4E90DBA3548841373852C298C307842F1E0560B910000F4FFF220A18972F0F69694F49F88F711A0DCA024E78ECE2\n"
+":40D040006099E8456332123313CDED8BD723A33BA16813602C52A302C74CC50B01FA00648111493EABF910401B292618030CE3EC0F35CE125F96400F88B308E902E426177B\n"
+":40D0800028522160AC2CC4025C22A48982CB97248B010C812020F69F5BBD805808D002D88106B342E120697D60412A47016F83200F55361182802C3C081D06E45D09405DE5\n"
+":40D0C000EE60875F378803D06FC580CC4BBE83751C06405D7A18C04402643DC08640B04DDEC5A3D265240C1A05B7A18C4BC33B87817C0B4042248B387317F99A10C3404409\n"
+":40D1000002109E7655108017EED3C3F0A4715840082003A1AD07C2DB621878D484884C86512A7A1AD0BD0FC45D34E02201C3E44F510B7D5668510778F8302A0167927811B6\n"
+":40D1400043D0F6C7A0BE135C9FE219A8EB2EE7D026056201064F0097CFE045734C1664015E010EA6481A0A82641CC02001C032018377ACBF4808327B3984B9F56931D34782\n"
+":40D1800046D0A60C707621F42678901CF8D8BD01AC40C1411024E10087AAE6C480D8BCA40A04E7744B8F2E8A082DE5EC5134083EF48C9C3D821801C09D383EC71312440378\n"
+":40D1C000057C143CB00C0D06E1208020404C20DCF4155E37F28F3F822EFDDD1C1DC02B5D9A5679237B9C7D0FA89F8BA18F04803C3A4758648A30115B088F0277A3D74BBD17\n"
+":40D200009C48B90340F16BD3C3040478067679C8DCCA87A868C44D1943D930742170917359804A73501E2789A198AF2079DC0A9C11285BB4BC522C2C0400A61FB008820EAD\n"
+":40D2400084F228812480B31A186C1A5D0CEE310240045D69A23358885E789A2881234751C26F2EDDDB1128F615BB0BF4823E6ACA23C984389253F977B4F99A92D1F3C58972\n"
+":40D2800001A3A8A525440A3D84A44B4203BD190A90149487512BACAD487A04FD0DB637D1803A3D0045D008050CE000A44F984070360803DDBF385C224CB897888A57A9840F\n"
+":40D2C000C452008C117BB08D09CEA4507027BB4010A50F742A20F0BAF18D302E52956D25DFC8E20D56B95FE01282EB3091102C1A3D44E03D93B6239612811025C3E82972BD\n"
+":40D30000E73886050ABDEA6721077F0E17528520097904691C4905C9978BA0908CBCC0C05DEEAC589810EF7583C4A85D04AC4780F2215741CD83EC56416030267A580C45B7\n"
+":40D340002C00E555C002F50291045C212067B2203BC824AAE43A0224BD44F47E7F971600DB250E04D806C13103AC3A8FC297C365B40092E9303848F4AA8176E600866689C5\n"
+":40D38000D7D0C323E8B4E12E4E53D05602806AB5005FBE4A87D03DE5D1FEE2608D20A045DF9AC7E40AB1014BA0B02AE5FF477008D0C90288308C63C8931052D1A457803D7A\n"
+":40D3C0008A085E719A10006607B9FD495460F5D440FA0790A6B139B10E11E41575CD10E24B11F422980BBDE3044D23C22A9B2C06E1D7CD2220F50AE8F73EC8FA660081501D\n"
+":40D4000007AFB84443ED79223650384800108A3FCC2B0281EC6643015E11751830DE42336A13491E08754490855E71D42C16836B3199CA344C8A804456A7C542C40A59A83F\n"
+":40D44000B2F12CE8F76FE8FAB12466313DBA819C61087E08A3C80409F19F002E1604226F0CEC1F51768F62DE0F61AA08101F8062190E027A8C6CA1CC334BB0B609C4234B56\n"
+":40D4800011C9B802E8DC545E98E72F271FCF996304F0F2E920F69A00C500820791D104045F143D87E6648200874456101055440DD463E82552C161011761D19F42FB901004\n"
+":40D4C00049430E1782F44E90F887E0486200C0624E3C5D447C4A3C20831C1E0C482022E011F5CE788B4040AC1177CF7CF602A11A03C7A1E6CBC67985715001A561FE2159D3\n"
+":40D500005D2F46709027D87968003EADF732B2CA22547A9218FD02E2A5C7478488BD4A1A479021E86EE2EAEBE2A103D851A3DD9D45D397A385000589410420480C20DBF074\n"
+":40D5400044204E5C8100D5C0840090E0383658169D40563D87E825677C790882018C727110087AA2403148099E49C3B66085802902A1902A9BB34827F329F10CD536604A91\n"
+":40D580003DD8183141E00C71882B8E04049095520F151C10CFD07165EBD1112C0053F468EDFF01103BBEE4441A305EBB8420AB863F096DD86224007A9458BC81FC5855830A\n"
+":40D5C000C8BAE22416DE1EA22204D50DBA9278435A6256A01337AF2E858E6BB63D547C5916425C7980A903301E0B3C4C0221E23DFF1C3DA04623D88576200C61D8F4399794\n"
+":40D6000051E367429089057A708857850807D0E2C5E172F1108BA1107B088BB112DEC201E1CD13081E0A02021016F1C198E2F8900AE5043C7B263D0DC820C1C0C13949077D\n"
+":40D64000D094674786A98723E04782E0442DBD11604007A3C88C0F4BC421680EA16F91ED9202FC6A8046800FCF290428ECFF4403436AE1610311F18E619688E43517953972\n"
+":40D680000B2CF87CDD803C1628FB3618704DA46B1B9E464E2C13820378AB5C7B3A207B96A0B0A48047D4FD82728024F76BA38FADFA07151810DDB7587E2355234FD0FDA2F7\n"
+":40D6C0007D90269DD5A03D02C31077D3068261176010E75C604C1004C03612752EB11E279F54EE17440010E04C0102B80231739E511986A027857A91BC03F0F441B21018F9\n"
+":40D7000003D199C1C40463EC1CC2C7360388C6088484001A080494B83BDAE07C79C8235142128920891A3EC908CD2F6FA3018C1509090034E3ED4E410667000600B2EC813A\n"
+":40D7400034BA61744FD207BE09840B2868084DA2130F2398F23B4DE8765D094D60C1304301E308BA369A43B0C60B1304B763C888C00C0F00A0CE0F84424803DF34A33B9F31\n"
+":40D78000AEAA8420ED6D11184F9EA81A108B8A68988C0F745C088145CCDC1DC4E426B5C542068F0298F02B64D988E439DFA80126EA713DBF225D53682049DB3F99C2409A6B\n"
+":40D7C0005C15AD111C2DF348929D7CF0268119DB116801E7EF23DA1307A87D48B80A0F2080E8278D521C9500CD621FCD08220193BE524312D40525B95CA0F3437100C7807D\n"
+":40D800006C0FB2900405B007D257620EC71838A00EB083000CF0C13404FE3220354779788EF21780E319CA6D75A00C0E29BCBF1125885BC265100582D42E030EE2BC3069EA\n"
+":40D8400001947669D15CC2289AA317427B91E8077707C981838815E70AA20A721B8806EE2C11F1F4C8F9E2B87A105C859C6225D964C2460EE1D21EA35A1E28584680A9C203\n"
+":40D88000B2CA4213017715F8DC1A2D010805EAF19890C109A0780BB55038DDC422EE2BC5C093C48C149011C76EAEB51ED365312F882B0823CB1CCFB87DCFD5A1A240770FF7\n"
+":40D8C000C2DC34AC7B8AF920153093451A3DC108468073D09D2877107A812F712FA43D2019B00A9394542679026984827754A2882C02DC6D05CF43A191C618F63840F4A438\n"
+":40D9000070CD800C8C40080831977DBE7C473786680419E5AA435E218D680F139FB8B08C2D482D505AA1DB8246152443B83B12024F5A4615104C0D1D47602334291A009DC4\n"
+":40D94000092376913C8883DC5808F64E00DB3840E10806D85607B98293EE192338333D0FA1010FB86A18A76804A6A01A328428760CF8F9B219137A9E26132A742009771655\n"
+":40D98000E254F44C956365C0828D1490B06DA672AE9487AE804476188F13A0D52C4C0207D5BE22035D52218F70C69F716FA007A446202D4F818E84D0E7FC43E01241058E43\n"
+":40D9C0000E4EA42C1E04078E3F4AA347B8B753024F7EEA2F11DB921C15142A745DC5C2F204D2C0D318152813DC4D64061E40A9408F13BF104F88309841DC59687835FCFBB3\n"
+":40DA00008B30C0011502080D254014741FC1540206D2010B2F0AD41783918B2E704DBEE7FC4458EE2C4100D1F63238B2601CDD02E07CD1044C0A263DCB282028865980151A\n"
+":40DA400054431074789D3DC58AB61D40A044068640A901424C624EEBE0B8CC40CEE2B11207C97F043C819308F729509C5E022E103844028EBA6A177191B5D1F92518000AD9\n"
+":40DA800024C809C8CC07A91B0CB10100AB398FA2AD0FB8B092170720A90ED03D1703A4053158081C72E087D7F625DBF1C361D0B66000691004975ED30F0ABC2F653F8F7189\n"
+":40DAC00027A65F1E80478DD0442DF27CA178EAB8415EA6182F1D4219F3DF3F22044291BB788097A4677D840953C46888B8207C9F2E57CFC04008DBA4FCD8E245F1E40245C5\n"
+":40DB0000A3D35762050B766F0E8F871F307D0940711E814743E59981D9D8446D772581067DDBBA5D9186368F010ED2216180EDC071EAB0F1B478D2A03A513C012B7521DC90\n"
+":40DB400054EC37DC5526012C03A040A6D026C7586CF5BF90CC22061A1DDC205D4B3E24C0C0590C00812603D8747B8A9041C026AA84F0E57EA278011DC546C01279DADD10BE\n"
+":40DB8000091EE2A54C0A343BC2D07D1B6E59A4C2350EA4455610084AA1B1E0081197983E605A2DA68EBB813861805064D03D3ACEE88091F826100D03CB8976978859130238\n"
+":40DBC00082DCD634C22EAF68484A500D41541A074757B3A679AA5CFA07201C4D02C501B21966FB1643B0841D5ECCA8949846CC4A6C44B804591A5E178640D6F5E81974605F\n"
+":40DC000048F57B1BC049440A940BE04915186EBD0FC62C17A07005434441EAF62400927ACC44D180A03C1FE8E8CEA1070D72CFD96445D5CB4226F5FC99757B0A00487D339F\n"
+":40DC4000113AE04F82BD82DC2174411A3DC54C3DA24C5E8BC6431C90130504109C185E40BFEAF5C31F557ABD09371020F2979758829F57AE11349000BE0F742C757BBA1DE5\n"
+":40DC8000E220413F57AE26041852806697076C470F57AE111C3C96928172008BD0B78D8126050C416F3B3054770A3D63C024374B588F97D5C42300BC0F3E604759872A61D8\n"
+":40DCC000F54588986308F2D7598E9F717D9F5996291E881C78A3D8F78651B01D7AB3487A986C40B2FBD666223CFA237880F0C7C54B8308020F1F01114B27847A9C58802EE6\n"
+":40DD0000645680102355615D26170A874C3B88E5D82DA2301B23F1E01C8EC09707F1109BC1220593F05D35CE219FB1C4887D2CFA07BCBD17986157A0A5665820419C89E09C\n"
+":40DD40000C9A2291321575F1D91720474888197C0AF720308EDD622644D22079CC0AE73188105302A4078D718BB2B84423E2C265EACDE1C4F6027757F68D92C0443648FC50\n"
+":40DD8000A461203CB63480025085BC26C11024360B7B6E751EA63443A525C7B551C4D00FC020ED0C66E013F8EF0CBCE5EC21720009A01E9101017271F63894F65CC89601E1\n"
+":40DDC00069A21D8E0458160905A81B5DE48C408FA502CC55204601A812204242EC3E2E43EC2DA0381060581A00865E0B06100CA0EF434238C8104BC2356201749A189546B8\n"
+":40DE0000C76B7420207ACE88448402AE21CE254785DB4BB53B842AEBA501C5D5167D813BAF410410ED7602881EA7551EC49B13250F42EC0B02504DD1ED24C9003FF5D0F947\n"
+":40DE40001005F07DEAD4C2080562540F03BA699C79E40885C3C07BE1781100C2EC3E204182811062279A00C0FE0217E070F672CC710C1DBBBE5CB80082E2D33F68428641CE\n"
+":40DE8000A3D2DF038E4041D2219D2770B013638C1098EAC99210A11C73840A753182A04109261BF0040C071906FBD4F91D0240B07F9FC3C1C967501EC05BCE47A69C07B3AC\n"
+":40DEC0000F879A5297919B47B49944BB04FA9E54E8E87A045C6940D1F0A421480B87F210FFECF822EA9C22213B65A90A3E039020031E56B2064790F4951BBBE4244C30B3F7\n"
+":40DF0000D17E23480BB6E74A9090FCA03D8993B90FC9880A00D1E78E91607543CABEE47318FB6B3C9836D9100CD1B1B88246061CE0353BFF5889E0180E37815EFBC392787A\n"
+":40DF400027E87A11037A7848C01274072E0043BFD08CC23C9D9320F47300812088400877174A10E209045D2F2289E9D353831861F710B81104F0018610E87A153139974C93\n"
+":40DF8000A3A22502A300F40E13A13E795916A03CD21D9834880E4F051DFBEC4C04E03862161C060155E255020B0C0F48D38F1C0A1E645C46094A0503EC0A269961D371C2CF\n"
+":40DFC0006B800291360801067F4B1B094BE9C92331FA0F244ABB9C20D52ACB820CA30000A287B9338B3B144A8ECBF51104D62A3B3311E53ECCC12ECCC53ECCC3689B533158\n"
+":40E00000D151A063006301F5E54AC1E6E50241980309B7D1FB470A040F58D88B43D8F81305E48083D87189760EB91702116A05759AF8C18059E4F432F3754174FDF8C38064\n"
+":40E0400017E39ED18301B7C6AF43C44C47ADC8CBAB58440B3603F2E0082D40C2D40DEAAAB28B001871A78252A3C429078DFD0F4E0089BFCFC3C895EB759502AEB75631D9F2\n"
+":40E08000207BBDBD8FA6FF87ADD5C4F840734F1DC21C9CC202FC261823872DD73187C90B87DC9D22680DB7C01F448B90D924432944AE1E160B00C4060342CF2C9D110C1681\n"
+":40E0C00067B41F8EEDD0F638A216E543B579E7AC3F4430E8BF51ED0204880E049936E0116C88B750EAC2658F02F494309C68780ED479C691F84EDC7AC740706C40A9E45EA7\n"
+":40E10000F1008D114C79EBF4B1EE21B13CC8204BBA83C7B715083F0050EE9D013E49204C6B04CB81A0D2132C5F068873A0A210389E4099090D712B1470F53F9084A0B0202B\n"
+":40E14000678F47A165D94C838CF478E1B196402F80F344E634844048AF01C40048B0E8DDC1088A107063074BD013AA250BC9E9A564A0EA52022EC04048B1ECCD61230B03C7\n"
+":40E1800000681D3B8CE04C004ABC8043F44E40F8ED7C7B29546B3400D90078B88862C0B34894408035829970C4091692900602399C1815102811253B29078B8A07D20444C4\n"
+":40E1C00066F52A08982061D5EA2D112A7AE53C40EE360426481C31059DB2723D72B65DC0B623702BD5E625D5B6A3D118A40515574F17535C08303802208161D6A9C3DAE344\n"
+":40E2000083D570421974D8619388831A00010301847CE09C620220A7966211CDF433011EF05231133850767D2101CE4930EDC0B2131E1D5080A0398E8858031102404E6D4F\n"
+":40E24000A48769001E5EB0DD9F1D4A202200161B5B50AFFB09EC61802A4FD803625E9AC5F79B4F4BB372C4CBF2800098E5A98A049A40A8C1D5BDC400821DF26A5E590B1A74\n"
+":40E28000FC064E9F2515959443D24C42021A259789630874CC4932D4062540687558600856E3D28601952161C1CC2D98028B29F4B9C0291A2506746A1D2E245E24CD3600A8\n"
+":40E2C000A14815103AD720B8A0735780858F90BD9C494F2523A03A8917E4C302F01C31F94084801198792887F0B867363BFC7CBAD1F84E6EB4622E41A643D09DC42A040FDF\n"
+":40E3000000C631E42EEAB752EF36610487A2887A13A244A3E146C2210FC671E0050F5DF51223F885D660C6060FE77744751743ED8FA17644B2354B23DCB2060F0E2C605706\n"
+":40E340002309641BDFBC146A0B22E070E799C81D21679E60941EA86206B8E04F825E61C240E801BC332C5D71CE88D6AA7917FE265D1EAA181C6AE233F5C732233264F06555\n"
+":40E38000D08E65987E62D55E113C1A761C11754EF8E891C49E04FAE3B1A2D417C4D240485552643CA10E1E265A1EB8EB3348552692000432C8203485326B90DA9428F51690\n"
+":40E3C000E88EA7B212803584C2D437EB8E74C0E343ADE1C4B5157B8F3249CC17F1D70AA87943F44383C064EBD8E22781E34C4506FB259249F1A09FEC7F91E4E8A23196A008\n"
+":40E400009F2FCDAECF2F1F4275096A2C13E03E7FF193A4E86A4E8A64E82F72F876F360E3028088B5048F011306A864E908A64F09DDFD625D716044F09A909869062BC43B2D\n"
+":40E4400020E4F44789924F0ABD70FE8659697451E098C4F8E18920D8EA9F21EFA0418B2E9E4B10407A1B8B51E33D4840627CF1407F1FC0CEB8A647BD26467E31FB46B244A7\n"
+":40E48000F01E3D05DDFD40439A144028285F801DA9F4219D291170D00589801CD104BD6FF831602C75CB99001DD78A3C3CB87D3040880218D6E25D53A4975AB121D7078578\n"
+":40E4C000E468233519D0D417427E175C212D96F077E7080E76756A195D0489EFC62544140844DE257467AF800DC7ADBA44C12AC7E2CF15B00296EB1A7C00799C0AF93E1020\n"
+":40E500007B1AC0EAE40EE2600405CEEF3FD789DC9740458E8048ABC00D73AFAFEACBB8778490F022A9DD2F2079352A0A9E2F66A298885F5AE0EF460354E2EFAFE43BEBF116\n"
+":40E54000538A4E6352B972C24A778C018A090AA538016E6332FBCAA849E40D324009F389E08080A15850E11B00DA86171F371F33730F5897091E4BF47D30FB2EE6AE4A0293\n"
+":40E58000DC04F035189DE49025CCF94410C1005E1B6D105424EFB131EA9D411107132B3D307B7EF078C5A97550508871822027165DB2FA409F7D8B231C40933040D1A25C67\n"
+":40E5C0000C7DF62E9D7B0F8DC80B47C830E46B167D7492240F1365107822F1E378D8B0347883DF62625B0A84CF7D89096C2A933E061212D8562644383115C99B0581405BD2\n"
+":40E60000572808B0622C932230E44016C2D2013D2E1008718500EFBEC34441CBEC12111BA4E3AD3DC86107C2713BCE27E877EEB177A8216386020CBE1FCFCBEF43BEC20498\n"
+":40E64000985425DA82A9251410A8429F445CE3A283EB91A1EFB064BBEC152EFB0443BCBACBBEC0CA107BEC0901E3BEC0511E39C1F0909E99514C9D0B1430250884161006CD\n"
+":40E6800009466EA03A8343A875D884627D0EA2D0EBE07A41CDAB2EC2EF1057BEBD880B2A4204312A077D4D0801DB906201E4011743910F92828FA807D0E81471E9F931E4FB\n"
+":40E6C0000743D998E2039300A75FD69E3F40ECB6C1D5640F63999F0DCA26030043BE104BA7EE4BD9C563E42031F1CA89CD433213670811D408C8B1D95CC2414CA24B18241B\n"
+":40E70000175FEA8907341CCAA81DE1DF6163D22DE3A1D22F66CE8F66A00DC303DC78E2789626B086057879907315047E0B3932E896C02A07501C3B42980C0F0100A109E129\n"
+":40E74000D791CB5712DBBBE107CB7EC3EC9DF10385A8E1028B601FC5D4622742977CD1980E8010028EB0E1E212E20342E0B080EFB8C4EEA8060081790283AA3E080918A1DA\n"
+":40E7800003231CB301C44A891E9BAE1604E0878B838F153643B73310E74F220B82F53A238165DF5C42067773591B1E7DC61A2400BF7D9E081C7192041F6E4508026A04BD16\n"
+":40E7C000410660076C4911A40FF523D977DCD991A5EA25D0C65DA06120840E8D791237C1BCC2221761F1C1DF0823D7CB247A9C06A831D8CEA2358044F9E0175C1C5A3AC24C\n"
+":40E8000002BCFF448750E31E1C60EFB084009CB5447BE190CD847BFE28C04EFB0A7023371430EF0DC3427875101200D169CAD4CAD880060A3D409A3DF7A440255D97650302\n"
+":40E8400009A24AF7DE89019D5BD22C12BDF79E4039C7DDB8A67A0084AB61024209629081420F8C71458C98D2EFBD04D86FB8BE50680D48FB038A2AA70364FCEFBCF6806362\n"
+":40E8800070FF3AEE09000CF90B3A248103282C449840D9420415F5B2E9714DF110EA9C6E9C037FBEA4C4CD0901400C8C2D0A00861442150EEE711602250AB5020CA0094163\n"
+":40E8C00070400F03CDB24C821F40228CA000CE99A111893EE8AC4C191C8F81CCB840B23DBAD4C874D05225E383004C8809C541CC5AE644620AF9A5BC4681D4681CC3A1CFE2\n"
+":40E90000C779027802BE3C932E2D74205FB5AD444BEA2A41EA74D108FC69E620281FE62A5120C722080AE8DD31E918E9148E6E8FF81C22200709A0810613D05022688891B3\n"
+":40E9400043A84214E0E102F82062E5F01C427BC4E012ECCD91E9C8F13080C2CCA0C60A057907231000CF440032C7D38A384FE0818040C2F2B5919D9C5BA4BBB850B9BFC025\n"
+":40E9800080DD2AC4593E85C8984C0B1C0C802CA2B2B10FC077B499849A8521F40E04EEA11EA04A2EC72C236982602DF038C8D9C40BA057401E3C4960404A2E220F73C0962C\n"
+":40E9C00067E8827CE08A4A00743C08C840743E08C44280E0F193A11305D1BFE322E13D80E278232601B2F404E42EE47480FD659240415D75A176A91082E098843BB1D11E1E\n"
+":40EA000085D11E457E887B3254402E210E5DACFE41063E9221A4843A8113988804F043DF5287EABAB19F8A1CAE490077C06BA3D5F1644F0440B903D89C831E40F2874AF5D9\n"
+":40EA40009B00A23A248260232FC448E300940230741008F42A420E82D1E8758120E34A09D83BD4ECEA2A02CEB92050AE0B3BEFC11363B78E0F87CD977DF522470CA1E8FCEC\n"
+":40EA8000991C382210319400EE13F4BFBCE09C810B8E1A0DCC100501560219D83B7DBC4E902856852B7E1DD6817F3818B0E05B147D028841677DF53048A7D967446B89E43E\n"
+":40EAC000C8B24F81762D0EC7D810EAFE92D1D3972214110B8BF008024F8124C86E5E8C3A0A21F28E58F7DB297978E45800C414354D03DF7D043D858330FDDF7CC969790B27\n"
+":40EB000023407BF1F08DF240823B80DC2C401677E19977DF5081263429B010A945043016E06763971131D85C2384140B733FD84842355C84245012635439802A37FB094CDC\n"
+":40EB400016101C8918890ECB8B1C56620F68FC441603306D00C1E93D5322C0C39821183BECB4BC906A3EC99D1C0F63D63D43E44762038C6050E0D14E977D8C913A1B56F91B\n"
+":40EB8000E20801F814432580436471B2882C4E86F76D14618CCA01BC58E1CF02842CEB96248160B103540D3580927812057BEEB078D4508C64B880DF5EC4960DA0CC5D11B2\n"
+":40EBC0008E8405C32187A84FCC098801C165C98830C01C254FC5D73E6801C054DC4C0744F0264F77DDB201501A7D44943975AE98F52C6893C0A13C189AE6EC699BCA018AC8\n"
+":40EC0000FAEE78980C9005630CC6500CBBEF38B01181300053D2340D2841EFBB2105455F50ABA00513550800BF7D328D4480166B29197DF768902E5202EA00AB13491E790B\n"
+":40EC4000581E7D94557A20580841795224B3B4440D09400253A921E4F2093CF5E82455202BC403BEEDCC8A48C0481A215243188B6EFBB6422CBA25F482E70008B605F49C0B\n"
+":40EC800084CB20683512611200C7813A46711344AAED1611EFBBD3E944B90542C182AB90ACF063AC4B047712083F43858985ED98012602EB91C0E9063C560047B0A86893A8\n"
+":40ECC000795D424113210619D03449930800840E951D1208B2080C1F0220484FDF77EA9A04B0E395D67D70D25916E274F7DD298146812438E57B2312991CB845BC21DE6021\n"
+":40ED0000263F6B628C63440280FFC894CFB0BDCC061669524069FC89AA3D78A10047E3D9029801F3B91098005D65096BDCBB420309A16420C88CB60B38CF4A838761DE970C\n"
+":40ED40002834117876048D5178D7178C129CE800CD61B2F000020D2958025DF9324548157FCC635A03A4D1197BEE61435864F2FDB91A02AF958007BEE6881105C623D96BE2\n"
+":40ED8000A3BDCBCF08A2101A0878F934445C4987ECFFF13A40BE44F45DF736B816040D53A20D812510423028F478B9853D1E206109A2259322EF82C991EAD3C1CDC71EE675\n"
+":40EDC0007C2EFBA263BC52E40808A8C24048B49823D0AAE893BC914880427C00EFBA133A3AC8847A91488E41C0162E00AE38FC5DE64844E8418708494EFB6C2ED3D1301B18\n"
+":40EE0000BEDB889FF27C48DA2C815EFBA040495105BBEEEC5CC1554028AEB1B13010297116E1602048201C50062C2046EBC22C115E7ADF31C5C6B0C1B3C086C0605A7F42BF\n"
+":40EE4000F00EC4FB68C6701520210529E0161B740846762203E50D080E7C23AA7618208423F1109330708004701D1751F110841623A3CC2108B047A8FB8BBEB1100540E0D3\n"
+":40EE800087CA2EE34780BB013A46AC4E3E9B631A3A3E1B852C54037268053C93F44090488B09F43E641302BDE63220913E13F7DE8242921ECABF1F502C09C1E90CA2A8209C\n"
+":40EEC000D2662004995105DA91C4C014688DE049DD717200AF7DE9220495550487276D2F548889043D76327884041CBC486F351D100821CC8405017D9A20312402DBE0610B\n"
+":40EF00004B0C8468B886A1809FECD3312DC0005BBEF607D69DE62300261F62DD89443C0E1D899C37A5077DED1846A5082C749A993883CA40185A167444B26C1EC1677CB381\n"
+":40EF40002B977840718410840E20788410841DF2CA659791474FD61FC392FC2118066881F848C0200548C05FBE524816851235127BBE5253BE30095006E54234433267CF5D\n"
+":40EF8000D0424C8134500D00CB4C8A20077CA09301842813E916FC6D1D1008DF0B143BEC18821300D20A8D8E671E414E5140887D2DF820973C541EC2963EA7E71044781D03\n"
+":40EFC000328BC8D308CB3EF9DD32CD50B30A8B3030D800CAAE333C9F66B6882BDF9382019D60A66B217820E444E34332A47397844F2C047CD64220814E85F63E346E20E9DA\n"
+":40F000003FE7F1E104BA54D0C1226048346080092C4562C417E55CA5EA0F02C33E367101642CF648F27D7F607DF2C8904FDF2E89F7DED18480823E30EA2EA50C2BCA03B43F\n"
+":40F04000FFCBA2EB4402E3C942219E0044197553A0F63FE9F64E124049141620398106B9D3D2344811E0001BE4FF41C65004784034813D944C2018F3D4D187D66823832869\n"
+":40F080000F82044026820268443FCEC8E08B32052108B2E918423AB09C0E6B110A208788D4866101A029034F7240431B7BE4DC7D90465D4F8C585AC24C240C2905802000DC\n"
+":40F0C0001F43090B35A44CFB3DC4841268403FCD6791D48842658F09408F295832E82C407006598E23C8E42CA0BF402DDDBBA20B82C456912045BEAECC2344B922420058B7\n"
+":40F100004E087C41FE239EE1A120488A03921E1C44102010D52F0E06A83D899EEDCC133B05B8780C7C4CD274E1278C2274A21E4E21F8A21F4311FEE8983F40D37C9530FC49\n"
+":40F14000BF4A570B80CC6F1C6030FC6A01667902710F4611E0350262386061755FB8B1E2C9991421049002B2CB66FBF09A9203CB5C09A0D777130B8CE103F1C44EB19B48A0\n"
+":40F180002448F2715A30449D2070E17C01FC16E4EC82388B4389758A400F007AF3F00504EEF6081E3E942088A84F4980C2F3CDC08263F985E22A81324210BC33EA94710D9B\n"
+":40F1C00040E1D831088C2090CC084C200CCCEEA1011B2503C23D6850020C9284920584C087095811651E916842423742B85460073A4201A0163DD1501883A40141E433CF23\n"
+":40F20000B41244F12CF8DD9087E80066CE06600E8F12B7BD2DC87830A4814A41A14DA088791CF55685D24C23DE4265ECE001B14C61A00EC23E38401081AEA541AEC02D1C5B\n"
+":40F2400089C9E35142C7AB2D1101C830B3D8B20A3016773D32A19817D4A6E2271602C1C20868F4C498F0F6E8834094C20469C40803627F770988A258130068120BA068795D\n"
+":40F28000B12061001504501590031CBE8B661EDFD811541B1A4B0063AED09107C0614F43DA27CA1EC5F1100080EF158118D020806027B96ACCF634048F226D083068095E55\n"
+":40F2C00044E51EEE1B135C49EEE80203CD2A0C1DDC2088A8882629F75D608AC1C02FD53CF248853DED1E607965204B43845E451B1EEE08103C9E8A101476E93B0100092064\n"
+":40F300008C590FC40E66462C58900DA12FD352E53B800E0404E2A8286081167E1368641D46BEBC7110201B15BBB82845747DAE70407019DDEE2240810354794A003CE9C373\n"
+":40F3400092A12014202CA7540622CF770B100A05A04122F5A012A4221945240477CE9081C01301B2610F825CC814F228D88300F87850762E9883E11418683B08D405C612EE\n"
+":40F38000688AE9E4512A819C0CE170A00127A90C2A697A845B4018F651008283C198098A5E813A1EA293219801C16A668797168B0B581E7DC3C822E1600C777C321DD178A7\n"
+":40F3C0004C6E3283B8F50B0C7AA9408D4BC9800902341E435CE21277EED11681302BDD0C43B1054F1C1F10301316E691E64F7254F4CF494E8381F8306800362EF73D4082AF\n"
+":40F40000C43D5300BC88582078E88883004C13264A6E99609D41448BDDCF7C22FA20D93250030099651422B290C0A2C9557C3EB4BD222017AB52D27F8C680C2580B0098BFB\n"
+":40F44000A5B7519C18300B7774B0FAD32C40A33FBB4284624677008019044162DC40020BF88118D106CA0E9BB81292082C3024183A351264C776C609FC630803A970098A53\n"
+":40F4800085B5FC823AF733E1E8EA84C4096C0E363E80B8411E86CD1D788071A91A075EA978A3044204C692DBC1D0C78BB00B601C151ABD2E1023096CC0221816FD70A25911\n"
+":40F4C00067E20E8D6480300C86058038098C65B0003A0D5E0821105A183BEAA840904C5F2D8002B020D20E15C9A0098C5DCB14213E8B8CC994003EEC931265104C60EEE242\n"
+":40F5000013D2050B05910CA2591002C670B0885DDC1257CD400239F4E918D2A50C148657E9A52148D2A3C952773B39F0BD35CE349C69595292A832A56F2D0CADC15326B709\n"
+":40F5400049C3BB3F05819111CD9804CAB8C1FBC21382CE90DC5832E9188CCEC5DA433B5C37114A910F92A3E34B0BA5B20B5A6434887553235AA8D293E8A70160825F7ED8D2\n"
+":40F58000677044B4AD421997A94A59BD02C776B39B856A08146380239F91A9CACE6349D02DD21A1FAAB4511CC2F08D9AC9430DAC313881A0295282E99B9160803029C958B2\n"
+":40F5C000D8EC7442A776E49D25400352104601E1420341A180F0C84960302C7B032D6A548CE8CA1490186801A4658DF42922DE3FC91ECFC0162ACC019ECE65209A1C47620C\n"
+":40F60000E87332476368F0057A32D44C11C422F4F9A0847D3898261F4957092DC627E4191C9085125520687306C770EF36D846B01BA75247931F08C7183A981162BB8423B2\n"
+":40F64000305121C42ED6061148D2070623AA8E010E278262D773770813D21CA22E5BB86A3C0C02442DF4816183FE83421BAAC328A870A3C61CA11064640791A48084C05465\n"
+":40F680007898D1467DF770C89EE40104389507897DE2042260983FCCAB968BBB788C1B40065DDE23E46D63090ACCD011EA05E223746584098AF7488F053711E454044602CA\n"
+":40F6C0000441BC040B40800A3C48614A7F1BEB630D44033E82602E99142C0488E0018EC8C91028FBBC3C0220540320FBF57C821EE83733F4A818C1B2AF40162789E73D15DB\n"
+":40F70000AE0481EEE081002E442F6C7F195D78110E00DD688E23E101BBB81C810BB35302510040202BC15232CF4E6D8D3A12E08BA7205C9DFE712C301A8190201A00209420\n"
+":40F74000D646B18C08112038826818C401405E8903D15C748584F0C03D0C43D0A23D09D8834734CC4780EC72043A526C8030A4F601F3BEC80E2ABD3D14200F82D0CAFC40DC\n"
+":40F78000344BAD03290FE39E639181E319F7E1B0412DA24BC56F8314A8146DD3B02D8A0F224918D6098B05B001E518E105BBA05C8200CF8F608D6B00410824BA4108262B9A\n"
+":40F7C00016DDDA2258F700D4042A600401B832F6D3295EE0209F77689588840D1C46302C3B09023046C3800784A7804648E39B1137B59DC7B7A28721CC420ED7C020104DF1\n"
+":40F8000009A307AD3D844F0BDC48E5213E50012F49788847DFAE8440FAE1A8758F28671D884BEC9779087CD95A42104FABE243BCB58646052638B102052BE94BC11562006B\n"
+":40F840008FC1117B71980263C82C0989F43C0660FBAFF584A004F924CCF8A3846140E0B5E10181894C29580081313BBB951D141640A37C81EC4071A9C0930F7729B4282EAE\n"
+":40F880008126DE96190018E90AF39011C418015981C73007B534CBAFB78792BB0825DE9C42559A22E7AC225060A5E95AA2D00496C12A4680B1E5B071EF4D6440F21A6106C4\n"
+":40F8C00046D0CBDB7345D646E4C1A409698044D6140E80D35624393BA25C061D4282209902C418821A37F100CE5F379A0F5BCB88418154791B4881A2083C31F1B8913D7C48\n"
+":40F900008EB63DF4EA25C01C0784533860AB01C3D1CC8278306CB11A0319F43C0A94C02D8626590209CD84041DA408098AAC0632E0E14021F04D211E3E174719AC08B354FA\n"
+":40F9400038C7025D8BA63DE99C5CB718582A4E0E4988401F7A67A274D2A1E45EA36F30F0B3E0971E6C153EAB401383A21F4C8600113800421B317CBC0E3420676FD111BD1E\n"
+":40F98000E6D151183DB470412F7A6F901E8CCA412F7A7021370C391C1E15A31EF4E11F048B0FABD54BDB32060D04BCD5046C5A0698323D0C04D841E45FF22441235817958F\n"
+":40F9C00088804377A6D990DE183E1EF4E040052C42BED79A1C94C10D11C6A45AA97963C0DE63DFAD49E8DF0B0261779E80F97E60C241A1111CD0C6E020223B0E40FB5FB0C3\n"
+":40FA0000D8299909070F2CA1156D079C1B0BDA8F461D6B2EC7A8DC4746B022980429970157577D905FD55D630822A8180D028307616A971F41903A1448A48120300651554E\n"
+":40FA4000D8A0E3DB25839A8222323E40771EC7861EAEFA22DBABBE4BB79A08802D7CE7BA3E9EB713E3179267B130813AA8C01CC8AC8B413100EF1502093BCBCA041111CC43\n"
+":40FA80001CC8A1F3B578FAA284741DC5D5E006C38F4F6D8F5780A07476850101A650285035DC2563508251EB008A103ABC0152B0D1E90A110EC0D0383E0AF5E223E64272BC\n"
+":40FAC000EAEF844DC344DD542A747EC43B895D41384108141A7504A173F821CBA11C3E41D5DA27DD8682C7AB97486D050D4347ABB20AD2F054FA7E88414CD2623749043A75\n"
+":40FB0000B3DC4CCCD255A9301001117215172648CE1FF6F8D11C3D963A4200F25DE9CDC4D420501E4DAEBD5F107C80F1EB29103D2F0E6397666E082BD1CDA24C41082E8870\n"
+":40FB400067E9EFE201BDA4FA2750E68668C2DD53B03D5C423DA80E23104070754DA0881D5364220F57629772018F54D99081D521422150F12A51EB3A236287174E898D4CDE\n"
+":40FB8000815943141841A20841087B66C24BA0A8BA327ADC40B8D7C1785480BD73A422C9E64D4F85E9AD529F5A9A23C7EF053C19EC8001E48272053AD954A287183A1D6156\n"
+":40FBC0000A5E4F8E1CD8247ABA556E67724788DD42C48446CA603013455040788CDA0CC23A3BA60040B28AB1C2A3C877F19FA0860086B480492B69885680B5A1B1113F512F\n"
+":40FC0000925E49EE13B0BA30FC2ACE4157729BA396A84680EA5875EB22046DC6490142F23DAB9223802222103DC6604648024F0222A90E878A0F53CE491F11A98F985C556E\n"
+":40FC4000F50259809D4F4E5DD9F0601E70898B7D5F8A83046840863B243AB8BCBAD1CC738606FA60247AB8D8FAB680CFE4BBD64101411EAD9F40E620CD013BC4770220F24D\n"
+":40FC800077D2CE18286100BAB694EA78FAB688C4A1E90EADA922E80E2E41EEADA543AB68D0049466A498F55031F56D10E3D71C12406E857D712C8812495998982A0D10EC59\n"
+":40FCC0007522C0B1FACC27A3C9135839EAD7730E4900B49600BAB68D1017965121D32EF3D930041A43262F7AA5E1034020EADA0541F55F1A588B5D86503E2A793006AB0791\n"
+":40FD0000AC6390ED3AD109C13BB50CF4212E5F1103C742C53389A05D1DE790F986303C734C2111108103E93F91D49A8843CA324BAE6D842E3442034820E5CFE5D25AC4288D\n"
+":40FD4000FA28DA451260420180A42084E4EAFB653ABF496D1DB166F7165D320CEEBB84289398A504044764081D1E51E449131B2021771E0084FB3BB084F72F084E2E33D5CF\n"
+":40FD8000B385A3E44851283CC87489DA880C62035D6B6025805E6882C919A6882A549410418A523C63B4458940688290A23627C939445E60A0449108BB5BE858268302C06F\n"
+":40FDC0002C26831EB34422E48E64B00B40BE74984057AA21D1025103C6AB8C03855888F215981D688885D4C5D688C85D443E1EE621D3A61B4CDD344DEEBE7D2F077CA18D33\n"
+":40FE0000D4BADFFD4E49E4657056E1D7B50F24683C330D03374B883817C025340CC358CCEBDA733314C0E37814D0159300618C12941DD7CC5D0A8E40A0408F5ED418C69009\n"
+":40FE400048FD981A31498DAC32A04F00FD7A30880FD2018760922CFAF69C7D19866CF0A451780345AF4FA211AA5693BDA50024EF5ED33A3BA974B160B00797C15940B25F02\n"
+":40FE80008888399FBB030F69CC89D0C9014CB9010BA01399281CE2812031076380E0A0056968498B7F03038890ADAFFE1C24A04F0505D75E5F8F832F040AF4F8D0F7215095\n"
+":40FEC000E0AD02E050B91807A0B8B6E9E8D1EBE7343B5D28438F35040811DC0FC87B7AB098230B61200AEBD9C68530AF405C901C15A1D04CC2C0102FD830470EBBCB115C0F\n"
+":40FF000000278DDC0123E3B4D11B7AF0F58D0880985D787E3998A2E6049C3A5901197AF1044652E1002822BE401A18D4C0B36AB10F9EA88B00D80C0A857DB224813D6134C8\n"
+":40FF40000D016FAF04191850F55278F465A8809D7822988880AAA21685089690FA8EA83F1F294D8812688A1A3F1314148F54F846D879F0C083A04002420E07C03BE007D1EF\n"
+":40FF8000F072C0811DC93E2200311220C0140098982C843D047B14247428E2098DBA3FF2111036347FC20193680287A002209AE20E8FFD0EC27D113DB26C653403E18479F2\n"
+":40FFC000E4E564CF879544E7342D6C0169300D9323E6897C4232645E2643D1E062EBBC3481429C07D93C8881340332C03AE6B12614857E38D25BC07D3268FABB984D30BC9F\n"
+":020000040802F0\n"
+":40000000D20C2F090267958B493200967E939E12CB06A093A87842F060800124910080EE839B1E97333F094DA3D7780212F2581438DD3175F201798BD8C7CB870424EBE35D\n"
+":4000400085361CC4BCAC345B30F0F61562170C221C069D785CBF5E1427721168FA8BDAAC24E022782CE91D1F72BD782C5A6363E032B228F19799D9B687AF9E8C270C39AA47\n"
+":400080003156F21E197812589003B92C7206B12BDD4AE813C2A766930823CD744700A19740468AF8B59D237FE877CE209BA00781A8D008FAE7B132F490F22D68B3E18AF109\n"
+":4000C000215BC0F22EBD93985E58F32EAE63202496B10976A829C39114993C17FA57D8D8CCDB2EEBA81103A6284417F31B3A33827D4C8040B9D4138004B0608846255A9860\n"
+":40010000B42F843810569880ACA0EE4D8292A9CC69CBDAF3A5A83D30AA702C1EA20893C08F96E20E71466F789604A701005CE6D002CB25F660419CB27BAFA1C6A3D0EBE9C0\n"
+":40014000F1D96288D809C4347A5AF8821A7E9CA4896138B9113B77ACAA783CFF4E2107AB1F8807390BA63CCCA04397A12E119108DA5D205B8C05B8435B015E200F80D7985B\n"
+":40018000803E04584C0B7014B711B00F98C3644500A06AECB58D70A4970A8271001A2507A0BF8F4A89866860481B1B8697AC44034429F39831B1D79D6813E05F67150DC3A8\n"
+":4001C000E0297A3DCA7AF3A873588875F008C4F47730845D796C43C1B790442741028049E0BEE1F51AE883DD79A088063DA1716868EFC872C8921B660025E42821F044D0C3\n"
+":40020000B1807409F0B3342880FF4E2E0ECCCE3B384084825EC1685D9336589F001A09024F2A85A062857D31448D9B0BAED48B0FA0F0030C0C4DBC4D0EBB5A2D9DF86CD400\n"
+":4002400036841CD6E10383CA5C1DB5D42371D6028120704E0071EF62E85A64412B8C11D90F8BA9DAD70F403467043A9DA9BE75708B0582B71D60160E851B9EC00225FA9D5F\n"
+":40028000508D0397A9DA481B0F0B53010C3CE060753B388188000D81046C1665EA4CA3AE00EA6F911024E5832098120B4103BCA98418340D6F1DA90F53B1BCB1AB2B26B0B8\n"
+":4002C000BE81A64202468195B0F09753B2ADB0F29753B38F528B8B0622BF53B29573010C719CE4000BEBC111F0DF38845B0F71753AA225DA50E5D4EA4248840070ED58A193\n"
+":40030000ADD61C1C6176D016DD4EA6901C3145221DB89689168B168F0045A022C42203D00924B420191CA4223A9920B581622D0DE1A31EC5521EA7504315108A10E8F53A8E\n"
+":4003400081441026A40420C047B7B4C5805826EA746202D3D81C47D07E83E1DBF2097DA633209E702185DD4E843AD631C24E07DE41C882A0E8D8500883A985D4E927EA0A52\n"
+":4003800091640D1FA46838F3C17963D0C4061581A33461F53A422C352913023044E51EA747418EA7451EA743203C4F254C2EA7E12EA69C1EA7451F667F0880E01228F75E61\n"
+":4003C000D8851D41508F58C7884DC8B9E4F00E4D41AB60E621949935069BA922F7B835068ED1AC921361D928911993F16DC9047D4AF280006A0C70A350265D193EA579220E\n"
+":40040000E0C808FA96310030BB32065278D4170B61006526A0C0B299085B2C06008BC195125C9970C18F782ABCBBB12CA84016DEAF681C6B9001DDBC00604BD4EFA7D4F021\n"
+":40044000E2C4103028A1E2A8212D3BFC84AF1E1E86BB301C0BEA71840801CBC67A220519202986071FA5011E3C8B791AC636103D5CF03D4EEC26C2062753BF224262D61290\n"
+":40048000A081113A9DFD101112D11990C25FD248028850804F34031D64A0C1A0277862584C43402FEFC532F292A09086805CD087D5BBA3D4F0425818813F53B5A3D3A7C3F1\n"
+":4004C000A83518521F90EF9CE160663FBC7034220753BC21D62E043303C12753C823103E17AC2363A9AC0BB8808423F0BF61D1A1F24B49ECD64389D028F80E24D1C362C232\n"
+":40050000C55805D68D207A9DD48C034016D12391B23D04C078486B67CE89814A88F0093A9D816EADDC2EA7624BA9D79214BA6B10B0D90F29781EA658200051EC1DE2C3A891\n"
+":4005400022979A760824E42345712087951C22158F898AEA0EDB5712045AEB2541212A487A9E6898D8B34AA50C5947664C10C10EA89710C084F4F8F90E0405B00BA9E0CAAE\n"
+":40058000A7C0B6113A9E153D6840DCF0211F53C4956A956617586E975C36904A6100225F6FEC0E4CF085E4ADA04B64CB2DA300BA9E0D4F4E2A0B8829DC59647B023E69CA48\n"
+":4005C0002C9CB224020E99EA1B8CC881B840BDD1D8226F53B48C84405388FF324D618B524826002F8BCCADA23CBABCADA616E3263CBAC4354424074F080934780343017471\n"
+":4006000005753BC2040174990126123CBF6009552017906824D1CAD881A0C82095C3957E10F206D002EBFFE1F4C6B8F36FC1F04840EB4A47B9BAA4B3F239A19A021D122D49\n"
+":40064000F4B6444F232B965320DCAE65C1D8021B5ED1601EA75B1D8DB4BA9DA46A5C5DBBDC8C7D758457DC09756CA2EA76852E3930480430A9687A9E00C0AF4FBB1803B158\n"
+":40068000DF97595096CA9240490D292F230F8819B1EF8D8B846527C9FEA732200757D6664972010136FF327C202E32FC0799ED0F825746425ADD81CD13190188CAC3CB3A61\n"
+":4006C000EE2985309958726A10B3019AD79C1FE77B362C1EAA801144A768C4EA74D7900018DE608F53A6243EE97C92008990AF3FE8FC2EF638CD8079F44D38EB7D07804C80\n"
+":4007000017893B4A100EF3F0A0083A438CBB3EF0471EDC6211C7D01FA3204420520084509BC554E3CA560C6BE9EB420242409841000F5F36A7186415F38B3137C043546622\n"
+":4007400035866294E005BAF3B10EB1AD508F0090F0509885DD503E208F58D889228C84C890058843F19940F6E0F8FA0FE47AC6C4C24F1F382200B6060E576E875D7E883262\n"
+":40078000680A714304001380BC1321D63664C09C909C800FAC6CD6030428E1018AEEB1B4400D4CD0113AC6CD901BD5FF0671029DBA982009C369503A483EB1B311DE821DA4\n"
+":4007C0000220551020E320491EBDC410089110CB100CB1108D10D7CC74C5D93F22209A219F958BC4412C710289E26FF9C5510978775E08817E30D44FCD3F64207A501CBC4A\n"
+":40080000E7A24790793F86082035424E4CAA3CE7304011D0B5038D109EE478028BA053DD404205909DCE302181E00BF7FBE9819A2D1110BDD60020E1360A034514188200CA\n"
+":40084000D12490308BB5A181E02F2E088D6EF89C8400084A81C049AA4079F9306243CDAA681FFD5B649F65C008244B017D25B02059E0020137BA080202857D6178444751A4\n"
+":40088000C221B8DF161B20B9810EA78649B144A847C6F0440EF5FE01DCA02800030000FC00000000420607DC3800000370001FBF65D648086A09981A74B4D2186D202F46B4\n"
+":4008C0005062BFB838A58537688636074436034ADA4EBE4F64FC797DB6CB25AEC148AE1D6768235B4A620060040100F3545BBA00102FBFB2E4030041100C020480300F9589\n"
+":4009000040C811B8144DCA80016A248B6DB4B007A5E6080F00FA83F87B62F640105B0AC002E02007D0F3C2098060201C010080480202008C6C996F2FBF7EFDFBF7EFDFBF82\n"
+":400940007EFDFBF620601974D400E06010060160601B868E4110339B200D6245D64167F002004F32D54812040140581DD20A1209EF1CA20A8200B0220B8240C6B04A76070B\n"
+":40098000F797DFBF7EC400003618E5F27130B09001E026C0C2D2000006000008000100020300015400000000FFFFA00038000001EC0024A027A019A3BD9B65A21C00195011\n"
+":4009C0000E51EA7F2A07980E101A1029C58F42E18C1085680AF24109F4EFF60530132029205A476124CC308253688BA80E68116621E64072C07C80E282890324F221A41056\n"
+":400A0000C680F47F9FB2F10BE6510B1008D00448440C4009DDE44F063105B84C4FD13513812C6444C7A6C60CFE4BD42A031827DA07CC109FB0C206C708047F9FB8180C0E1D\n"
+":400A40003FCFCA223B075CB01420101FE77632DC4025000B26CB6D091AD9F3267F707F846028FD8B4D93FA4A843BC91F53C0B733AF95B7E80388A750061D500605B00928EF\n"
+":400A800075806DA7964E30040D60DF00431004DC0107D008980045663CF2E12C166008A201146009EA8004815D00A204B000F10084CE1EEA267EAB66EB440CF004CB006E90\n"
+":400AC0005503E4001B6B846CAE07C00405746BE48DAC194001388182008CE01194021200105A00E14700D40115002078041ED000000000000300071C00000000FFFFB54CE5\n"
+":400B00003800000BB031842E00EB34324D91085237306A54416110A68DE000A30205154008530807A3D491F1D47096A267985D44260B0260CC400B0138430CC204612188EC\n"
+":400B4000296631E48200810230721984D1120C8591201304110D5BFF09D88FC40FF48842882D85024CC318449F870AD0E27D236444F096910124C8138B54630EF1FA60064F\n"
+":400B800047060C03C01E107802229000E244096444401801CD0020CA0288C0449431845A6058CA86990D2311145108235003CA0C516063630C021ACED350926C88628834D8\n"
+":400BC000171C18C880230A0A3C7042288450C1418A389A0D30A95442A1B619BA9210A640052024219041919120200EA70D80E31FA1315BA2288950662650E23F68C22708AE\n"
+":400C0000082911C000105A9045A9150224946B3CCA8858268B528A044AA9A0B4301470804290FD16259205D44ABC053A58308B53293C3CB53D00A63C00E1980866528299B5\n"
+":400C4000C0FE200036B039854A8636911EAAA903F921543A03BC2EB22E186FAE9308885A9A408198089D70224CC6326A2A4C006A01872020341D280E1DCD1A46916A6A0208\n"
+":400C8000C52807BD8789080302C43C209980D4608E157E789C68033980406580105412005DA9C8629912B6A86100AA4D0AA321506600B19F8133D44B5216EAD2F0600CD578\n"
+":400CC000E9D811ABE6B0519B4B986312614240623569D26308F4183229183A44714FCEF7A25B9985B9A45B9B05B9BC5B9C85B9D45B9E048B802C5060E413FC050801628340\n"
+":400D0000A12E6404014552100528F127C97010001D84983D8B4130A34183C7FC52C626C8344022E0212039ED88C1860418EE45598D102451405E961B0420136083062BA004\n"
+":400D400061081A0744C2200C8D30288402164210D230C03833BBE00568430300540840101A206A44ACB611A850400688214016143B9E745806A65462408150301008B002FF\n"
+":400D8000DA4880085003A63195A339B14AC67F11C0040D8662200D972512808C33200242A013214992B312838EFAC2389F426F0B7FA00144A4C494C05A346070E0070041CC\n"
+":400DC000ED4910264C834334804D2B9048C6CB7390384C05CCC89110C70048FC33604AC10993290040D0828EBC1818A12A148A86770F19B104182E0192E024AD3231848E63\n"
+":400E0000C50D1DBA1EED9E862DAA364481410EDC2110301D0641AE6CF62099CC088320596648E0104899C93D133C1118540EB034B550C680CC052A00231540328866A04975\n"
+":400E4000EBE007C92AC092A00929B89EB4846040EA038DC029FBC17024D13FC183ECF492B171E15334CC8C8322058901C4CC3FE2CFBF55C8D5C7FB004583470BE4D8A02C37\n"
+":400E80001A11A0C1A11E38D30640A05E0BA522034118B890958B4C800426811408C004190043388548ECACE26C0EB394B47A00C330072054B93C801BD1401E6E20C022E55F\n"
+":400EC000809804870AB02BCA02D820299A08C8422828C215860C8A6725EF226657191FB6F2314CC6C9B62884EEDA0310280023D532968C8627F5D747CAA208F0883CA151BD\n"
+":400F00008F205810B080E2F719F868289EC60199720A4CB1BBAC09727C45050E50523B10054B93E8BA092C7442A1400586739A13610A85422082850A7220D3356401400236\n"
+":400F4000110022AD7511237F049E6329E0251FE139F41F1B65B802631EC669E44C1F8501FC379C0771F0589F4689EC5C9FC39800311DA7C1F25B9F4231EE639F43D80006C6\n"
+":400F80001E2411F0029F24B1F0149F0730004D9E4339EE32CAC0F8064F815C00040F2398F2220F734E340F638BCDF022425C28F22288BC8BF540CA2ECD62EFCB0BE25D9FF9\n"
+":400FC00045E00C5E592072099485200D300EB38C4CB0308043896C040030EA97008004AC5D040025A1881419990883360031C03EDCB1A400895C40DEA9E5E44201406913D8\n"
+":40100000222010801C8B1B8758F5D108044DE40B10098E02B0500791003C42E0F43AA2801804AB0A5A50717515146DA26C86575C8CF076D947C79EF3D0974200452E14293F\n"
+":40104000084B95986C081FF0EA870A34F028C8C380CC0A010AC340A0102044582A19D293EDC2A1EDA699026E134A99194828816022112B94C030053C21106C950030212091\n"
+":4010800054434074CBFE23C0009D1005533D00387011450400F4022734EA40F30C00A381EC080400C735CA996A1160D4DA0790D61E84B12B8E3D065A2043C0E07F0300607C\n"
+":4010C0000CA542113E3562C312C1F40C81E03AC9F84C90033269EA638804055422A3880810230EA01018472C0504000CCA857D203880C0C8661B3952E2600C02014560382D\n"
+":4011000000A40C6718D3C0E209010D4A50076D982C0280843AC0B5375220586018043D12F0312A8863884597CC266600C2AE34CAE344688757CF4832EC5906804AB168015C\n"
+":40114000C72C5B1A213AB792A725C6821305549528732B001005D8BA2B02AA8958702F001E8266171B1C997C0ED8AD1B2894C02220E06001E2E0107A80A0F00223CB0A2DF1\n"
+":401180001B0A018574F1450CB469705D0E32D03298ADB60C4202F5A68C600CD7F57ABC88F38326461B692CF5F4F2065662781AC0CECEF72C1C04381A567264D6DBAEE9E038\n"
+":4011C000E242DA10F2752000D69A12B2C1B20387908E64BC120BC14A652030B3F4A720DE6E53E0029E6837133188200F6F8E22E4C82D810142FE9183228F369C588A12E8BA\n"
+":40120000508202ECC844BC08142E5D3428000000050001EC00000000000001E071BE00A854AB0003A000A0C4A188522F0010E6FAE7CFED9AF9E000000574074B0F6015AEC6\n"
+":40124000165A17531635155C13EF13991266515C0001003ED44071C60100607B0011000000300060009000C000F001200150018001B001E002100240027002A002D00300FC\n"
+":40128000605D000200009C4053BF00020199033370F4000070710002FF86FF8670760F33549AFEAE53B4005F5058118053E900021000100054B4000C544E002850340580B8\n"
+":4012C000501A01005010F8805018FDCD53510008F000080000001000F8000266F0000333534A8000537D00020000000053610008C0004000C0004000C0004000C000400094\n"
+":40130000526F00080000000000000000000000000000000002990002F4F901535376F7F55348C0005100115F7151002000400040004000400040004000400040FA41FC4CD0\n"
+":4013400001520453074F0748044200400040F842F749F94DFC50FE500050064B0B400B4300400040004000400040004071B2522C52AA014052B30002080000A0512E200018\n"
+":40138000512C010053840000539E01E0539C099952A300020000000052D2008052E50003004003000400533E6000538D00020000823552E1000200001000533E5000531E38\n"
+":4013C0000C00546B000708000CCC0E660E660B330B331000545600E6545A1000545F00040700157C04000FA054680000545C00A060110003B57CB9B8C0D4000000000000C1\n"
+":401400004953505468726561644C6F6F70006170313330325F7365745F6374726C00000020257328256429204572726F72204F6363757272656420696E2048414C5F49329F\n"
+":40144000435F536C617665527843706C7443616C6C6261636B2020537461747573203D203078253032782C20675F736C6176655F6E6578745F72785F6C656E203D20257534\n"
+":4014800020200A0D0000000020257328256429204572726F72204F6363757272656420696E2048414C5F4932435F536C617665547843706C7443616C6C6261636B20207340\n"
+":4014C0007461747573203D2030782530327820675F736C6176655F6E6578745F72785F6C656E203D202575200A0D000025732825642920446562756720496E6974696174D8\n"
+":401500006564205359534346475F4346475231203D203078253038782020464C4153482D3E4F505452203D20307825303878200A0D00000049535054687265616400000014\n"
+":4015400064656661756C745461736B00496E76616C696420466F726D6174202D2030782530387820213D20307825303878202C20205769647468202D2025687520213D20A5\n"
+":40158000256875202C20486569676874202D2025687520213D20256875200A0D000000000A0D2052454144204D4173746572205472616E736D6974204572726F7220212161\n"
+":4015C00020202D20307825303278203078253038782020524547203D2030782530347820666F7220736C61766520307825303278200A0D000A0D205752495445204D417323\n"
+":40160000746572205472616E736D6974204572726F7220212120202D203078253032782030782530387820524547203D2030782530347820666F7220736C617665203078D2\n"
+":4016400025303278200A0D000A0D204D41737465722052656365697665204572726F72202121202D203078253032782030782530387820666F7220736C61766520307825D2\n"
+":401680003032782020666F7220524547202D20307825303478200A0D00000000BC16020800000020A80000006A4A000864170208A8000020383100007A4A000880841E007A\n"
+":4016C00000000000AAAAAAAA000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000042\n"
+":401700000000000000000000000000000000000000000000000000000000000000000005FFFF0000000000000000000000000000C0FF0208000000000000000000000000DD\n"
+":2417400000000000000000000000000000000000000000000000000000000000000000000000000085\n"
+":020000040800F2\n"
+":4000000008040020D5000008C9010008C701000800000000000000000000000000000000000000000000000000000000CD0100080000000000000000CB010008CF01000893\n"
+":40004000E7000008E7000008E7000008E7000008E7000008E7000008E7000008E700000800000000E7000008E7000008E7000008E7000008E7000008E7000008E70000087F\n"
+":40008000E7000008E7000008E700000800000000E7000008E7000008E7000008E7000008E7000008E7000008E7000008E7000008E7000008E700000800000000000000001D\n"
+":4000C0000348854600F014F80048004751020008080400200448804704480047FEE7FEE7FEE7FEE7FEE7FEE7DD010008C1000008064C0125064E05E0E36807CC2B430C3CA0\n"
+":4001000098471034B442F7D3FFF7DEFFA4020008C402000810B500210748C9438162002282624162426201620262C161C26100F00DF8002010BD0000001002400248016829\n"
+":40014000491C016070470000000000207047000008B515480168821511430160C16889088900C1600168114A114001600168012212041140009101689200914301600021AD\n"
+":40018000C16042680A4B1A4005235B03D218426042681F231B029A438314D2184260016105490448086008BD00100240D4FFF6FEFF1FFF0068FF1F0004000020704710B525\n"
+":4001C000FFF7FCFF10BDFEE770477047704710B5FFF7B4FFFFF7F3FF10BD000010480168821511430160C1680E4A1140C16001680D4A1140016081684908490081600168D5\n"
+":400200000122920491430160C168FD2212049143C160002101610549C003886070470000001002400C40FF88F6FFF6FE00ED00E002E008C8121F08C1002AFAD17047704760\n"
+":40024000002001E001C1121F002AFBD17047000008B5002462B60F48009401680E4A1140C204914214D1416800910D46016881F3088872B609498860FFF76AFF08480461F9\n"
+":4002800044618461012080F31088FFF743FFA847FEE70000000400080000FE2F00ED00E000E000E0C4020008000000200800000030020008CC020008080000200004000084\n"
+":0C02C000400200080000000080841E00C6\n"
+":020000040802F0\n"
+":20FFC0003131353043553936524b56313930313131306433383138393458585858585858f6\n"
+":04000005080000C12E\n"
+":00000001FF\n"
diff --git a/drivers/media/platform/imx8/mcu_firmware.h b/drivers/media/platform/imx8/mcu_firmware.h
new file mode 100644
index 000000000000..de06baedd10f
--- /dev/null
+++ b/drivers/media/platform/imx8/mcu_firmware.h
@@ -0,0 +1,91 @@
+#ifndef _MCU_FIRMWARE_H
+#define _MCU_FIRMWARE_H
+
+/* Local Defines */
+#define MAX_BUF_LEN 2048
+
+#define MAX_PAGES 512
+#define TOTAL_PAGES 1536
+#define NUM_ERASE_CYCLES (TOTAL_PAGES / MAX_PAGES)
+
+#define FLASH_START_ADDRESS 0x08000000
+#define FLASH_SIZE 192*1024
+#define FLASH_READ_LEN 256
+
+#define CR 13 /* Carriage return */
+#define LF 10 /* Line feed */
+
+/*MCU Buffer size increased - Fix for loading menu based controls */
+#define MCU_BUFFER_SIZE 1024
+
+/* TODO: Only necessary commands added */
+enum _i2c_cmds
+{
+ BL_GET_VERSION = 0x01,
+ BL_GO = 0x21,
+ BL_READ_MEM = 0x11,
+ BL_WRITE_MEM = 0x31,
+ BL_WRITE_MEM_NS = 0x32,
+ BL_ERASE_MEM = 0x44,
+ BL_ERASE_MEM_NS = 0x45,
+};
+
+enum _i2c_resp
+{
+ RESP_ACK = 0x79,
+ RESP_NACK = 0x1F,
+ RESP_BUSY = 0x76,
+};
+
+enum
+{
+ NUM_LANES_1 = 0x01,
+ NUM_LANES_2 = 0x02,
+ NUM_LANES_3 = 0x03,
+ NUM_LANES_4 = 0x04,
+ NUM_LANES_UNKWN = 0xFF,
+};
+
+enum _ihex_rectype
+{
+ /* Normal data */
+ REC_TYPE_DATA = 0x00,
+ /* End of File */
+ REC_TYPE_EOF = 0x01,
+
+ /* Extended Segment Address */
+ REC_TYPE_ESA = 0x02,
+ /* Start Segment Address */
+ REC_TYPE_SSA = 0x03,
+
+ /* Extended Linear Address */
+ REC_TYPE_ELA = 0x04,
+ /* Start Linear Address */
+ REC_TYPE_SLA = 0x05,
+};
+
+typedef struct __attribute__ ((packed)) _ihex_rec {
+ unsigned char datasize;
+ unsigned short int addr;
+ unsigned char rectype;
+ unsigned char recdata[];
+} IHEX_RECORD;
+
+unsigned int g_bload_flashaddr = 0x0000;
+
+uint8_t *fw_version = NULL;
+
+/* MCU communication variables */
+unsigned char mc_data[MCU_BUFFER_SIZE];
+unsigned char mc_ret_data[MCU_BUFFER_SIZE];
+
+/* Buffer to Send Bootloader CMDs */
+unsigned char g_bload_buf[MAX_BUF_LEN] = { 0 };
+
+unsigned short int g_bload_crc16 = 0x0000;
+
+const char g_mcu_fw_buf[] =
+#include "ecam50_cam_fw.txt"
+ ;
+
+#endif //_MCU_FIRMWARE_H
diff --git a/drivers/media/platform/imx8/mxc-isi-cap.c b/drivers/media/platform/imx8/mxc-isi-cap.c
index b8e2e44ba0ec..23314d48d0cd 100644
--- a/drivers/media/platform/imx8/mxc-isi-cap.c
+++ b/drivers/media/platform/imx8/mxc-isi-cap.c
@@ -573,6 +573,8 @@ static struct vb2_ops mxc_cap_vb2_qops = {
.stop_streaming = cap_vb2_stop_streaming,
};
+/* To enable ctrls in sensor driver, we need to comment the ISI ctrls */
+#ifndef CONFIG_VIDEO_ECAM
/*
* V4L2 controls handling
*/
@@ -659,6 +661,7 @@ void mxc_isi_ctrls_delete(struct mxc_isi_dev *mxc_isi)
ctrls->alpha = NULL;
}
}
+#endif
static struct media_pad *mxc_isi_get_remote_source_pad(struct mxc_isi_dev *mxc_isi)
{
@@ -965,7 +968,12 @@ static int mxc_isi_source_fmt_init(struct mxc_isi_dev *mxc_isi)
int ret;
/* Get remote source pad */
+#ifndef CONFIG_VIDEO_ECAM
source_pad = subdev_get_remote_source_pad(&mxc_isi->isi_cap.sd);
+#else
+ /* To enable ctrls in sensor driver */
+ source_pad = mxc_isi_get_remote_source_pad(mxc_isi);
+#endif
if (source_pad == NULL) {
v4l2_err(mxc_isi->v4l2_dev, "%s, No remote pad found!\n", __func__);
return -EINVAL;
@@ -1262,7 +1270,12 @@ static int mxc_isi_cap_g_chip_ident(struct file *file, void *fb,
}
/* Get remote source pad subdev */
+#ifndef CONFIG_VIDEO_ECAM
sd = mxc_isi_get_sensor_subdev(&mxc_isi->isi_cap.sd);
+#else
+ /* To enable ctrls in sensor driver */
+ sd = media_entity_to_v4l2_subdev(source_pad->entity);
+#endif
if (sd == NULL) {
v4l2_err(mxc_isi->v4l2_dev, "%s, No remote subdev found!\n", __func__);
return -EINVAL;
@@ -1288,6 +1301,7 @@ static int mxc_isi_cap_g_chip_ident(struct file *file, void *fb,
return -ENODEV;
}
+#ifndef CONFIG_VIDEO_ECAM
sprintf(chip->match.name, "%s-%d\n", sd->name, vdev->num);
/* Just check if the callback of the sensor device returns success,
@@ -1296,6 +1310,10 @@ static int mxc_isi_cap_g_chip_ident(struct file *file, void *fb,
*/
return v4l2_subdev_call(sd, core, g_chip_ident, &ci);
+#else
+ sprintf(chip->match.name, "imx8_%s_%d", remote->name, vdev->num);
+ return 0;
+#endif
}
static int mxc_isi_cap_g_parm(struct file *file, void *fh,
@@ -1312,7 +1330,12 @@ static int mxc_isi_cap_g_parm(struct file *file, void *fh,
}
/* Get remote source pad subdev */
+#ifndef CONFIG_VIDEO_ECAM
sd = mxc_isi_get_sensor_subdev(&mxc_isi->isi_cap.sd);
+#else
+ /* To enable ctrls in sensor driver */
+ sd = media_entity_to_v4l2_subdev(source_pad->entity);
+#endif
if (sd == NULL) {
v4l2_err(mxc_isi->v4l2_dev, "%s, No remote subdev found!\n", __func__);
return -EINVAL;
@@ -1334,7 +1357,12 @@ static int mxc_isi_cap_s_parm(struct file *file, void *fh,
}
/* Get remote source pad subdev */
+#ifndef CONFIG_VIDEO_ECAM
sd = mxc_isi_get_sensor_subdev(&mxc_isi->isi_cap.sd);
+#else
+ /* To enable ctrls in sensor driver */
+ sd = media_entity_to_v4l2_subdev(source_pad->entity);
+#endif
if (sd == NULL) {
v4l2_err(mxc_isi->v4l2_dev, "%s, No remote subdev found!\n", __func__);
return -EINVAL;
@@ -1368,7 +1396,17 @@ static int mxc_isi_cap_enum_framesizes(struct file *file, void *priv,
}
/* Get remote source pad subdev */
+#ifndef CONFIG_VIDEO_ECAM
sd = mxc_isi_get_sensor_subdev(&mxc_isi->isi_cap.sd);
+#else
+ /* To enable ctrls in sensor driver */
+ sd = media_entity_to_v4l2_subdev(source_pad->entity);
+#endif
+ if (sd == NULL) {
+ v4l2_err(mxc_isi->v4l2_dev, "%s, No remote subdev found!\n", __func__);
+ return -EINVAL;
+ }
+
if (sd == NULL) {
v4l2_err(&mxc_isi->isi_cap.sd, "Can't find subdev\n");
return -ENODEV;
@@ -1430,11 +1468,20 @@ static int mxc_isi_cap_enum_frameintervals(struct file *file, void *fh,
}
/* Get remote source pad subdev */
+#ifndef CONFIG_VIDEO_ECAM
sd = mxc_isi_get_sensor_subdev(&mxc_isi->isi_cap.sd);
if (sd == NULL) {
v4l2_err(&mxc_isi->isi_cap.sd, "Can't find sensor subdev\n");
return -ENODEV;
}
+#else
+ /* To enable ctrls in sensor driver */
+ sd = media_entity_to_v4l2_subdev(source_pad->entity);
+ if (sd == NULL) {
+ v4l2_err(mxc_isi->v4l2_dev, "%s, No remote subdev found!\n", __func__);
+ return -EINVAL;
+ }
+#endif
ret = v4l2_subdev_call(sd, pad, enum_frame_interval, NULL, &fie);
if (ret)
@@ -1449,6 +1496,193 @@ static int mxc_isi_cap_enum_frameintervals(struct file *file, void *fh,
return 0;
}
+#ifdef CONFIG_VIDEO_ECAM
+static int mxc_vidioc_queryctrl(struct file *file, void *fh,
+ struct v4l2_queryctrl *a)
+{
+ struct mxc_isi_dev *mxc_isi = video_drvdata(file);
+ struct v4l2_subdev *sd;
+ struct media_pad *source_pad;
+
+ source_pad = mxc_isi_get_remote_source_pad(mxc_isi);
+ if (source_pad == NULL) {
+ v4l2_err(mxc_isi->v4l2_dev, "%s, No remote pad found!\n", __func__);
+ return -EINVAL;
+ }
+
+ /* Get remote source pad subdev */
+ sd = media_entity_to_v4l2_subdev(source_pad->entity);
+ if (sd == NULL) {
+ v4l2_err(mxc_isi->v4l2_dev, "%s, No remote subdev found!\n", __func__);
+ return -EINVAL;
+ }
+
+ return v4l2_subdev_call(sd, core, queryctrl, a);
+}
+
+static int mxc_vidioc_query_ext_ctrl(struct file *file, void *fh,
+ struct v4l2_query_ext_ctrl *qec)
+{
+ struct v4l2_queryctrl qc = {
+ .id = qec->id
+ };
+ int ret;
+
+ ret = mxc_vidioc_queryctrl(file, fh, &qc);
+
+ if (ret)
+ return ret;
+
+ qec->id = qc.id;
+ qec->type = qc.type;
+ strlcpy(qec->name, qc.name, sizeof(qec->name));
+ qec->maximum = qc.maximum;
+ qec->minimum = qc.minimum;
+ qec->step = qc.step;
+ qec->default_value = qc.default_value;
+ qec->flags = qc.flags;
+ qec->elem_size = 4;
+ qec->elems = 1;
+ qec->nr_of_dims = 0;
+ memset(qec->dims, 0, sizeof(qec->dims));
+ memset(qec->reserved, 0, sizeof(qec->reserved));
+
+ return 0;
+}
+
+
+static int mxc_isi_vidioc_querymenu(struct file *file, void *fh,
+ struct v4l2_querymenu *qm)
+{
+ struct mxc_isi_dev *mxc_isi = video_drvdata(file);
+ struct v4l2_subdev *sd;
+ struct media_pad *source_pad;
+ source_pad = mxc_isi_get_remote_source_pad(mxc_isi);
+ if (source_pad == NULL) {
+ v4l2_err(mxc_isi->v4l2_dev, "%s, No remote pad found!\n", __func__);
+ return -EINVAL;
+ }
+
+ /* Get remote source pad subdev */
+ sd = media_entity_to_v4l2_subdev(source_pad->entity);
+ if (sd == NULL) {
+ v4l2_err(mxc_isi->v4l2_dev, "%s, No remote subdev found!\n", __func__);
+ return -EINVAL;
+ }
+ return v4l2_subdev_call(sd, core, querymenu, qm);
+}
+
+static int mxc_isi_vidioc_g_ctrl(struct file *file, void *fh,
+ struct v4l2_control *a)
+{
+ struct mxc_isi_dev *mxc_isi = video_drvdata(file);
+ struct v4l2_subdev *sd;
+ struct media_pad *source_pad;
+ source_pad = mxc_isi_get_remote_source_pad(mxc_isi);
+ if (source_pad == NULL) {
+ v4l2_err(mxc_isi->v4l2_dev, "%s, No remote pad found!\n", __func__);
+ return -EINVAL;
+ }
+
+ /* Get remote source pad subdev */
+ sd = media_entity_to_v4l2_subdev(source_pad->entity);
+ if (sd == NULL) {
+ v4l2_err(mxc_isi->v4l2_dev, "%s, No remote subdev found!\n", __func__);
+ return -EINVAL;
+ }
+ return v4l2_subdev_call(sd, core, g_ctrl, a);
+}
+
+static int mxc_isi_vidioc_s_ctrl(struct file *file, void *fh,
+ struct v4l2_control *a)
+{
+ struct mxc_isi_dev *mxc_isi = video_drvdata(file);
+ struct v4l2_subdev *sd;
+ struct media_pad *source_pad;
+ source_pad = mxc_isi_get_remote_source_pad(mxc_isi);
+ if (source_pad == NULL) {
+ v4l2_err(mxc_isi->v4l2_dev, "%s, No remote pad found!\n", __func__);
+ return -EINVAL;
+ }
+
+ /* Get remote source pad subdev */
+ sd = media_entity_to_v4l2_subdev(source_pad->entity);
+ if (sd == NULL) {
+ v4l2_err(mxc_isi->v4l2_dev, "%s, No remote subdev found!\n", __func__);
+ return -EINVAL;
+ }
+ return v4l2_subdev_call(sd, core, s_ctrl, a);
+}
+
+static int mxc_isi_vidioc_g_ext_ctrls(struct file *file, void *fh,
+ struct v4l2_ext_controls *a)
+{
+ struct mxc_isi_dev *mxc_isi = video_drvdata(file);
+ struct v4l2_subdev *sd;
+ struct media_pad *source_pad;
+ source_pad = mxc_isi_get_remote_source_pad(mxc_isi);
+ if (source_pad == NULL) {
+ v4l2_err(mxc_isi->v4l2_dev, "%s, No remote pad found!\n", __func__);
+ return -EINVAL;
+ }
+
+ /* Get remote source pad subdev */
+ sd = media_entity_to_v4l2_subdev(source_pad->entity);
+ if (sd == NULL) {
+ v4l2_err(mxc_isi->v4l2_dev, "%s, No remote subdev found!\n", __func__);
+ return -EINVAL;
+ }
+
+ return v4l2_subdev_call(sd, core, g_ext_ctrls, a);
+}
+
+static int mxc_isi_vidioc_try_ext_ctrls(struct file *file, void *fh,
+ struct v4l2_ext_controls *a)
+{
+ struct mxc_isi_dev *mxc_isi = video_drvdata(file);
+ struct v4l2_subdev *sd;
+ struct media_pad *source_pad;
+ source_pad = mxc_isi_get_remote_source_pad(mxc_isi);
+ if (source_pad == NULL) {
+ v4l2_err(mxc_isi->v4l2_dev, "%s, No remote pad found!\n", __func__);
+ return -EINVAL;
+ }
+
+ /* Get remote source pad subdev */
+ sd = media_entity_to_v4l2_subdev(source_pad->entity);
+ if (sd == NULL) {
+ v4l2_err(mxc_isi->v4l2_dev, "%s, No remote subdev found!\n", __func__);
+ return -EINVAL;
+ }
+
+ return v4l2_subdev_call(sd, core, try_ext_ctrls, a);
+
+}
+
+static int mxc_isi_vidioc_s_ext_ctrls(struct file *file, void *fh,
+ struct v4l2_ext_controls *a)
+{
+ struct mxc_isi_dev *mxc_isi = video_drvdata(file);
+ struct v4l2_subdev *sd;
+ struct media_pad *source_pad;
+ source_pad = mxc_isi_get_remote_source_pad(mxc_isi);
+ if (source_pad == NULL) {
+ v4l2_err(mxc_isi->v4l2_dev, "%s, No remote pad found!\n", __func__);
+ return -EINVAL;
+ }
+
+ /* Get remote source pad subdev */
+ sd = media_entity_to_v4l2_subdev(source_pad->entity);
+ if (sd == NULL) {
+ v4l2_err(mxc_isi->v4l2_dev, "%s, No remote subdev found!\n", __func__);
+ return -EINVAL;
+ }
+
+ return v4l2_subdev_call(sd, core, s_ext_ctrls, a);
+
+}
+#endif
+
static const struct v4l2_ioctl_ops mxc_isi_capture_ioctl_ops = {
.vidioc_querycap = mxc_isi_cap_querycap,
@@ -1477,6 +1711,16 @@ static const struct v4l2_ioctl_ops mxc_isi_capture_ioctl_ops = {
.vidioc_enum_framesizes = mxc_isi_cap_enum_framesizes,
.vidioc_enum_frameintervals = mxc_isi_cap_enum_frameintervals,
+#ifdef CONFIG_VIDEO_ECAM
+ .vidioc_queryctrl = mxc_vidioc_queryctrl,
+ .vidioc_query_ext_ctrl = mxc_vidioc_query_ext_ctrl,
+ .vidioc_querymenu = mxc_isi_vidioc_querymenu,
+ .vidioc_g_ctrl = mxc_isi_vidioc_g_ctrl,
+ .vidioc_s_ctrl = mxc_isi_vidioc_s_ctrl,
+ .vidioc_g_ext_ctrls = mxc_isi_vidioc_g_ext_ctrls,
+ .vidioc_s_ext_ctrls = mxc_isi_vidioc_s_ext_ctrls,
+ .vidioc_try_ext_ctrls = mxc_isi_vidioc_try_ext_ctrls
+#endif
};
/* Capture subdev media entity operations */
@@ -1787,22 +2031,28 @@ static int mxc_isi_register_cap_device(struct mxc_isi_dev *mxc_isi,
if (ret)
goto err_free_ctx;
+/* To enable ctrls in sensor driver, we need to comment the ISI ctrls */
+#ifndef CONFIG_VIDEO_ECAM
ret = mxc_isi_ctrls_create(mxc_isi);
if (ret)
goto err_me_cleanup;
+#endif
ret = video_register_device(vdev, VFL_TYPE_GRABBER, -1);
if (ret)
goto err_ctrl_free;
-
+#ifndef CONFIG_VIDEO_ECAM
vdev->ctrl_handler = &mxc_isi->ctrls.handler;
+#endif
v4l2_info(v4l2_dev, "Registered %s as /dev/%s\n",
vdev->name, video_device_node_name(vdev));
return 0;
err_ctrl_free:
+#ifndef CONFIG_VIDEO_ECAM
mxc_isi_ctrls_delete(mxc_isi);
+#endif
err_me_cleanup:
media_entity_cleanup(&vdev->entity);
err_free_ctx:
@@ -1864,7 +2114,10 @@ static void mxc_isi_subdev_unregistered(struct v4l2_subdev *sd)
vdev = &mxc_isi->isi_cap.vdev;
if (video_is_registered(vdev)) {
video_unregister_device(vdev);
+/* To enable ctrls in sensor driver, we need to comment the ISI ctrls*/
+#ifndef CONFIG_VIDEO_ECAM
mxc_isi_ctrls_delete(mxc_isi);
+#endif
media_entity_cleanup(&vdev->entity);
}
diff --git a/drivers/media/platform/imx8/mxc-mipi-csi2.c b/drivers/media/platform/imx8/mxc-mipi-csi2.c
index aaa0e638800a..fc38dfda0db4 100644
--- a/drivers/media/platform/imx8/mxc-mipi-csi2.c
+++ b/drivers/media/platform/imx8/mxc-mipi-csi2.c
@@ -435,6 +435,158 @@ static const struct media_entity_operations mipi_csi2_sd_media_ops = {
/*
* V4L2 subdev operations
*/
+#ifdef CONFIG_VIDEO_ECAM
+static int mipi_csi2_querymenu(struct v4l2_subdev *sd, struct v4l2_querymenu *qm)
+{
+ struct mxc_mipi_csi2_dev *csi2dev = sd_to_mxc_mipi_csi2_dev(sd);
+ struct media_pad *source_pad;
+ struct v4l2_subdev *sen_sd;
+
+ source_pad = mxc_csi2_get_remote_sensor_pad(csi2dev);
+ if (source_pad == NULL) {
+ v4l2_err(&csi2dev->v4l2_dev, "%s, No remote pad found!\n", __func__);
+ return -EINVAL;
+ }
+
+ /* Get remote source pad subdev */
+ sen_sd = media_entity_to_v4l2_subdev(source_pad->entity);
+ if (sen_sd == NULL) {
+ v4l2_err(&csi2dev->v4l2_dev, "%s, No remote subdev found!\n", __func__);
+ return -EINVAL;
+ }
+
+ return v4l2_subdev_call(sen_sd, core, querymenu, qm);
+}
+
+static int mipi_csi2_queryctrl(struct v4l2_subdev *sd, struct v4l2_queryctrl *qc)
+{
+ struct mxc_mipi_csi2_dev *csi2dev = sd_to_mxc_mipi_csi2_dev(sd);
+ struct media_pad *source_pad;
+ struct v4l2_subdev *sen_sd;
+
+ source_pad = mxc_csi2_get_remote_sensor_pad(csi2dev);
+ if (source_pad == NULL) {
+ v4l2_err(&csi2dev->v4l2_dev, "%s, No remote pad found!\n", __func__);
+ return -EINVAL;
+ }
+
+ /* Get remote source pad subdev */
+ sen_sd = media_entity_to_v4l2_subdev(source_pad->entity);
+ if (sen_sd == NULL) {
+ v4l2_err(&csi2dev->v4l2_dev, "%s, No remote subdev found!\n", __func__);
+ return -EINVAL;
+ }
+ return v4l2_subdev_call(sen_sd, core, queryctrl, qc);
+}
+
+static int mipi_csi2_g_ctrl(struct v4l2_subdev *sd, struct v4l2_control *ctrl)
+{
+ struct mxc_mipi_csi2_dev *csi2dev = sd_to_mxc_mipi_csi2_dev(sd);
+ struct media_pad *source_pad;
+ struct v4l2_subdev *sen_sd;
+
+ source_pad = mxc_csi2_get_remote_sensor_pad(csi2dev);
+ if (source_pad == NULL) {
+ v4l2_err(&csi2dev->v4l2_dev, "%s, No remote pad found!\n", __func__);
+ return -EINVAL;
+ }
+
+ /* Get remote source pad subdev */
+ sen_sd = media_entity_to_v4l2_subdev(source_pad->entity);
+ if (sen_sd == NULL) {
+ v4l2_err(&csi2dev->v4l2_dev, "%s, No remote subdev found!\n", __func__);
+ return -EINVAL;
+ }
+ return v4l2_subdev_call(sen_sd, core, g_ctrl, ctrl);
+}
+
+static int mipi_csi2_s_ctrl(struct v4l2_subdev *sd, struct v4l2_control *ctrl)
+{
+
+ struct mxc_mipi_csi2_dev *csi2dev = sd_to_mxc_mipi_csi2_dev(sd);
+ struct media_pad *source_pad;
+ struct v4l2_subdev *sen_sd;
+
+ source_pad = mxc_csi2_get_remote_sensor_pad(csi2dev);
+ if (source_pad == NULL) {
+ v4l2_err(&csi2dev->v4l2_dev, "%s, No remote pad found!\n", __func__);
+ return -EINVAL;
+ }
+
+ /* Get remote source pad subdev */
+ sen_sd = media_entity_to_v4l2_subdev(source_pad->entity);
+ if (sen_sd == NULL) {
+ v4l2_err(&csi2dev->v4l2_dev, "%s, No remote subdev found!\n", __func__);
+ return -EINVAL;
+ }
+
+ return v4l2_subdev_call(sen_sd, core, s_ctrl, ctrl);
+}
+
+static int mipi_csi2_g_ext_ctrls(struct v4l2_subdev *sd, struct v4l2_ext_controls *ctrls)
+{
+ struct mxc_mipi_csi2_dev *csi2dev = sd_to_mxc_mipi_csi2_dev(sd);
+ struct media_pad *source_pad;
+ struct v4l2_subdev *sen_sd;
+
+ source_pad = mxc_csi2_get_remote_sensor_pad(csi2dev);
+ if (source_pad == NULL) {
+ v4l2_err(&csi2dev->v4l2_dev, "%s, No remote pad found!\n", __func__);
+ return -EINVAL;
+ }
+
+ /* Get remote source pad subdev */
+ sen_sd = media_entity_to_v4l2_subdev(source_pad->entity);
+ if (sen_sd == NULL) {
+ v4l2_err(&csi2dev->v4l2_dev, "%s, No remote subdev found!\n", __func__);
+ return -EINVAL;
+ }
+ return v4l2_subdev_call(sen_sd, core, g_ext_ctrls, ctrls);
+}
+
+static int mipi_csi2_try_ext_ctrls(struct v4l2_subdev *sd, struct v4l2_ext_controls *ctrls)
+{
+ struct mxc_mipi_csi2_dev *csi2dev = sd_to_mxc_mipi_csi2_dev(sd);
+ struct media_pad *source_pad;
+ struct v4l2_subdev *sen_sd;
+
+ source_pad = mxc_csi2_get_remote_sensor_pad(csi2dev);
+ if (source_pad == NULL) {
+ v4l2_err(&csi2dev->v4l2_dev, "%s, No remote pad found!\n", __func__);
+ return -EINVAL;
+ }
+
+ /* Get remote source pad subdev */
+ sen_sd = media_entity_to_v4l2_subdev(source_pad->entity);
+ if (sen_sd == NULL) {
+ v4l2_err(&csi2dev->v4l2_dev, "%s, No remote subdev found!\n", __func__);
+ return -EINVAL;
+ }
+ return v4l2_subdev_call(sen_sd, core, try_ext_ctrls, ctrls);
+}
+
+static int mipi_csi2_s_ext_ctrls(struct v4l2_subdev *sd, struct v4l2_ext_controls *ctrls)
+{
+ struct mxc_mipi_csi2_dev *csi2dev = sd_to_mxc_mipi_csi2_dev(sd);
+ struct media_pad *source_pad;
+ struct v4l2_subdev *sen_sd;
+
+ source_pad = mxc_csi2_get_remote_sensor_pad(csi2dev);
+ if (source_pad == NULL) {
+ v4l2_err(&csi2dev->v4l2_dev, "%s, No remote pad found!\n", __func__);
+ return -EINVAL;
+ }
+
+ /* Get remote source pad subdev */
+ sen_sd = media_entity_to_v4l2_subdev(source_pad->entity);
+ if (sen_sd == NULL) {
+ v4l2_err(&csi2dev->v4l2_dev, "%s, No remote subdev found!\n", __func__);
+ return -EINVAL;
+ }
+ return v4l2_subdev_call(sen_sd, core, s_ext_ctrls, ctrls);
+}
+#endif
+
static int mipi_csi2_s_power(struct v4l2_subdev *sd, int on)
{
struct mxc_mipi_csi2_dev *csi2dev = sd_to_mxc_mipi_csi2_dev(sd);
@@ -643,6 +795,15 @@ static struct v4l2_subdev_pad_ops mipi_csi2_pad_ops = {
static struct v4l2_subdev_core_ops mipi_csi2_core_ops = {
.s_power = mipi_csi2_s_power,
+#ifdef CONFIG_VIDEO_ECAM
+ .queryctrl = mipi_csi2_queryctrl,
+ .g_ctrl = mipi_csi2_g_ctrl,
+ .s_ctrl = mipi_csi2_s_ctrl,
+ .g_ext_ctrls = mipi_csi2_g_ext_ctrls,
+ .s_ext_ctrls = mipi_csi2_s_ext_ctrls,
+ .try_ext_ctrls = mipi_csi2_try_ext_ctrls,
+ .querymenu = mipi_csi2_querymenu,
+#endif
};
static struct v4l2_subdev_video_ops mipi_csi2_video_ops = {
diff --git a/include/media/v4l2-subdev.h b/include/media/v4l2-subdev.h
index fb143fd2ea43..497097eb871c 100644
--- a/include/media/v4l2-subdev.h
+++ b/include/media/v4l2-subdev.h
@@ -195,6 +195,15 @@ struct v4l2_subdev_core_ops {
int (*load_fw)(struct v4l2_subdev *sd);
int (*reset)(struct v4l2_subdev *sd, u32 val);
int (*s_gpio)(struct v4l2_subdev *sd, u32 val);
+#ifdef CONFIG_VIDEO_ECAM
+ int (*queryctrl)(struct v4l2_subdev *sd, struct v4l2_queryctrl *qc);
+ int (*g_ctrl)(struct v4l2_subdev *sd, struct v4l2_control *ctrl);
+ int (*s_ctrl)(struct v4l2_subdev *sd, struct v4l2_control *ctrl);
+ int (*querymenu)(struct v4l2_subdev *sd, struct v4l2_querymenu *qm);
+ int (*g_ext_ctrls)(struct v4l2_subdev *sd, struct v4l2_ext_controls *ctrls);
+ int (*s_ext_ctrls)(struct v4l2_subdev *sd, struct v4l2_ext_controls *ctrls);
+ int (*try_ext_ctrls)(struct v4l2_subdev *sd, struct v4l2_ext_controls *ctrls);
+#endif
long (*ioctl)(struct v4l2_subdev *sd, unsigned int cmd, void *arg);
#ifdef CONFIG_COMPAT
long (*compat_ioctl32)(struct v4l2_subdev *sd, unsigned int cmd,