Просмотр исходного кода

Merge branch 'master' of https://gitee.com/openLuat/LuatOS

zhutianhua 7 месяцев назад
Родитель
Сommit
2740310498
82 измененных файлов с 3663 добавлено и 342 удалено
  1. 9 0
      components/airlink/binding/luat_lib_airlink.c
  2. 1 1
      components/airlink/src/driver/luat_airlink_drv_wlan.c
  3. 3 3
      components/airlink/src/exec/luat_airlink_cmd_exec_gpio.c
  4. 29 0
      components/airlink/src/exec/luat_airlink_cmd_exec_info.c
  5. 3 3
      components/airlink/src/luat_airlink.c
  6. 13 0
      components/airlink/src/luat_airlink_cmds.c
  7. 4 4
      components/airlink/src/task/luat_airlink_spi_master_task.c
  8. 4 4
      components/airlink/src/task/luat_airlink_spi_slave_task.c
  9. 1 1
      components/airlink/src/task/luat_airlink_task.c
  10. 14 9
      components/airlink/src/task/luat_airlink_uart_task.c
  11. 56 16
      components/airtalk/binding/luat_lib_airtalk.c
  12. 14 5
      components/airtalk/core/airtalk_network.c
  13. 2 1
      components/airtalk/include/airtalk_api.h
  14. 1 0
      components/airtalk/include/airtalk_def.h
  15. 0 1
      components/bluetooth/src/luat_bluetooth.c
  16. 1 1
      components/cmux/luat_cmux.c
  17. 34 0
      components/drv/src/luat_drv_pm.c
  18. 2 8
      components/eink/luat_lib_eink.c
  19. 10 10
      components/ethernet/w5500/w5500.c
  20. 1 2
      components/gmssl/bind/luat_lib_gmssl.c
  21. 2 2
      components/gtfont/luat_gtfont.c
  22. 7 11
      components/lcd/luat_lib_lcd.c
  23. 6 6
      components/little_flash/luat_little_flash_lfs2.c
  24. 0 2
      components/little_flash/src/little_flash.c
  25. 1 1
      components/lora/luat_lib_lora.c
  26. 1 1
      components/lora2/luat_lib_lora.c
  27. 0 6
      components/lora2/sx126x/sx126x-board.c
  28. 1 1
      components/lvgl/binding/luat_lib_lvgl_font.c
  29. 2 3
      components/lvgl/exts/lv_gif/gifdec.c
  30. 9 5
      components/mobile/luat_lib_mobile.c
  31. 2 0
      components/network/adapter/luat_lib_socket.c
  32. 1 0
      components/network/adapter/luat_network_adapter.h
  33. 5 5
      components/network/adapter_lwip2/net_lwip2.c
  34. 1 1
      components/network/httpsrv/src/luat_lib_httpsrv.c
  35. 78 45
      components/network/libemqtt/luat_lib_mqtt.c
  36. 6 1
      components/network/libemqtt/luat_mqtt.h
  37. 18 2
      components/network/libemqtt/luat_mqtt_client.c
  38. 5 1
      components/network/netdrv/src/luat_netdrv.c
  39. 4 4
      components/network/netdrv/src/luat_netdrv_napt.c
  40. 2 2
      components/network/netdrv/src/luat_netdrv_napt_tcp.c
  41. 1 1
      components/network/netdrv/src/luat_netdrv_napt_udp.c
  42. 1 1
      components/network/ulwip/binding/luat_lib_ulwip.c
  43. 19 4
      components/network/ulwip/src/ulwip_dhcp_client.c
  44. 1 1
      components/onewire/binding/luat_lib_onewire.c
  45. 6 6
      components/sfud/luat_sfud_lfs2.c
  46. 1 2
      components/sfud/sfud.c
  47. 9 6
      components/sms/binding/luat_lib_sms.c
  48. 5 0
      components/sms/include/luat_sms.h
  49. 1 1
      components/sms/src/luat_sms.c
  50. 2 1
      components/soft_keyboard/luat_lib_softkeyboard.c
  51. 2051 0
      components/tp/cst92xx_fw.h
  52. 1 1
      components/tp/luat_lib_tp.c
  53. 1 1
      components/tp/luat_tp.h
  54. 11 29
      components/tp/luat_tp_cst820.c
  55. 724 0
      components/tp/luat_tp_cst9220.c
  56. 0 1
      components/tp/luat_tp_ft3x68.c
  57. 1 2
      components/tp/luat_tp_jd9261t.c
  58. 3 1
      components/tp/luat_tp_reg.h
  59. 1 4
      components/u8g2/luat_lib_u8g2.c
  60. 1 0
      components/usbapp/luat_lib_usbapp.c
  61. 12 4
      luat/demo/airlink/uart_http/main.lua
  62. 151 29
      luat/demo/airtalk/airtalk_net_ctrl.lua
  63. 18 1
      luat/demo/airtalk/demo_define.lua
  64. 46 3
      luat/demo/airtalk/main.lua
  65. 2 2
      luat/demo/spi/air8000/spi_tf_wan/main.lua
  66. 2 2
      luat/include/luat_gpio.h
  67. 1 1
      luat/modules/luat_main.c
  68. 2 0
      luat/vfs/luat_fs_mem.c
  69. BIN
      module/Air780EPM/demo/modbus/test_core/LuatOS-SoC_V2007_Air780EPM_TEMP_20250610_150400.soc
  70. 1 1
      module/Air8000/demo/ble/peripheral/ble_peripheral.lua
  71. 1 1
      module/Air8000/demo/ble/scan/ble_scan.lua
  72. 0 2
      module/Air8000/demo/lowpower/low_power.lua
  73. 2 2
      module/Air8000/demo/lowpower/main.lua
  74. 0 2
      module/Air8000/demo/lowpower/normal.lua
  75. 6 6
      module/Air8000/demo/lowpower/ultra_low_power.lua
  76. 7 1
      module/Air8000/project/整机开发板出厂工程/user/aircamera.lua
  77. 5 1
      module/Air8000/project/整机开发板出厂工程/user/airgps.lua
  78. 50 0
      module/Air8000/project/整机开发板出厂工程/user/airrecord.lua
  79. 37 36
      module/Air8000/project/整机开发板出厂工程/user/airtf.lua
  80. 62 9
      module/Air8000/project/整机开发板出厂工程/user/main.lua
  81. 65 9
      script/libs/libnetif.lua
  82. 0 0
      script/libs/netLed.lua

+ 9 - 0
components/airlink/binding/luat_lib_airlink.c

@@ -380,6 +380,13 @@ static int l_airlink_config(lua_State *L) {
         }
         g_airlink_spi_conf.speed = value;
         break;
+    case LUAT_AIRLINK_CONF_UART_ID:
+        if (value < 0 || value > 3) {
+            LLOGE("无效的UART %d, 只能是0~3", value);
+            return 0;
+        }
+        g_airlink_spi_conf.uart_id = value;
+        break;
     default:
         return 0;
     }
@@ -600,6 +607,8 @@ static const rotable_Reg_t reg_airlink[] =
     { "CONF_SPI_SPEED",    ROREG_INT(LUAT_AIRLINK_CONF_SPI_SPEED)},
     //@const CONF_IRQ_TIMEOUT number SPIUART配置参数, 设置IRQ模式的等待超时时间
     { "CONF_IRQ_TIMEOUT",  ROREG_INT(LUAT_AIRLINK_CONF_IRQ_TIMEOUT)},
+    //@const CONF_UART_ID number UART配置参数, 设置UART的ID
+    { "CONF_UART_ID",      ROREG_INT(LUAT_AIRLINK_CONF_UART_ID)},
 
 	{ NULL,                ROREG_INT(0) }
 };

+ 1 - 1
components/airlink/src/driver/luat_airlink_drv_wlan.c

@@ -207,7 +207,7 @@ int luat_airlink_drv_wlan_scan_result_cb(void) {
     }
     luat_wlan_scan_result_t *scan_result = ptr + sizeof(luat_airlink_cmd_t) + 1;
 
-    uint64_t luat_airlink_next_cmd_id = luat_airlink_get_next_cmd_id();
+    luat_airlink_get_next_cmd_id();
     airlink_queue_item_t item = {
         .len = fulllen,
         .cmd = ptr

+ 3 - 3
components/airlink/src/exec/luat_airlink_cmd_exec_gpio.c

@@ -46,7 +46,7 @@ int luat_airlink_cmd_exec_gpio_setup(luat_airlink_cmd_t* cmd, void* userdata) {
     }
     int ret = luat_gpio_setup(&conf);
     LLOGD("收到GPIO配置指令!!! pin %d ret %d", conf.pin, ret);
-    return 0;
+    return ret;
 }
 
 int luat_airlink_cmd_exec_gpio_set(luat_airlink_cmd_t* cmd, void* userdata) {
@@ -58,7 +58,7 @@ int luat_airlink_cmd_exec_gpio_set(luat_airlink_cmd_t* cmd, void* userdata) {
     }
     int ret = luat_gpio_set(params[0], params[1]);
     LLOGD("收到GPIO设置指令!!! pin %d level %d ret %d", params[0], params[1], ret);
-    return 0;
+    return ret;
 }
 
 
@@ -144,7 +144,7 @@ int luat_airlink_cmd_exec_gpio_driver_yhm27xx(luat_airlink_cmd_t* cmd, void* use
     }
     int ret = luat_gpio_driver_yhm27xx(params[0], params[1],params[2], params[3], &(params[4]));
     
-    return 0;
+    return ret;
 }
 
 int luat_airlink_cmd_exec_gpio_driver_yhm27xx_reqinfo(luat_airlink_cmd_t* cmd, void* userdata) {

+ 29 - 0
components/airlink/src/exec/luat_airlink_cmd_exec_info.c

@@ -39,6 +39,7 @@ __USER_FUNC_IN_RAM__ int luat_airlink_cmd_exec_dev_info(luat_airlink_cmd_t* cmd,
         // wifi固件比4G固件更新的, 那就抛弃掉后面的数据
     }
     memcpy(&g_airlink_ext_dev_info, dev, len);
+    #ifdef LUAT_USE_DRV_WLAN
     if (dev->tp == 1) {
         // WIFI设备
         // 首先, 把MAC地址打印出来
@@ -113,5 +114,33 @@ __USER_FUNC_IN_RAM__ int luat_airlink_cmd_exec_dev_info(luat_airlink_cmd_t* cmd,
             }
         }
     }
+    #endif
+    #ifdef LUAT_USE_DRV_MOBILE
+    if (dev->tp == 2) { // 4G设备
+        // 根据网络状态, 发出IP_READY/IP_LOSE事件
+        drv = luat_netdrv_get(NW_ADAPTER_INDEX_LWIP_GP_GW);
+        if (drv == NULL || drv->netif == NULL) {
+            // GP代理网卡没有找到, 可能是没有初始化
+            return 0;
+        }
+        // 1是已注册, 5是漫游且已注册
+        if (dev->cat1.cat_state != 1 && dev->cat1.cat_state != 5) {
+            // 掉线了
+            if (netif_is_up(drv->netif)) {
+                // 网卡掉线了哦
+                LLOGD("4G网卡掉线了");
+                luat_netdrv_whale_ipevent(drv, 0);
+            }
+        }
+        else {
+            // 上线了
+            if (netif_is_up(drv->netif) == 0) {
+                // 网卡上线了哦
+                LLOGD("4G网卡上线了");
+                luat_netdrv_whale_ipevent(drv, 1);
+            }
+        }
+    }
+    #endif
     return 0;
 }

+ 3 - 3
components/airlink/src/luat_airlink.c

@@ -87,7 +87,7 @@ int luat_airlink_stop(int id)
 
 void luat_airlink_print_buff(const char *tag, uint8_t *buff, size_t len)
 {
-    static char tmpbuff[1024] = {0};
+    // static char tmpbuff[1024] = {0};
     for (size_t i = 0; i < len; i += 8)
     {
         // sprintf(tmpbuff + i * 2, "%02X", buff[i]);
@@ -291,8 +291,8 @@ void luat_airlink_print_mac_pkg(uint8_t* buff, uint16_t len) {
     LLOGD("pkg len %d 前24个字节 " MACFMT MACFMT MACFMT MACFMT, len, MAC_ARG(buff), MAC_ARG(buff + 6), MAC_ARG(buff+12), MAC_ARG(buff + 18));
     
     struct eth_hdr* eth = (struct eth_hdr*)buff;
-    struct ip_hdr* iphdr = (struct ip_hdr*)(buff + SIZEOF_ETH_HDR);
-    struct etharp_hdr* arp = (struct etharp_hdr*)(buff + SIZEOF_ETH_HDR);
+    // struct ip_hdr* iphdr = (struct ip_hdr*)(buff + SIZEOF_ETH_HDR);
+    // struct etharp_hdr* arp = (struct etharp_hdr*)(buff + SIZEOF_ETH_HDR);
     // LLOGD("eth " MACFMT " -> " MACFMT " tp %02X", MAC_ARG(eth->src.addr), MAC_ARG(eth->dest.addr), (u16_t)lwip_htons(eth->type));
     switch (eth->type) {
         case PP_HTONS(ETHTYPE_IP):

+ 13 - 0
components/airlink/src/luat_airlink_cmds.c

@@ -85,6 +85,12 @@ CMD_DEFINE(pm_wakeup_pin);
 CMD_DEFINE(pwm_setup);
 CMD_DEFINE(pwm_close);
 
+// MOBILE指令, 0x800开始
+CMD_DEFINE(mobile_imei);
+CMD_DEFINE(mobile_imsi);
+CMD_DEFINE(mobile_iccid);
+CMD_DEFINE(mobile_muid);
+
 __USER_FUNC_IN_RAM__ const luat_airlink_cmd_reg_t airlink_cmds[] = {
     // 最常用的放前面
     CMD_REG(0x10,  dev_info),
@@ -162,6 +168,13 @@ __USER_FUNC_IN_RAM__ const luat_airlink_cmd_reg_t airlink_cmds[] = {
     CMD_REG(0x701, pwm_close),
 #endif
 
+#ifdef LUAT_USE_AIRLINK_EXEC_MOBILE
+    CMD_REG(0x800, mobile_imei),
+    CMD_REG(0x801, mobile_imsi),
+    CMD_REG(0x802, mobile_iccid),
+    CMD_REG(0x803, mobile_muid),
+#endif
+
     CMD_REG(0x21, nop),
     {0, NULL}
 };

+ 4 - 4
components/airlink/src/task/luat_airlink_spi_master_task.c

@@ -42,7 +42,7 @@ static luat_rtos_task_handle spi_task_handle;
 
 static uint8_t basic_info[256];
 
-static uint32_t is_waiting_queue = 0;
+// static uint32_t is_waiting_queue = 0;
 
 static luat_rtos_queue_t evt_queue;
 
@@ -242,7 +242,7 @@ __USER_FUNC_IN_RAM__ void airlink_wait_and_prepare_data(uint8_t *txbuff)
     int ret = 0;
     if (g_airlink_pause) {
         while (g_airlink_pause) {
-            LLOGD("airlink spi 交互暂停中,允许主控休眠, 监测周期1000ms");
+            //LLOGD("airlink spi 交互暂停中,允许主控休眠, 监测周期1000ms");
             luat_rtos_task_sleep(1000);
         }
     }
@@ -333,8 +333,8 @@ __USER_FUNC_IN_RAM__ static void on_link_data_notify(airlink_link_data_t* link)
 
 __USER_FUNC_IN_RAM__ static void spi_master_task(void *param)
 {
-    int i;
-    luat_event_t event = {0};
+    // int i;
+    // luat_event_t event = {0};
     luat_rtos_task_sleep(5); // 等5ms
     spi_gpio_setup();
     thread_rdy = 1;

+ 4 - 4
components/airlink/src/task/luat_airlink_spi_slave_task.c

@@ -26,7 +26,7 @@
 #include "platform_def.h"
 #endif
 
-static uint8_t thread_rdy;
+// static uint8_t thread_rdy;
 static luat_rtos_task_handle spi_task_handle;
 extern airlink_statistic_t g_airlink_statistic;
 extern uint32_t g_airlink_pause;
@@ -35,7 +35,7 @@ static uint8_t *s_txbuff;
 static uint8_t *s_rxbuff;
 static int self_ready;
 static int pin_rdy_state;
-static uint8_t g_sys_need_reboot;
+// static uint8_t g_sys_need_reboot;
 static int is_irq_mode;
 static uint32_t irq_counter; // 中断计数
 
@@ -245,8 +245,8 @@ __USER_FUNC_IN_RAM__ static void spi_slave_task(void *param)
 {
     LLOGE("spi_slave_task!!!");
     int ret = 0;
-    int i;
-    airlink_link_data_t* link = NULL;
+    // int i;
+    // airlink_link_data_t* link = NULL;
     luat_event_t event = {0};
 
     luat_rtos_task_sleep(5); // 等5ms

+ 1 - 1
components/airlink/src/task/luat_airlink_task.c

@@ -45,8 +45,8 @@ __USER_FUNC_IN_RAM__ static void exec_cmd(luat_airlink_cmd_t* ptr) {
 }
 
 __USER_FUNC_IN_RAM__ void luat_airlink_on_data_recv(uint8_t *data, size_t len) {
-    luat_airlink_cmd_t* cmd = (luat_airlink_cmd_t*)data;
     #ifdef __BK72XX__
+    luat_airlink_cmd_t* cmd = (luat_airlink_cmd_t*)data;
     if (cmd->cmd == 0x100) {
         // IP数据直接处理,不走线程
         luat_airlink_cmd_exec_ip_pkg(cmd, NULL);

+ 14 - 9
components/airlink/src/task/luat_airlink_uart_task.c

@@ -30,14 +30,16 @@
 extern airlink_statistic_t g_airlink_statistic;
 extern uint32_t g_airlink_pause;
 
-static luat_rtos_task_handle g_uart_task;
+// static luat_rtos_task_handle g_uart_task;
 static luat_rtos_task_handle g_uart_transfer_task;
 static luat_rtos_task_handle g_uart_receive_task;
-static luat_rtos_queue_t evt_queue;
+// static luat_rtos_queue_t evt_queue;
 static luat_rtos_queue_t tx_evt_queue;// 
 static luat_rtos_queue_t rx_evt_queue;
 extern luat_airlink_irq_ctx_t g_airlink_irq_ctx;
 
+static void luat_airlink_uart_transfer_task(void);
+static void luat_airlink_uart_receive_task(void);
 
 __USER_FUNC_IN_RAM__ static void on_newdata_notify(void)
 {
@@ -82,7 +84,7 @@ __USER_FUNC_IN_RAM__ static void record_statistic(luat_event_t event)
 
 static uint8_t *s_txbuff;
 static uint8_t *s_rxbuff;
-static airlink_link_data_t s_link;
+// static airlink_link_data_t s_link;
 
 __USER_FUNC_IN_RAM__ static void on_link_data_notify(airlink_link_data_t* link) {
     memset(&link->flags, 0, sizeof(uint32_t));
@@ -94,7 +96,7 @@ __USER_FUNC_IN_RAM__ static void on_link_data_notify(airlink_link_data_t* link)
 
 static void parse_data(uint8_t* buff, size_t len)
 {
-    luat_airlink_print_buff("反转义前的数据", buff,  len);
+    // luat_airlink_print_buff("反转义前的数据", buff,  len);
     // 收到数据后去除帧头帧尾和魔数,遇到0x7E/0x7D 要转义
     uint8_t* parse_buff = buff;
     size_t parse_len = len - 2;
@@ -165,7 +167,7 @@ static uint8_t* rxbuf;
 static uint32_t rxoffset = 0;
 void on_airlink_uart_data_in(uint8_t* buff, size_t len)
 {
-    int ret = 0;
+    // int ret = 0;
     size_t offset = 0;
     size_t end_offset = 0;
     // 首先, 输入的数据是否为0, 也可能是太长的数据
@@ -261,12 +263,14 @@ __USER_FUNC_IN_RAM__ static void uart_transfer_task(void *param)
     while(1)
     {
         ret = luat_rtos_queue_recv(tx_evt_queue, &event, sizeof(luat_event_t), 15*1000);//在evt_queue队列中复制数据到指定缓冲区event,阻塞等待60s
+        (void)ret;
         //LLOGD("收到airlink数据事件 ret:%d, id:%d", ret, event.id);
         record_statistic(event);
         while (1) {
             uart_id = g_airlink_spi_conf.uart_id;
             // 有数据, 要处理了
             item.len = 0;
+            item.cmd = NULL;
             luat_airlink_cmd_recv_simple(&item);//从(发送)队列里取出数据存在item中
             // LLOGD("队列数据长度:%d, cmd:%p", item.len, item.cmd);
             if (item.len > 0 && item.cmd != NULL)
@@ -295,6 +299,7 @@ __USER_FUNC_IN_RAM__ static void uart_transfer_task(void *param)
                 s_txbuff[offset++] = 0x7E;
                 luat_uart_write(uart_id, (const char *)s_txbuff, offset);
                 // LLOGD ("发送数据长度:%d", offset);
+                luat_airlink_cmd_free(item.cmd);
             }
             else {
                 break; // 没有数据了, 退出循环
@@ -334,11 +339,11 @@ void luat_airlink_start_uart(void)
 {
     int ret = 0;
     
-    ret = luat_rtos_queue_create(&tx_evt_queue, 4 * 1024, sizeof(luat_event_t));
+    ret = luat_rtos_queue_create(&tx_evt_queue, 128, sizeof(luat_event_t));
     if (ret) {
         LLOGW("创建tx_evt_queue ret:%d", ret);
     }
-    ret = luat_rtos_queue_create(&rx_evt_queue, 4 * 1024, sizeof(luat_event_t));
+    ret = luat_rtos_queue_create(&rx_evt_queue, 128, sizeof(luat_event_t));
     if (ret) {
         LLOGW("创建rx_evt_queue ret:%d", ret);
     }
@@ -351,7 +356,7 @@ void luat_airlink_start_uart(void)
     luat_airlink_uart_receive_task();
 }
 
-void luat_airlink_uart_transfer_task(void)
+static void luat_airlink_uart_transfer_task(void)
 {
     int ret = 0;
     if (g_uart_transfer_task != NULL)
@@ -366,7 +371,7 @@ void luat_airlink_uart_transfer_task(void)
     }
 }
 
-void luat_airlink_uart_receive_task(void)
+static void luat_airlink_uart_receive_task(void)
 {
     int ret = 0;
     if (g_uart_receive_task != NULL)

+ 56 - 16
components/airtalk/binding/luat_lib_airtalk.c

@@ -139,6 +139,30 @@ static int l_airtalk_start(lua_State *L)
     luat_airtalk_net_init();
     return 0;
 }
+/*
+配置airtalk RTP协议中的SSRC
+@api airtalk.set_ssrc(ssrc)
+@int/string ssrc,可以是int也是可以8字节string
+@return nil
+@usage
+
+*/
+static int l_airtalk_set_ssrc(lua_State *L)
+{
+	if (lua_isstring(L, 1))
+	{
+		size_t len;
+	    const char *id = lua_tolstring(L, 1, &len);//取出字符串数据;
+	    uint32_t ssrc = strtol(id, NULL, 16);
+	    luat_airtalk_net_set_ssrc(ssrc);
+	}
+	else
+	{
+		luat_airtalk_net_set_ssrc(lua_tointeger(L, 1));
+	}
+
+    return 0;
+}
 
 /*
 配置airtalk mqtt类型语音数据的专用topic
@@ -157,29 +181,44 @@ static int l_airtalk_set_mqtt_topic(lua_State *L)
 }
 
 /*
-airtalk工作启动/停止
-@api airtalk.speech(mode, on_off)
-@int  工作模式,见airtalk.MODE_XXX
-@boolean  启停控制,true开始,false停止
+airtalk对讲工作启动/停止
+@api airtalk.speech(on_off, mode, sample)
+@boolean 启停控制,true开始,false停止
+@int 工作模式,见airtalk.MODE_XXX
+@int 音频采样率,目前只有8000和16000,默认16000
 @return nil
 @usage
 --1对1对讲开始
-airtalk.speech(airtalk.MODE_PERSON,true)
+airtalk.speech(true,airtalk.MODE_PERSON,16000)
 --1对多对讲开始
-airtalk.speech(airtalk.MODE_GROUP,true)
+airtalk.speech(true,airtalk.MODE_GROUP,16000)
+--对讲停止
+airtalk.speech(false)
 */
 static int l_airtalk_speech(lua_State *L)
 {
-	int mode = luaL_optinteger(L, 1, LUAT_AIRTALK_SPEECH_MODE_PERSON);
-	int on_off = lua_toboolean(L, 2);
-	switch(mode)
+	int mode = luaL_optinteger(L, 2, LUAT_AIRTALK_SPEECH_MODE_PERSON);
+	int sample = luaL_optinteger(L, 3, 16000);
+	int on_off = lua_toboolean(L, 1);
+	if (on_off)
 	{
-	case LUAT_AIRTALK_SPEECH_MODE_PERSON:
-
-		luat_airtalk_speech_record_switch(lua_toboolean(L, 1));
-		break;
-	case LUAT_AIRTALK_SPEECH_MODE_GROUP:
-		break;
+		switch(mode)
+		{
+		case LUAT_AIRTALK_SPEECH_MODE_PERSON:
+			luat_airtalk_use_16k(sample == 16000);
+			luat_airtalk_net_transfer_start(mode);
+			luat_airtalk_speech_record_switch(1);
+			break;
+		case LUAT_AIRTALK_SPEECH_MODE_GROUP:
+			luat_airtalk_use_16k(sample == 16000);
+			luat_airtalk_net_transfer_start(mode);
+			break;
+		}
+	}
+	else
+	{
+		luat_airtalk_net_transfer_stop();
+		luat_airtalk_speech_record_switch(0);
 	}
 
     return 0;
@@ -220,11 +259,12 @@ static int l_airtalk_debug(lua_State *L)
 #include "rotable2.h"
 static const rotable_Reg_t reg_airtalk[] =
 {
+	{ "speech",      ROREG_FUNC(l_airtalk_speech)},
     { "config",      ROREG_FUNC(l_airtalk_config)},
     { "on",         ROREG_FUNC(l_airtalk_on)},
     { "start",      ROREG_FUNC(l_airtalk_start)},
+	{ "set_ssrc",      ROREG_FUNC(l_airtalk_set_ssrc)},
 	{ "set_topic",      ROREG_FUNC(l_airtalk_set_mqtt_topic)},
-	{ "speech",      ROREG_FUNC(l_airtalk_speech)},
     { "uplink",      ROREG_FUNC(l_airtalk_uplink)},
 	{ "debug",      ROREG_FUNC(l_airtalk_debug)},
 	//@const PROTOCOL_MQTT number 语音数据用MQTT传输

+ 14 - 5
components/airtalk/core/airtalk_network.c

@@ -33,7 +33,7 @@ typedef struct
 static airtalk_network_ctrl_t prv_network;
 
 //播放完成
-static void end_broadcast_play(void)
+static void airtalk_full_stop(void)
 {
 	net_data_struct *net_cache;
 	luat_airtalk_speech_stop_play();
@@ -296,9 +296,12 @@ TX_DATA_DONE:
 			sync_lost = 1;
 			break;
 		case AIRTALK_EVENT_NETWORK_FORCE_STOP:
-			sync_lost = 1;
-			prv_network.is_ready = 0;
-			end_broadcast_play();
+			if (prv_network.is_ready)
+			{
+				sync_lost = 1;
+				prv_network.is_ready = 0;
+				airtalk_full_stop();
+			}
 			break;
 		case AIRTALK_EVENT_NETWORK_MSG:
 			break;
@@ -320,8 +323,14 @@ void luat_airtalk_net_param_config(uint8_t audio_data_protocl, uint32_t download
 	prv_network.download_cache_time = download_cache_time;
 }
 
-void luat_airtalk_net_transfer_start(void)
+void luat_airtalk_net_set_ssrc(uint32_t ssrc)
+{
+	prv_network.local_ssrc = ssrc;
+}
+
+void luat_airtalk_net_transfer_start(uint8_t work_mode)
 {
+	prv_network.work_mode = work_mode;
 	luat_rtos_event_send(prv_network.task_handle, AIRTALK_EVENT_NETWORK_READY_START, 0, 0, 0, 0);
 }
 

+ 2 - 1
components/airtalk/include/airtalk_api.h

@@ -14,7 +14,8 @@ void luat_airtalk_net_init(void);
 void *luat_airtalk_net_common_init(CBDataFun_t send_function, CBDataFun_t recv_function);
 void luat_airtalk_net_param_config(uint8_t audio_data_protocl, uint32_t download_cache_time);
 void luat_airtalk_net_debug_switch(uint8_t on_off);
-void luat_airtalk_net_transfer_start(void);
+void luat_airtalk_net_set_ssrc(uint32_t ssrc);
+void luat_airtalk_net_transfer_start(uint8_t work_mode);
 void luat_airtalk_net_transfer_stop(void);
 void luat_airtalk_net_save_uplink_head(uint64_t record_time);
 void luat_airtalk_net_save_uplink_data(uint8_t *data, uint32_t len);

+ 1 - 0
components/airtalk/include/airtalk_def.h

@@ -52,6 +52,7 @@ typedef struct
 	uint8_t is_ready;
 	uint8_t audio_data_protocl;
 	uint8_t is_16k;
+	uint8_t work_mode;
 	uint8_t debug_on_off;
 }airtalk_network_ctrl_t;
 #endif

+ 0 - 1
components/bluetooth/src/luat_bluetooth.c

@@ -6,7 +6,6 @@
 #define LUAT_LOG_TAG "bluetooth"
 
 void luat_bluetooth_mac_swap(uint8_t* mac){
-    uint8_t len = 0;
     uint8_t tmp_mac[LUAT_BLUETOOTH_MAC_LEN] = {0};
     memcpy(tmp_mac, mac, LUAT_BLUETOOTH_MAC_LEN);
     for(int i=0;i<LUAT_BLUETOOTH_MAC_LEN;i++){

+ 1 - 1
components/cmux/luat_cmux.c

@@ -172,7 +172,7 @@ static void uih_dbg_manage(unsigned char*buff,size_t len){
 }
 #ifdef LUAT_USE_YMODEM
 #include "luat_ymodem.h"
-static int ymodem_state = 0;
+// static int ymodem_state = 0;
 static void* ymodem_handler = NULL;
 #endif
 static void uih_download_manage(unsigned char*buff,size_t len){

+ 34 - 0
components/drv/src/luat_drv_pm.c

@@ -3,9 +3,15 @@
 #include "luat_mem.h"
 #include "luat_airlink.h"
 #include "luat_pm.h"
+#include "luat_rtos.h"
 #include "luat/drv_pm.h"
 #include "luat_airlink_drv_pm.h"
 
+
+#ifdef LUAT_USE_AIRLINK
+#include "luat_airlink.h"
+#endif
+
 #define LUAT_LOG_TAG "drv.pm"
 #include "luat_log.h"
 
@@ -21,8 +27,36 @@ int luat_drv_pm_request(int chip, int mode) {
     }
 }
 
+#ifdef LUAT_USE_AIRLINK
+static uint8_t s_wifi_sleep = 0;
+extern uint32_t g_airlink_pause;
+#endif
+
 int luat_drv_pm_power_ctrl(int chip, int id, uint8_t val) {
     if (chip == 0) {
+        #ifdef LUAT_USE_AIRLINK
+        if (id == LUAT_PM_POWER_WORK_MODE && luat_airlink_has_wifi()) {
+            // 首先, 如果是退出
+            if (LUAT_PM_POWER_MODE_NORMAL == val) {
+                if (s_wifi_sleep) {
+                    // 现阶段, 只能重启wifi
+                    luat_gpio_set(23, 0); // 关闭wifi
+                    luat_rtos_task_sleep(10);
+                    luat_gpio_set(23, 1); // 打开wifi
+                    s_wifi_sleep = 0;
+                }
+                g_airlink_pause = 0;
+            }
+            // 然后, 如果是进入
+            else {
+                s_wifi_sleep = 1;
+                luat_airlink_drv_pm_power_ctrl(id, val);
+                luat_rtos_task_sleep(10);
+                // 如果是进入休眠模式, 恢复airlink工作
+                g_airlink_pause = 1;
+            }
+        }
+        #endif
         return luat_pm_power_ctrl(id, val);
     }
     else {

+ 2 - 8
components/eink/luat_lib_eink.c

@@ -1098,15 +1098,12 @@ static int l_eink_draw_gtfont_gb2312_gray(lua_State* L) {
 static int l_eink_draw_gtfont_utf8(lua_State *L) {
     unsigned char buf[128];
     size_t len;
-    int i = 0;
-    uint8_t strhigh,strlow ;
-    uint16_t e,str;
     const char *fontCode = luaL_checklstring(L, 1,&len);
     unsigned char size = luaL_checkinteger(L, 2);
     int x = luaL_checkinteger(L, 3);
     int y = luaL_checkinteger(L, 4);
     for(;;){
-      e = utf8_next((uint8_t)*fontCode);
+      uint16_t e = utf8_next((uint8_t)*fontCode);
       if ( e == 0x0ffff )
       break;
       fontCode++;
@@ -1127,16 +1124,13 @@ static int l_eink_draw_gtfont_utf8(lua_State *L) {
 static int l_eink_draw_gtfont_utf8_gray(lua_State* L) {
 	unsigned char buf[2048];
 	size_t len;
-	int i = 0;
-	uint8_t strhigh,strlow ;
-	uint16_t e,str;
   const char *fontCode = luaL_checklstring(L, 1,&len);
   unsigned char size = luaL_checkinteger(L, 2);
 	unsigned char font_g = luaL_checkinteger(L, 3);
 	int x = luaL_checkinteger(L, 4);
 	int y = luaL_checkinteger(L, 5);
 	for(;;){
-        e = utf8_next((uint8_t)*fontCode);
+        uint16_t e = utf8_next((uint8_t)*fontCode);
         if ( e == 0x0ffff )
         break;
         fontCode++;

+ 10 - 10
components/ethernet/w5500/w5500.c

@@ -440,9 +440,9 @@ W5500_SOCKET_CONFIG_START:
 
 static int w5500_socket_connect(w5500_ctrl_t *w5500, uint8_t socket_id, uint8_t is_listen, uint32_t remote_ip, uint16_t remote_port)
 {
-	uint32_t ip;
-	uint16_t port;
-	uint8_t delay_cnt;
+	// uint32_t ip;
+	// uint16_t port;
+	// uint8_t delay_cnt;
 	uint8_t temp;
 	uint8_t cmd[16];
 	temp = w5500_socket_state(w5500, socket_id);
@@ -487,7 +487,7 @@ static int w5500_socket_auto_heart(w5500_ctrl_t *w5500, uint8_t socket_id, uint8
 
 static int w5500_socket_tx(w5500_ctrl_t *w5500, uint8_t socket_id, uint8_t *data, uint32_t len)
 {
-	uint8_t delay_cnt;
+	// uint8_t delay_cnt;
 	uint8_t temp;
 	uint8_t point[6];
 	uint16_t tx_free, tx_point;
@@ -530,7 +530,7 @@ static int w5500_socket_tx(w5500_ctrl_t *w5500, uint8_t socket_id, uint8_t *data
 
 static int w5500_socket_rx(w5500_ctrl_t *w5500, uint8_t socket_id, uint8_t *data, uint16_t len)
 {
-	uint8_t delay_cnt;
+	// uint8_t delay_cnt;
 	uint8_t temp;
 	uint8_t point[4];
 	uint16_t rx_size, rx_point;
@@ -689,7 +689,7 @@ static void w5500_link_state(w5500_ctrl_t *w5500, uint8_t check_state)
 {
 	Buffer_Struct tx_msg_buf = {0,0,0};
 	uint32_t remote_ip;
-	int result;
+	// int result;
 	if (w5500->link_ready != check_state)
 	{
 		LLOGD("link %d -> %d", w5500->link_ready, check_state);
@@ -704,7 +704,7 @@ static void w5500_link_state(w5500_ctrl_t *w5500, uint8_t check_state)
 				uint8_t temp[1];
 				temp[0] = MR_UDP_FARP;
 				w5500_xfer(w5500, W5500_COMMON_MR, is_write, temp, 1);
-				result = ip4_dhcp_run(&w5500->dhcp_client, NULL, &tx_msg_buf, &remote_ip);
+				ip4_dhcp_run(&w5500->dhcp_client, NULL, &tx_msg_buf, &remote_ip);
 				w5500_check_dhcp(w5500);
 				if (tx_msg_buf.Pos)
 				{
@@ -1182,7 +1182,7 @@ static void w5500_sys_socket_callback(w5500_ctrl_t *w5500, uint8_t socket_id, ui
 
 static void w5500_read_irq(w5500_ctrl_t *w5500)
 {
-	OS_EVENT socket_event;
+	// OS_EVENT socket_event;
 	uint8_t temp[64];
 	uint8_t socket_irqs[MAX_SOCK_NUM];
 	uint8_t socket_irq, common_irq;
@@ -1503,8 +1503,8 @@ int w5500_reset(void)
 
 void w5500_init(luat_spi_t* spi, uint8_t irq_pin, uint8_t rst_pin, uint8_t link_pin)
 {
-	uint8_t *uid;
-	size_t t, i;
+	// uint8_t *uid;
+	size_t i;
 	if (!prv_w5500_ctrl)
 	{
 		w5500_ctrl_t *w5500 = malloc(sizeof(w5500_ctrl_t));

+ 1 - 2
components/gmssl/bind/luat_lib_gmssl.c

@@ -20,6 +20,7 @@
 #include "gmssl/sm2.h"
 #include "gmssl/sm3.h"
 #include "gmssl/sm4.h"
+#include "luat_str.h"
 // #include "mbedtls/hmac_drbg.h"
 
 #define LUAT_LOG_TAG "sm"
@@ -29,8 +30,6 @@
 #define SM2_STR_LEN 300
 #define HEX_CODE 16
 
-extern void luat_str_fromhex(const char* str, size_t len, char* buff);
-
 static void DeletePaddingBuf(luaL_Buffer *B, const char *pPadding, size_t nBufLen, uint8_t *pBuf, uint8_t pPaddLen)
 {
     uint8_t nPadLen;

+ 2 - 2
components/gtfont/luat_gtfont.c

@@ -126,8 +126,8 @@ unsigned int gtfont_draw_gray_hz (unsigned char *data,unsigned short x,unsigned
                 int(*point)(void*,uint16_t, uint16_t, uint32_t),void* userdata,int mode){
 	unsigned int temp=0,gray,x_temp=x,dw=0;
 	unsigned int i=0,j=0,t;
-	unsigned char c,c2,*p;
-	unsigned long color4bit,color3bit[8],color2bit,color;
+	unsigned char c,*p;
+	unsigned long color4bit,color2bit,color;
 	t=(w+7)/8*grade;//
 	p=data;
 	if(grade==2){

+ 7 - 11
components/lcd/luat_lib_lcd.c

@@ -563,6 +563,8 @@ static int l_lcd_write_cmd(lua_State* L) {
         luat_zbuff_t* buff = ((luat_zbuff_t *)luaL_checkudata(L, 2, LUAT_ZBUFF_TYPE));
         data = (const uint8_t*)buff->addr;
         param_len = luaL_optinteger(L, 3, buff->used);
+    }else if(lua_isstring(L, 2)){
+        data = (const uint8_t*)luaL_checklstring(L, 2, &param_len);
     }
     int ret = lcd_write_cmd_data(lcd_dft_conf,(uint8_t)luaL_checkinteger(L, 1), data, param_len);
     lua_pushboolean(L, ret == 0 ? 1 : 0);
@@ -1253,7 +1255,7 @@ static int l_lcd_draw_gtfont_gbk_gray(lua_State* L) {
 	uint16_t str;
     const char *fontCode = luaL_checklstring(L, 1,&len);
     unsigned char size = luaL_checkinteger(L, 2);
-	unsigned char font_g = luaL_optinteger(L, 3, 4);
+	// unsigned char font_g = luaL_optinteger(L, 3, 4);
 	int x = luaL_checkinteger(L, 4);
 	int y = luaL_checkinteger(L, 5);
     FORE_COLOR = (luat_color_t)luaL_optinteger(L, 6,FORE_COLOR);
@@ -1297,9 +1299,6 @@ lcd.drawGtfontUtf8("啊啊啊",32,0,0)
 */
 static int l_lcd_draw_gtfont_utf8(lua_State *L) {
     size_t len;
-    int i = 0;
-    uint8_t strhigh,strlow ;
-    uint16_t e,str;
     const char *fontCode = luaL_checklstring(L, 1,&len);
     unsigned char size = luaL_checkinteger(L, 2);
     int x = luaL_checkinteger(L, 3);
@@ -1314,7 +1313,7 @@ static int l_lcd_draw_gtfont_utf8(lua_State *L) {
     }
     for(;;){
         memset(buf,0,buff_size);
-        e = utf8_next((uint8_t)*fontCode);
+        uint16_t e = utf8_next((uint8_t)*fontCode);
         if ( e == 0x0ffff )
         break;
         fontCode++;
@@ -1329,7 +1328,7 @@ static int l_lcd_draw_gtfont_utf8(lua_State *L) {
             if (str==0x20){
                 x+=size/2;
             }else{
-               x+=(str<0x80)?dw:size; 
+                x+=(str<0x80)?dw:size; 
             }
         }
     }
@@ -1351,12 +1350,9 @@ lcd.drawGtfontUtf8Gray("啊啊啊",32,4,0,40)
 */
 static int l_lcd_draw_gtfont_utf8_gray(lua_State* L) {
 	size_t len;
-	int i = 0;
-	uint8_t strhigh,strlow;
-	uint16_t e,str;
     const char *fontCode = luaL_checklstring(L, 1,&len);
     unsigned char size = luaL_checkinteger(L, 2);
-	unsigned char font_g = luaL_optinteger(L, 3, 4);
+	// unsigned char font_g = luaL_optinteger(L, 3, 4);
 	int x = luaL_checkinteger(L, 4);
 	int y = luaL_checkinteger(L, 5);
     FORE_COLOR = (luat_color_t)luaL_optinteger(L, 6,FORE_COLOR);
@@ -1370,7 +1366,7 @@ static int l_lcd_draw_gtfont_utf8_gray(lua_State* L) {
     }
 	for(;;){
         memset(buf,0x00,buff_size);
-        e = utf8_next((uint8_t)*fontCode);
+        uint16_t e = utf8_next((uint8_t)*fontCode);
         if ( e == 0x0ffff )
         break;
         fontCode++;

+ 6 - 6
components/little_flash/luat_little_flash_lfs2.c

@@ -17,23 +17,23 @@ static size_t lf_offset = 0;
 // Read a block
 static int lf_block_device_read(const struct lfs_config *cfg, lfs_block_t block, lfs_off_t off, void *buffer, lfs_size_t size) {
     little_flash_t* flash = (little_flash_t*)cfg->context;
-    int ret = little_flash_read(flash, lf_offset + block * flash->chip_info.erase_size + off, buffer, size);
+    return little_flash_read(flash, lf_offset + block * flash->chip_info.erase_size + off, buffer, size);
     // LLOGD("lf_block_device_read ret %d", ret);
-    return LFS_ERR_OK;
+    // return LFS_ERR_OK;
 }
 
 static int lf_block_device_prog(const struct lfs_config *cfg, lfs_block_t block, lfs_off_t off, const void *buffer, lfs_size_t size) {
     little_flash_t* flash = (little_flash_t*)cfg->context;
-    int ret = little_flash_write(flash, lf_offset + block * flash->chip_info.erase_size + off, buffer, size);
+    return little_flash_write(flash, lf_offset + block * flash->chip_info.erase_size + off, buffer, size);
     // LLOGD("lf_block_device_prog ret %d", ret);
-    return LFS_ERR_OK;
+    // return LFS_ERR_OK;
 }
 
 static int lf_block_device_erase(const struct lfs_config *cfg, lfs_block_t block) {
     little_flash_t* flash = (little_flash_t*)cfg->context;
-    int ret = little_flash_erase(flash, lf_offset + block * flash->chip_info.erase_size, flash->chip_info.erase_size);
+    return little_flash_erase(flash, lf_offset + block * flash->chip_info.erase_size, flash->chip_info.erase_size);
     // LLOGD("lf_block_device_erase ret %d", ret);
-    return LFS_ERR_OK;
+    // return LFS_ERR_OK;
 }
 
 static int lf_block_device_sync(const struct lfs_config *cfg) {

+ 0 - 2
components/little_flash/src/little_flash.c

@@ -419,7 +419,6 @@ error:
 }
 
 lf_err_t little_flash_erase(const little_flash_t *lf, uint32_t addr, uint32_t len){
-    lf_err_t result = LF_ERR_OK;
     uint8_t cmd_data[4]={0};
     if (addr + len > lf->chip_info.capacity) {
         LF_ERROR("Error: Flash address is out of bound.");
@@ -472,7 +471,6 @@ error:
 
 
 lf_err_t little_flash_write(const little_flash_t *lf, uint32_t addr, const uint8_t *data, uint32_t len){
-    lf_err_t result = LF_ERR_OK;
 #ifdef LF_USE_HEAP
     uint8_t* cmd_data = (uint8_t*)lf->malloc(4+lf->chip_info.prog_size);
     if (!cmd_data){

+ 1 - 1
components/lora/luat_lib_lora.c

@@ -439,7 +439,7 @@ static int luat_lora_set_rxconfig(lua_State *L){
     const char* lora_ic = luaL_checklstring(L, 1, &len);
     if(strcmp("llcc68",lora_ic)== 0||strcmp("LLCC68",lora_ic)== 0||strcmp("sx1268",lora_ic)== 0||strcmp("SX1268",lora_ic)== 0){
         uint8_t mode = 1,bandwidth = 0,datarate = 9,coderate = 4,bandwidthAfc = 0,preambleLen = 8,symbTimeout = 0,payloadLen = 0,freqHopOn = 0,hopPeriod = 0;
-        uint32_t frequency = 433000000,timeout = 0;
+        // uint32_t frequency = 433000000,timeout = 0;
         bool fixLen = false,crcOn = true,iqInverted = false,rxContinuous = false,rateOptimize = false;
 
         if (lua_istable(L, 2)) {

+ 1 - 1
components/lora2/luat_lib_lora.c

@@ -386,7 +386,7 @@ lora_device:set_rxconfig(
 */
 static int luat_lora_set_rxconfig(lua_State *L){
     uint8_t mode = 1,bandwidth = 0,datarate = 9,coderate = 4,bandwidthAfc = 0,preambleLen = 8,symbTimeout = 0,payloadLen = 0,freqHopOn = 0,hopPeriod = 0;
-    uint32_t frequency = 433000000,timeout = 0;
+    // uint32_t frequency = 433000000,timeout = 0;
     bool fixLen = false,crcOn = true,iqInverted = false,rxContinuous = false,rateOptimize = false;
     lora_device_t  * lora_device = get_lora_device(L);
     if (lua_istable(L, 2)) {

+ 0 - 6
components/lora2/sx126x/sx126x-board.c

@@ -68,7 +68,6 @@ void SX126xWakeup2( lora_device_t* lora_device){
 }
 
 void SX126xWriteCommand2( lora_device_t* lora_device,RadioCommands_t command, uint8_t *buffer, uint16_t size ){
-    uint16_t i = 0;
     SX126xCheckDeviceReady2( lora_device );
     uint8_t cmd[1+size];
     cmd[0] = (uint8_t)command;
@@ -80,7 +79,6 @@ void SX126xWriteCommand2( lora_device_t* lora_device,RadioCommands_t command, ui
 }
 
 void SX126xReadCommand2( lora_device_t* lora_device,RadioCommands_t command, uint8_t *buffer, uint16_t size ){
-    uint16_t i = 0;
     SX126xCheckDeviceReady2( lora_device);
     uint8_t cmd[2] = {(uint8_t)command,0x00};
     lora_spi_transfer(lora_device, cmd, 2,buffer,size);
@@ -88,7 +86,6 @@ void SX126xReadCommand2( lora_device_t* lora_device,RadioCommands_t command, uin
 }
 
 void SX126xWriteRegister2s2(lora_device_t* lora_device, uint16_t address, uint8_t *buffer, uint16_t size ){
-    uint16_t i = 0;
     SX126xCheckDeviceReady2( lora_device );
     uint8_t cmd[3+size];
     cmd[0] = RADIO_WRITE_REGISTER;
@@ -104,7 +101,6 @@ void SX126xWriteRegister2( lora_device_t* lora_device,uint16_t address, uint8_t
 }
 
 void SX126xReadRegister2s2( lora_device_t* lora_device,uint16_t address, uint8_t *buffer, uint16_t size ){
-    uint16_t i = 0;
     SX126xCheckDeviceReady2(lora_device );
     uint8_t cmd[4] = {RADIO_READ_REGISTER,( address & 0xFF00 ) >> 8,address & 0x00FF,0x00};
     lora_spi_transfer(lora_device, cmd, 4,buffer,size);
@@ -118,7 +114,6 @@ uint8_t SX126xReadRegister2( lora_device_t* lora_device,uint16_t address ){
 }
 
 void SX126xWriteBuffer2( lora_device_t* lora_device,uint8_t offset, uint8_t *buffer, uint8_t size ){
-    uint16_t i = 0;
     SX126xCheckDeviceReady2( lora_device);
     uint8_t cmd[2+size];
     cmd[0] = RADIO_WRITE_BUFFER;
@@ -130,7 +125,6 @@ void SX126xWriteBuffer2( lora_device_t* lora_device,uint8_t offset, uint8_t *buf
 }
 
 void SX126xReadBuffer2(lora_device_t* lora_device, uint8_t offset, uint8_t *buffer, uint8_t size ){
-    uint16_t i = 0;
     SX126xCheckDeviceReady2(lora_device);
     uint8_t cmd[3] = {RADIO_READ_BUFFER,offset,0x00};
     lora_spi_transfer(lora_device, cmd, 3,buffer,size);

+ 1 - 1
components/lvgl/binding/luat_lib_lvgl_font.c

@@ -107,7 +107,7 @@ int luat_lv_font_load(lua_State *L) {
     lv_font_t *font = NULL;
     if (lua_isuserdata(L, 1)) {
         #ifdef LUAT_USE_GTFONT
-            luat_spi_device_t *spi = lua_touserdata(L, 1);
+            // luat_spi_device_t *spi = lua_touserdata(L, 1);
             uint8_t size = luaL_optinteger(L, 2, 16);
             if (size&1){
                 LLOGE("size not support odd");

+ 2 - 3
components/lvgl/exts/lv_gif/gifdec.c

@@ -64,7 +64,6 @@ gd_open_gif_data(const void *data)
 
 static gd_GIF * gif_open(gd_GIF * gif_base)
 {
-    int fd;
     uint8_t sigver[3];
     uint16_t width, height, depth;
     uint8_t fdsz, bgidx, aspect;
@@ -569,8 +568,8 @@ gd_get_frame(gd_GIF *gif)
 void
 gd_render_frame(gd_GIF *gif, uint8_t *buffer)
 {
-    uint32_t i;
-    uint32_t j;
+//    uint32_t i;
+//    uint32_t j;
 //    for(i = 0, j = 0; i < gif->width * gif->height * 3; i+= 3, j+=4) {
 //        buffer[j + 0] = gif->canvas[i + 2];
 //        buffer[j + 1] = gif->canvas[i + 1];

+ 9 - 5
components/mobile/luat_lib_mobile.c

@@ -333,7 +333,7 @@ static int l_mobile_set_auto_work(lua_State* L) {
 
 /**
 获取或设置APN,设置APN必须在入网前就设置好,比如在SIM卡识别完成前就设置好
-@api mobile.apn(index, cid, new_apn_name, user_name, password, ip_type, protocol)
+@api mobile.apn(index, cid, new_apn_name, user_name, password, ip_type, protocol, is_del)
 @int 编号,默认0. 在支持双卡的模块上才会出现0或1的情况
 @int cid, 默认0,如果要用非默认APN来激活,必须>0
 @string 新的APN,不填就是获取APN, 填了就是设置APN, 是否支持设置取决于底层实现
@@ -344,12 +344,16 @@ static int l_mobile_set_auto_work(lua_State* L) {
 @boolean 是否删除APN,true是,其他都否,只有参数3新的APN不是string的时候才有效果
 @return string 如果网络注册成功,返回注册用的APN值,反之是nil。设置好不会立刻有返回值,需要等网络注册成功
 @usage
-mobile.apn(0,1,"cmiot","","",nil,0) -- 移动公网卡设置APN为cmiot,一般不用设置
-mobile.apn(0,1,"name","user","password",nil,3) -- 专网卡设置的demo,name,user,password联系卡商获取
+-- 注意, 在国内, 公网卡基本上都不需要设置APN, 专网卡才需要设置
+mobile.apn(0,1,"cmiot","","",nil,0)
+
+-- 专网卡设置的demo,name,user,password联系卡商获取
+-- 设置后, 再次立即获取, 并不会返回设置的值, 要等联网成功 - 设置好不会立刻有返回值,需要等网络注册成功
+mobile.apn(0,1,"name","user","password",nil,3)
  */
 static int l_mobile_apn(lua_State* L) {
     char buff[64] = {0};
-    size_t len = 0;
+    // size_t len = 0;
     size_t wlen = 0;
     int ret = 0;
     int index = luaL_optinteger(L, 1, 0);
@@ -1246,7 +1250,7 @@ static int l_mobile_event_handle(lua_State* L, void* ptr) {
     LUAT_MOBILE_EVENT_E event;
     uint8_t index;
     uint8_t status;
-    int ret;
+    // int ret;
 
 
     rtos_msg_t* msg = (rtos_msg_t*)lua_topointer(L, -1);

+ 2 - 0
components/network/adapter/luat_lib_socket.c

@@ -1365,6 +1365,8 @@ static const rotable_Reg_t reg_socket_adapter[] =
 	//@const LWIP_USER7 number 使用LWIP协议栈的自定义网卡7, 2025.1.12新增
 	{ "LWIP_USER7",          	ROREG_INT(NW_ADAPTER_INDEX_LWIP_USER7)},
 	
+	//@const LWIP_GP_GW number 4G代理网关
+	{ "LWIP_GP_GW",          	ROREG_INT(NW_ADAPTER_INDEX_LWIP_GP_GW)},
 
 	{ NULL,            		ROREG_INT(0)}
 };

+ 1 - 0
components/network/adapter/luat_network_adapter.h

@@ -104,6 +104,7 @@ enum
 	NW_ADAPTER_INDEX_LWIP_USER5,
 	NW_ADAPTER_INDEX_LWIP_USER6,
 	NW_ADAPTER_INDEX_LWIP_USER7,
+	NW_ADAPTER_INDEX_LWIP_GP_GW,
 	NW_ADAPTER_INDEX_LWIP_NETIF_QTY,
 	NW_ADAPTER_INDEX_HW_PS_DEVICE = NW_ADAPTER_INDEX_LWIP_NETIF_QTY,
 	NW_ADAPTER_INDEX_ETH0 = NW_ADAPTER_INDEX_HW_PS_DEVICE,	//外挂以太网+硬件协议栈

+ 5 - 5
components/network/adapter_lwip2/net_lwip2.c

@@ -964,10 +964,10 @@ static void platform_send_event(void *p, uint32_t id, uint32_t param1, uint32_t
 
 static void net_lwip2_check_network_ready(uint8_t adapter_index)
 {
-	luat_ip_addr_t addr = {0};
+	// luat_ip_addr_t addr = {0};
 	dns_client_t *dns_client = prvlwip.dns_client[adapter_index];
 	dhcp_client_info_t* dhcpc = prvlwip.dhcpc[adapter_index];
-	char ip_string[64] = {0};
+	// char ip_string[64] = {0};
 	if (prvlwip.lwip_netif[adapter_index] == NULL)
 		return;
 	uint8_t active_flag = !ip_addr_isany(&prvlwip.lwip_netif[adapter_index]->ip_addr)
@@ -986,8 +986,8 @@ static void net_lwip2_check_network_ready(uint8_t adapter_index)
 	else
 	{
 		NET_DBG("network ready %d", adapter_index);
-		uint32_t tmp = adapter_index;
-		luat_ip_addr_t addr = {0};
+		// uint32_t tmp = adapter_index;
+		// luat_ip_addr_t addr = {0};
 		uint8_t dns0_set = 0;
 		uint8_t dns1_set = 0;
 		// LLOGD("开始设置DNS服务器 %d static? %d %d %d %d", adapter_index, dns_client->is_static_dns[0], dns_client->is_static_dns[1], prvlwip.dhcpc[adapter_index] ? prvlwip.dhcpc[adapter_index]->dns_server[0] : 0, prvlwip.dhcpc[adapter_index] ? prvlwip.dhcpc[adapter_index]->dns_server[1] : 0);
@@ -1150,7 +1150,7 @@ static void net_lwip2_create_socket_now(uint8_t adapter_index, uint8_t socket_id
 
 static int net_lwip2_create_socket(uint8_t is_tcp, uint64_t *tag, void *param, uint8_t is_ipv6, void *user_data)
 {
-	uint8_t index = (uint32_t)user_data;
+	// uint8_t index = (uint32_t)user_data;
 	uint8_t adapter_index = (uint32_t)user_data;
 	if ((uint32_t)adapter_index >= NW_ADAPTER_INDEX_LWIP_NETIF_QTY) return 0;
 	int i, socket_id;

+ 1 - 1
components/network/httpsrv/src/luat_lib_httpsrv.c

@@ -63,7 +63,7 @@ end)
 -- 当前默认查找 /luadb/xxx 下的文件,暂不可配置
 */
 static int l_httpsrv_start(lua_State *L) {
-    luat_ip_addr_t local_ip, net_mask, gate_way, ipv6;
+    // luat_ip_addr_t local_ip, net_mask, gate_way, ipv6;
     char buff[64] = {0};
     int port = luaL_checkinteger(L, 1);
     if (!lua_isfunction(L, 2)) {

+ 78 - 45
components/network/libemqtt/luat_lib_mqtt.c

@@ -46,6 +46,14 @@
 
 #define LUAT_MQTT_CTRL_TYPE "MQTTCTRL*"
 
+static const char *error_string[MQTT_MSG_NET_ERROR - MQTT_MSG_CON_ERROR + 1] =
+{
+		"connect",
+		"tx",
+		"conack",
+		"other"
+};
+
 static luat_mqtt_ctrl_t * get_mqtt_ctrl(lua_State *L){
 	if (luaL_testudata(L, 1, LUAT_MQTT_CTRL_TYPE)){
 		return ((luat_mqtt_ctrl_t *)luaL_checkudata(L, 1, LUAT_MQTT_CTRL_TYPE));
@@ -67,12 +75,6 @@ int32_t luatos_mqtt_callback(lua_State *L, void* ptr){
 //					lua_pushstring(L, "tcp_ack");
 //					lua_call(L, 2, 0);
 //				}
-//				lua_getglobal(L, "sys_pub");
-//				if (lua_isfunction(L, -1)) {
-//					lua_pushstring(L, "MQTT_TCPACK");
-//					lua_geti(L, LUA_REGISTRYINDEX, mqtt_ctrl->mqtt_ref);
-//					lua_call(L, 2, 0);
-//				}
 //            }
 //			break;
 		case MQTT_MSG_TIMER_PING : {
@@ -110,30 +112,34 @@ int32_t luatos_mqtt_callback(lua_State *L, void* ptr){
 					lua_pushstring(L, "recv");
 					lua_pushlstring(L, (const char*)(mqtt_msg->data),mqtt_msg->topic_len);
 					lua_pushlstring(L, (const char*)(mqtt_msg->data+mqtt_msg->topic_len),mqtt_msg->payload_len);
-					
-					// 增加一个返回值meta,类型为table,包含qos、retain和dup
-					// 	mqttc:on(function(mqtt_client, event, data, payload, meta)
-            		// 		if event == "recv" then
-            		//     	log.info("mqtt recv", "topic", data)
-            		//     	log.info("mqtt recv", 'payload', payload)
-            		//     	log.info("mqtt recv", 'meta.qos', meta.qos)
-            		//     	log.info("mqtt recv", 'meta.retain', meta.retain)
-            		//     	log.info("mqtt recv", 'meta.dup', meta.dup)
-					lua_createtable(L, 0, 3);
-
-					lua_pushliteral(L, "qos"); 
-					lua_pushinteger(L, MQTTParseMessageQos(mqtt_ctrl->mqtt_packet_buffer));
+//					 增加一个返回值meta,类型为table,包含qos、retain和dup
+//					 	mqttc:on(function(mqtt_client, event, data, payload, meta)
+//            		 		if event == "recv" then
+//            		     	log.info("mqtt recv", "topic", data)
+//            		     	log.info("mqtt recv", 'payload', payload)
+//            		     	log.info("mqtt recv", 'meta.message_id', meta.message_id)
+//            		     	log.info("mqtt recv", 'meta.qos', meta.qos)
+//            		     	log.info("mqtt recv", 'meta.retain', meta.retain)
+//            		     	log.info("mqtt recv", 'meta.dup', meta.dup)
+					lua_createtable(L, 0, 4);
+					lua_pushliteral(L, "message_id");
+					lua_pushinteger(L, mqtt_msg->message_id);
 					lua_settable(L, -3);
 
-					lua_pushliteral(L, "retain"); 
-					lua_pushinteger(L, MQTTParseMessageRetain(mqtt_ctrl->mqtt_packet_buffer));
+					lua_pushliteral(L, "qos");
+					lua_pushinteger(L, (mqtt_msg->flags & 0x06) >> 1);
+//					lua_pushinteger(L, MQTTParseMessageQos(mqtt_ctrl->mqtt_packet_buffer));
 					lua_settable(L, -3);
 
-					lua_pushliteral(L, "dup"); 
-					lua_pushinteger(L, MQTTParseMessageDuplicate(mqtt_ctrl->mqtt_packet_buffer));
+					lua_pushliteral(L, "retain");
+					lua_pushinteger(L, mqtt_msg->flags & 0x01);
+//					lua_pushinteger(L, MQTTParseMessageRetain(mqtt_ctrl->mqtt_packet_buffer));
 					lua_settable(L, -3);
 
-					// lua_call(L, 4, 0);
+					lua_pushliteral(L, "dup");
+					lua_pushinteger(L, (mqtt_msg->flags & 0x08)?1:0);
+//					lua_pushinteger(L, MQTTParseMessageDuplicate(mqtt_ctrl->mqtt_packet_buffer));
+					lua_settable(L, -3);
 					lua_call(L, 5, 0);
 				}
             }
@@ -148,12 +154,12 @@ int32_t luatos_mqtt_callback(lua_State *L, void* ptr){
 					lua_pushstring(L, "conack");
 					lua_call(L, 2, 0);
 				}
-				lua_getglobal(L, "sys_pub");
-				if (lua_isfunction(L, -1)) {
-					lua_pushstring(L, "MQTT_CONNACK");
-					lua_geti(L, LUA_REGISTRYINDEX, mqtt_ctrl->mqtt_ref);
-					lua_call(L, 2, 0);
-				}
+//				lua_getglobal(L, "sys_pub");
+//				if (lua_isfunction(L, -1)) {
+//					lua_pushstring(L, "MQTT_CONNACK");
+//					lua_geti(L, LUA_REGISTRYINDEX, mqtt_ctrl->mqtt_ref);
+//					lua_call(L, 2, 0);
+//				}
             }
             break;
         }
@@ -197,13 +203,13 @@ int32_t luatos_mqtt_callback(lua_State *L, void* ptr){
 					lua_pushinteger(L, mqtt_ctrl->error_state);
 					lua_call(L, 3, 0);
 				}
-				lua_getglobal(L, "sys_pub");
-				if (lua_isfunction(L, -1)) {
-					lua_pushstring(L, "MQTT_DISCONNECT");
-					lua_geti(L, LUA_REGISTRYINDEX, mqtt_ctrl->mqtt_ref);
-					lua_pushinteger(L, mqtt_ctrl->error_state);
-					lua_call(L, 3, 0);
-				}
+//				lua_getglobal(L, "sys_pub");
+//				if (lua_isfunction(L, -1)) {
+//					lua_pushstring(L, "MQTT_DISCONNECT");
+//					lua_geti(L, LUA_REGISTRYINDEX, mqtt_ctrl->mqtt_ref);
+//					lua_pushinteger(L, mqtt_ctrl->error_state);
+//					lua_call(L, 3, 0);
+//				}
             }
             break;
         }
@@ -213,17 +219,36 @@ int32_t luatos_mqtt_callback(lua_State *L, void* ptr){
 				if (lua_isfunction(L, -1)) {
 					lua_geti(L, LUA_REGISTRYINDEX, mqtt_ctrl->mqtt_ref);
 					lua_pushstring(L, "suback");
-					lua_call(L, 2, 0);
+					lua_pushboolean(L, (msg->arg2 <= 2));
+					lua_pushinteger(L, msg->arg2);
+					lua_call(L, 4, 0);
 				}
-				lua_getglobal(L, "sys_pub");
+            }
+			break;
+		case MQTT_MSG_UNSUBACK:
+			if (mqtt_ctrl->mqtt_cb) {
+				lua_geti(L, LUA_REGISTRYINDEX, mqtt_ctrl->mqtt_cb);
 				if (lua_isfunction(L, -1)) {
-					lua_pushstring(L, "MQTT_SUBACK");
 					lua_geti(L, LUA_REGISTRYINDEX, mqtt_ctrl->mqtt_ref);
+					lua_pushstring(L, "unsuback");
 					lua_call(L, 2, 0);
 				}
             }
 			break;
-		case MQTT_MSG_UNSUBACK:
+		case MQTT_MSG_CON_ERROR:
+		case MQTT_MSG_TX_ERROR:
+		case MQTT_MSG_CONACK_ERROR:
+		case MQTT_MSG_NET_ERROR:
+			if (mqtt_ctrl->mqtt_ref) {
+				lua_geti(L, LUA_REGISTRYINDEX, mqtt_ctrl->mqtt_cb);
+				if (lua_isfunction(L, -1)) {
+					lua_geti(L, LUA_REGISTRYINDEX, mqtt_ctrl->mqtt_ref);
+					lua_pushstring(L, "error");
+					lua_pushstring(L, error_string[msg->arg1 - MQTT_MSG_CON_ERROR]);
+					lua_pushinteger(L, msg->arg2);
+					lua_call(L, 4, 0);
+				}
+            }
 			break;
 		default : {
 			LLOGD("l_mqtt_callback error arg1:%d",msg->arg1);
@@ -532,15 +557,23 @@ mqttc:on(function(mqtt_client, event, data, payload, metas)
 end)
 --[[
 event可能出现的值有
-  conack -- 服务器鉴权完成,mqtt连接已经建立, 可以订阅和发布数据了,没有附加数据
-  recv   -- 接收到数据,由服务器下发, data为topic值(string), payload为业务数据(string).metas是元数据(table), 一般不处理. 
+  conack	-- 服务器鉴权完成, 表示mqtt连接已经建立, 可以订阅和发布数据了
+  suback 	-- 订阅完成,data为应答结果, true成功,payload为0~2数字表示qos,data为false则失败,payload为失败码,一般是0x80
+  unsuback	-- 取消订阅完成
+  recv   	-- 接收到数据,由服务器下发, data为topic值(string), payload为业务数据(string), metas是元数据(table), 一般不处理.
              -- metas包含以下内容
+             -- message_id
 			 -- qos 取值范围0,1,2
 			 -- retain 取值范围 0,1
 			 -- dup 取值范围 0,1
-  sent   -- 发送完成, qos0会马上通知, qos1/qos2会在服务器应答会回调, data为消息id
+  sent   	-- 发送完成, qos0会马上通知, qos1/qos2会在服务器应答会回调, data为消息id
   disconnect -- 服务器断开连接,网络问题或服务器踢了客户端,例如clientId重复,超时未上报业务数据
-  pong   -- 收到服务器心跳应答,没有附加数据
+  pong   	-- 收到服务器心跳应答,没有附加数据
+  error		-- 严重的异常,会导致断开连接, data(string)为具体异常,有以下几种
+  	  	  	  -- connect 服务器连接不上
+  	  	  	  -- tx 发送数据失败
+  	  	  	  -- conack 服务器鉴权失败,失败码在payload(int)
+  	  	  	  -- other 其他异常
 ]]
 */
 static int l_mqtt_on(lua_State *L) {

+ 6 - 1
components/network/libemqtt/luat_mqtt.h

@@ -10,6 +10,10 @@
 #define MQTT_MSG_TIMER_PING 	2	/**< mqtt ping前回调消息 */
 #define MQTT_MSG_RECONNECT  	3	/**< mqtt 重连前回调消息 */
 #define MQTT_MSG_CLOSE 			4	/**< mqtt 关闭回调消息(不会再重连) */
+#define MQTT_MSG_CON_ERROR 		5
+#define MQTT_MSG_TX_ERROR 		6
+#define MQTT_MSG_CONACK_ERROR 	7
+#define MQTT_MSG_NET_ERROR 		8
 
 #define MQTT_ERROR_STATE_SOCKET		-1
 #define MQTT_ERROR_STATE_DISCONNECT	-2
@@ -61,8 +65,9 @@ typedef struct{
 
 typedef struct{
 	uint16_t topic_len;
-	uint16_t dummy;
+	uint16_t message_id;
     uint32_t payload_len;
+    uint8_t flags;
 	uint8_t data[];
 }luat_mqtt_msg_t;
 

+ 18 - 2
components/network/libemqtt/luat_mqtt_client.c

@@ -319,6 +319,7 @@ static int luat_mqtt_msg_cb(luat_mqtt_ctrl_t *mqtt_ctrl) {
 				LLOGW("CONACK 0x%02x",mqtt_ctrl->mqtt_packet_buffer[3]);
 				mqtt_ctrl->error_state = mqtt_ctrl->mqtt_packet_buffer[3];
                 luat_mqtt_close_socket(mqtt_ctrl);
+                l_luat_mqtt_msg_cb(mqtt_ctrl, MQTT_MSG_CONACK_ERROR, mqtt_ctrl->mqtt_packet_buffer[3]);
                 return -1;
             }
 			mqtt_ctrl->mqtt_state = MQTT_STATE_READY;
@@ -343,7 +344,9 @@ static int luat_mqtt_msg_cb(luat_mqtt_ctrl_t *mqtt_ctrl) {
 			luat_mqtt_msg_t *mqtt_msg = (luat_mqtt_msg_t *)luat_heap_malloc(sizeof(luat_mqtt_msg_t)+topic_len+payload_len);
 			mqtt_msg->topic_len = mqtt_parse_pub_topic(mqtt_ctrl->mqtt_packet_buffer, mqtt_msg->data);
             mqtt_msg->payload_len = mqtt_parse_publish_msg(mqtt_ctrl->mqtt_packet_buffer, mqtt_msg->data+topic_len);
-			l_luat_mqtt_msg_cb(mqtt_ctrl, MQTT_MSG_PUBLISH, (int)mqtt_msg);
+            mqtt_msg->message_id = mqtt_parse_msg_id(mqtt_ctrl->mqtt_packet_buffer);
+            mqtt_msg->flags = mqtt_ctrl->mqtt_packet_buffer[0];
+            l_luat_mqtt_msg_cb(mqtt_ctrl, MQTT_MSG_PUBLISH, (int)mqtt_msg);
 #else
 			l_luat_mqtt_msg_cb(mqtt_ctrl, MQTT_MSG_PUBLISH, 0);
 #endif
@@ -364,7 +367,7 @@ MQTT_MSG_PUBLISH_DONE:
         case MQTT_MSG_PUBACK : {
 			msg_id = mqtt_parse_msg_id(mqtt_ctrl->mqtt_packet_buffer);
 			LLOGD("MQTT_MSG_PUBACK %d", msg_id);
-            l_luat_mqtt_msg_cb(mqtt_ctrl, MQTT_MSG_PUBACK, msg_id);
+            l_luat_mqtt_msg_cb(mqtt_ctrl, MQTT_MSG_PUBACK, mqtt_ctrl->mqtt_packet_buffer[4]);
 			break;
 		}
 		case MQTT_MSG_PUBREC : {
@@ -424,6 +427,19 @@ int32_t luat_mqtt_callback(void *data, void *param) {
 	LLOGD("network mqtt cb %8X %08X",event->ID & 0x0ffffffff, event->Param1);
 	if (event->Param1){
 		LLOGE("mqtt_callback param1 %d, event %d closing socket", event->Param1, event->ID - EV_NW_RESULT_BASE);
+
+		switch(event->ID)
+		{
+		case EV_NW_RESULT_CONNECT:
+			l_luat_mqtt_msg_cb(mqtt_ctrl, MQTT_MSG_CON_ERROR, 0);
+			break;
+		case EV_NW_RESULT_TX:
+			l_luat_mqtt_msg_cb(mqtt_ctrl, MQTT_MSG_TX_ERROR, 0);
+			break;
+		default:
+			l_luat_mqtt_msg_cb(mqtt_ctrl, MQTT_MSG_NET_ERROR, 0);
+			break;
+		}
 		luat_mqtt_close_socket(mqtt_ctrl);
 		return -1;
 	}

+ 5 - 1
components/network/netdrv/src/luat_netdrv.c

@@ -27,6 +27,7 @@ luat_netdrv_t* luat_netdrv_setup(luat_netdrv_conf_t *conf) {
     if (conf->id < 0 || conf->id >= NW_ADAPTER_QTY) {
         return NULL;
     }
+    int ret = 0;
     if (drvs[conf->id] == NULL) {
         // 注册新的设备?
         #ifdef __LUATOS__
@@ -47,7 +48,10 @@ luat_netdrv_t* luat_netdrv_setup(luat_netdrv_conf_t *conf) {
     else {
         if (drvs[conf->id]->boot) {
             //LLOGD("启动网络设备 %p", drvs[conf->id]);
-            drvs[conf->id]->boot(drvs[conf->id], NULL);
+            ret = drvs[conf->id]->boot(drvs[conf->id], NULL);
+            if (ret) {
+                return NULL;
+            }
         }
         return drvs[conf->id];
     }

+ 4 - 4
components/network/netdrv/src/luat_netdrv_napt.c

@@ -366,7 +366,7 @@ __USER_FUNC_IN_RAM__ static void update_tcp_stat_inet(struct tcp_hdr *tcphdr, lu
 __USER_FUNC_IN_RAM__ int luat_netdrv_napt_tcp_wan2lan(napt_ctx_t* ctx, luat_netdrv_napt_tcpudp_t* mapping, luat_netdrv_napt_ctx_t *napt_ctx) {
     int ret = -1;
     uint16_t iphdr_len = (ctx->iphdr->_v_hl & 0x0F) * 4;
-    struct ip_hdr* ip_hdr = ctx->iphdr;
+    // struct ip_hdr* ip_hdr = ctx->iphdr;
     uint64_t tnow = luat_mcu_tick64_ms();
     uint32_t tsec = (uint32_t)(tnow / 1000);
     luat_netdrv_napt_tcpudp_t tmp = {0};
@@ -392,7 +392,7 @@ __USER_FUNC_IN_RAM__ int luat_netdrv_napt_tcp_wan2lan(napt_ctx_t* ctx, luat_netd
         napt_ctx->clean_tm = tsec;
         // LLOGD("完成映射关系清理 %ld %ld", tsec, napt_ctx->clean_tm);
     }
-    size_t c_all = 0;
+    // size_t c_all = 0;
     for (size_t i = 0; i < napt_ctx->item_last; i++) {
         it = &napt_ctx->items[i];
         // 远程ip(4 byte), 远程端口(2 byte), 本地映射端口(2 byte)
@@ -415,11 +415,11 @@ __USER_FUNC_IN_RAM__ int luat_netdrv_napt_tcp_lan2wan(napt_ctx_t* ctx, luat_netd
     int ret = -1;
     luat_netdrv_napt_tcpudp_t* it = NULL;
     uint16_t iphdr_len = (ctx->iphdr->_v_hl & 0x0F) * 4;
-    struct ip_hdr* ip_hdr = ctx->iphdr;
+    // struct ip_hdr* ip_hdr = ctx->iphdr;
     uint64_t tnow = luat_mcu_tick64_ms();
     uint32_t tsec = (uint32_t)(tnow / 1000);
     luat_netdrv_napt_tcpudp_t tmp = {0};
-    size_t tmpaddr = 0;
+    // size_t tmpaddr = 0;
     struct tcp_hdr *tcp_hdr = (struct tcp_hdr*)(((uint8_t*)ctx->iphdr) + iphdr_len);
     struct udp_hdr *udp_hdr = (struct udp_hdr*)(((uint8_t*)ctx->iphdr) + iphdr_len);
     size_t c_all = 0;

+ 2 - 2
components/network/netdrv/src/luat_netdrv_napt_tcp.c

@@ -31,7 +31,7 @@ __USER_FUNC_IN_RAM__ int luat_napt_tcp_handle(napt_ctx_t* ctx) {
     struct ip_hdr* ip_hdr = ctx->iphdr;
     struct tcp_hdr *tcp_hdr = (struct tcp_hdr*)(((uint8_t*)ctx->iphdr) + iphdr_len);
     luat_netdrv_t* gw = ctx->drv_gw;
-    luat_netdrv_napt_tcpudp_t* it = NULL;
+    // luat_netdrv_napt_tcpudp_t* it = NULL;
     luat_netdrv_napt_tcpudp_t* it_map = NULL;
     int ret = 0;
     if (gw == NULL || gw->netif == NULL) {
@@ -40,7 +40,7 @@ __USER_FUNC_IN_RAM__ int luat_napt_tcp_handle(napt_ctx_t* ctx) {
     if (tcp_buff == NULL) {
         tcp_buff = luat_heap_opt_zalloc(LUAT_HEAP_AUTO, 1600);
     }
-    uint64_t tnow = luat_mcu_tick64_ms();
+    // uint64_t tnow = luat_mcu_tick64_ms();
     luat_netdrv_napt_tcpudp_t mapping = {0};
     if (ctx->is_wnet) {
         // 这是从外网到内网的TCP包

+ 1 - 1
components/network/netdrv/src/luat_netdrv_napt_udp.c

@@ -35,7 +35,7 @@ __USER_FUNC_IN_RAM__ int luat_napt_udp_handle(napt_ctx_t *ctx)
     {
         udp_buff = luat_heap_opt_zalloc(LUAT_HEAP_AUTO, 1600);
     }
-    uint64_t tnow = luat_mcu_tick64_ms();
+    // uint64_t tnow = luat_mcu_tick64_ms();
     luat_netdrv_napt_tcpudp_t mapping = {0};
     if (ctx->is_wnet)
     {

+ 1 - 1
components/network/ulwip/binding/luat_lib_ulwip.c

@@ -91,7 +91,7 @@ int ulwip_netif_ip_event(ulwip_ctx_t* ctx) {
     int ready_now = !ip_addr_isany(&netif->ip_addr);
     ready_now &= netif_is_link_up(netif);
     ready_now &= netif_is_up(netif);
-    luat_ip_addr_t ip = {0};
+    // luat_ip_addr_t ip = {0};
 
     if (ctx->dhcp_client) {
         net_lwip2_set_dhcp_client(ctx->adapter_index, ctx->dhcp_client);

+ 19 - 4
components/network/ulwip/src/ulwip_dhcp_client.c

@@ -100,6 +100,10 @@ on_check:
     // LLOGD("待发送DHCP包长度 %d 前4个字节分别是 %02X%02X%02X%02X", tx_msg_buf.Pos, 
     //     tx_msg_buf.Data[0], tx_msg_buf.Data[1], tx_msg_buf.Data[2], tx_msg_buf.Data[3]);
     p = pbuf_alloc(PBUF_TRANSPORT, tx_msg_buf.Pos, PBUF_RAM);
+    if (p == NULL) {
+        LLOGE("pbuf_alloc error");
+        return -1;
+    }
     char* data = (char*)tx_msg_buf.Data;
     for (q = p; q != NULL; q = q->next) {
         memcpy(q->payload, data, q->len);
@@ -215,13 +219,11 @@ void ulwip_dhcp_client_start(ulwip_ctx_t *ctx) {
         LLOGE("ctx->netif is NULL!!!!");
         return;
     }
+    // 注意, 这里只能建一个udp上下文, 要监听全部网卡
     if (s_ulwip_dhcp == NULL) {
         s_ulwip_dhcp = udp_new();
         ip_set_option(s_ulwip_dhcp, SOF_BROADCAST);
         udp_bind(s_ulwip_dhcp, IP4_ADDR_ANY, 68);
-        // #ifdef udp_bind_netif
-        // udp_bind_netif(ctx->dhcp_pcb, ctx->netif);
-        // #endif
         udp_connect(s_ulwip_dhcp, IP4_ADDR_ANY, 67);
         udp_recv(s_ulwip_dhcp, ulwip_dhcp_recv, ctx);
     }
@@ -232,6 +234,8 @@ void ulwip_dhcp_client_start(ulwip_ctx_t *ctx) {
         s_ctxs[ctx->adapter_index] = ctx; // 保存到全局数组中
     }
     ip_addr_set_any(0, &ctx->netif->ip_addr);
+    ip_addr_set_any(0, &ctx->netif->ip_addr);
+    ip_addr_set_any(0, &ctx->netif->netmask);
     ctx->dhcp_client->state = DHCP_STATE_DISCOVER;
     ctx->dhcp_client->discover_cnt = 0;
     if (!luat_rtos_timer_is_active(ctx->dhcp_timer))
@@ -245,6 +249,17 @@ void ulwip_dhcp_client_stop(ulwip_ctx_t *ctx) {
     // LLOGD("dhcp stop netif %p", ctx->netif);
     if (ctx->dhcp_timer != NULL && luat_rtos_timer_is_active(ctx->dhcp_timer)) {
         luat_rtos_timer_stop(ctx->dhcp_timer);
-        reset_dhcp_client(ctx);
+        
+    }
+    if (ctx->dhcp_enable) {
+        if (ctx->dhcp_client) {
+            // 重置dhcp客户端
+            reset_dhcp_client(ctx);
+        }
+        if (ctx->netif) {
+            ip_addr_set_any(0, &ctx->netif->ip_addr);
+            ip_addr_set_any(0, &ctx->netif->ip_addr);
+            ip_addr_set_any(0, &ctx->netif->netmask);
+        }
     }
 }

+ 1 - 1
components/onewire/binding/luat_lib_onewire.c

@@ -278,7 +278,7 @@ static int l_onewire_debug(lua_State *L)
 @int id, 硬件单总线编号,如果只有一条则随意填写
 @return nil
 @usage
-onewire.init(0) --初始化硬件单总线
+onewire.deinit(0) --初始化硬件单总线
 */
 static int l_onewire_deinit(lua_State *L)
 {

+ 6 - 6
components/sfud/luat_sfud_lfs2.c

@@ -21,23 +21,23 @@ static size_t sfud_offset = 0;
 // Read a block
 static int sfud_block_device_read(const struct lfs_config *cfg, lfs_block_t block, lfs_off_t off, void *buffer, lfs_size_t size) {
     sfud_flash* flash = (sfud_flash*)cfg->context;
-    int ret = sfud_read(flash, sfud_offset + block * flash->chip.erase_gran + off, size, buffer);
+    return sfud_read(flash, sfud_offset + block * flash->chip.erase_gran + off, size, buffer);
     //LLOGD("sfud_block_device_read ret %d", ret);
-    return LFS_ERR_OK;
+    // return LFS_ERR_OK;
 }
 
 static int sfud_block_device_prog(const struct lfs_config *cfg, lfs_block_t block, lfs_off_t off, const void *buffer, lfs_size_t size) {
     sfud_flash* flash = (sfud_flash*)cfg->context;
-    int ret = sfud_write(flash, sfud_offset + block * flash->chip.erase_gran + off, size, buffer);
+    return sfud_write(flash, sfud_offset + block * flash->chip.erase_gran + off, size, buffer);
     //LLOGD("sfud_block_device_prog ret %d", ret);
-    return LFS_ERR_OK;
+    // return LFS_ERR_OK;
 }
 
 static int sfud_block_device_erase(const struct lfs_config *cfg, lfs_block_t block) {
     sfud_flash* flash = (sfud_flash*)cfg->context;
-    int ret = sfud_erase(flash, sfud_offset + block * flash->chip.erase_gran, flash->chip.erase_gran);
+    return sfud_erase(flash, sfud_offset + block * flash->chip.erase_gran, flash->chip.erase_gran);
     //LLOGD("sfud_block_device_erase ret %d", ret);
-    return LFS_ERR_OK;
+    // return LFS_ERR_OK;
 }
 
 static int sfud_block_device_sync(const struct lfs_config *cfg) {

+ 1 - 2
components/sfud/sfud.c

@@ -406,7 +406,6 @@ sfud_err sfud_read(const sfud_flash *flash, uint32_t addr, size_t size, uint8_t
     const sfud_spi *spi = &flash->spi;
     uint8_t cmd_data[5 + SFUD_READ_DUMMY_BYTE_CNT];
     uint8_t cmd_size;
-    uint8_t i;
 
     SFUD_ASSERT(flash);
     SFUD_ASSERT(data);
@@ -439,7 +438,7 @@ sfud_err sfud_read(const sfud_flash *flash, uint32_t addr, size_t size, uint8_t
             make_address_byte_array(flash, addr, &cmd_data[1]);
             cmd_size = flash->addr_in_4_byte ? 5 : 4;
             #if SFUD_READ_DUMMY_BYTE_CNT > 0
-            for (i = 0; i < SFUD_READ_DUMMY_BYTE_CNT; i++) {
+            for (uint8_t i = 0; i < SFUD_READ_DUMMY_BYTE_CNT; i++) {
                 cmd_data[cmd_size] = SFUD_DUMMY_DATA;
                 cmd_size++;
             }

+ 9 - 6
components/sms/binding/luat_lib_sms.c

@@ -17,9 +17,7 @@
 #include "luat_mobile.h"
 #include "luat_timer.h"
 #include "luat_rtos.h"
-
-void luat_str_fromhex(char* str, size_t len, char* buff) ;
-
+#include "luat_str.h"
 #include "luat_sms.h"
 
 #ifndef bool
@@ -307,11 +305,12 @@ void luat_sms_send_cb(int ret)
 
     // 长短信继续发送
     g_s_sms_pdu_packet.seqNum++;
-
+    // 最后一包
     if (g_s_sms_send.payload_len - (g_s_sms_pdu_packet.seqNum - 1) * LUAT_SMS_LONG_MSG_PDU_SIZE <= LUAT_SMS_LONG_MSG_PDU_SIZE) {
         memcpy(g_s_sms_pdu_packet.payload_buf, g_s_sms_send.payload + (g_s_sms_pdu_packet.seqNum - 1) * LUAT_SMS_LONG_MSG_PDU_SIZE, g_s_sms_send.payload_len - (g_s_sms_pdu_packet.seqNum - 1) * LUAT_SMS_LONG_MSG_PDU_SIZE);
         g_s_sms_pdu_packet.payload_len = g_s_sms_send.payload_len - (g_s_sms_pdu_packet.seqNum - 1) * LUAT_SMS_LONG_MSG_PDU_SIZE ;
     } else {
+        // 继续发送
         memcpy(g_s_sms_pdu_packet.payload_buf, g_s_sms_send.payload + (g_s_sms_pdu_packet.seqNum - 1) * LUAT_SMS_LONG_MSG_PDU_SIZE, LUAT_SMS_LONG_MSG_PDU_SIZE);
         g_s_sms_pdu_packet.payload_len = LUAT_SMS_LONG_MSG_PDU_SIZE;
     }
@@ -327,6 +326,10 @@ void luat_sms_send_cb(int ret)
         } else {
             g_s_sms_pdu_packet.maxNum = 0;
         }
+        if (g_s_sms_send.payload != NULL) {
+            luat_heap_free(g_s_sms_send.payload);
+            g_s_sms_send.payload = NULL;
+        }
     }
     return;
 }
@@ -366,7 +369,7 @@ static int l_sms_send(lua_State *L) {
     }
 
     if (payload_len == 0) {
-        LLOGE("sms is emtry");
+        LLOGE("sms is empty");
         return 0;
     }
     
@@ -475,7 +478,7 @@ static int l_long_sms_send(lua_State *L) {
     }
 
     if (payload_len == 0) {
-        LLOGE("sms is emtry");
+        LLOGE("sms is empty");
         goto SMS_FAIL;
     }
 

+ 5 - 0
components/sms/include/luat_sms.h

@@ -174,5 +174,10 @@ void luat_sms_send_msg_register_handler(LUAT_SMS_HANDLE_SEND_CB callback_fun);
  * @param packet    
  */
 int luat_sms_pdu_packet(luat_sms_pdu_packet_t *packet);
+
+void ucs2char(char* source, size_t size, char* dst2, size_t* outlen);
+int utf82ucs2(char* source, size_t source_len, char* dst, size_t dstlen, size_t* outlen);
+
+
 /**@}*/
 #endif

+ 1 - 1
components/sms/src/luat_sms.c

@@ -1,5 +1,5 @@
 #include "luat_sms.h"
-
+#include "luat_str.h"
 
 static int hex2int(char c)
 {

+ 2 - 1
components/soft_keyboard/luat_lib_softkeyboard.c

@@ -10,6 +10,7 @@
 #include "luat_base.h"
 #include "luat_softkeyboard.h"
 #include "luat_msgbus.h"
+#include "luat_mem.h"
 
 #define MAX_DEVICE_COUNT 2
 static luat_softkeyboard_conf_t softkb_conf[MAX_DEVICE_COUNT];
@@ -92,7 +93,7 @@ int l_softkb_init(lua_State* L) {
     softkb.deinit(0)
  */
 int l_softkb_deinit(lua_State* L) {
-    luat_softkeyboard_conf_t conf = {0};
+    // luat_softkeyboard_conf_t conf = {0};
     uint8_t softkb_port = luaL_checkinteger(L,1);
     int ret = luat_softkeyboard_deinit(&softkb_conf[softkb_port]);
     luat_heap_free(softkb_conf[softkb_port].inio);

+ 2051 - 0
components/tp/cst92xx_fw.h

@@ -0,0 +1,2051 @@
+#ifndef HYNITRON_FIRMWARE_H
+#define HYNITRON_FIRMWARE_H
+
+#define CST92XX_BIN_SIZE    (0x7F80)
+
+static const unsigned char  fw_bin[CST92XX_BIN_SIZE] = {
+    0xFC,0x0F,0x00,0x20,0x01,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0xB9,0x33,0x00,0x00,
+    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF9,0x33,0x00,0x00,
+    0x49,0x24,0x00,0x00,0x75,0x6D,0x00,0x00,0x95,0x33,0x00,0x00,0x00,0x00,0x00,0x00,
+    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+    0x70,0xB5,0x05,0x46,0x0C,0x46,0x16,0x46,0x02,0xE0,0x0F,0xCC,0x0F,0xC5,0x10,0x3E,
+    0x10,0x2E,0xFA,0xD2,0x08,0x2E,0x02,0xD3,0x03,0xCC,0x03,0xC5,0x08,0x3E,0x04,0x2E,
+    0x07,0xD3,0x01,0xCC,0x01,0xC5,0x36,0x1F,0x03,0xE0,0x21,0x78,0x29,0x70,0x64,0x1C,
+    0x6D,0x1C,0x76,0x1E,0xF9,0xD2,0x70,0xBD,0xF8,0xB5,0x04,0x2A,0x2C,0xD3,0x83,0x07,
+    0x12,0xD0,0x0B,0x78,0x49,0x1C,0x03,0x70,0x40,0x1C,0x52,0x1E,0x83,0x07,0x0B,0xD0,
+    0x0B,0x78,0x49,0x1C,0x03,0x70,0x40,0x1C,0x52,0x1E,0x83,0x07,0x04,0xD0,0x0B,0x78,
+    0x49,0x1C,0x03,0x70,0x40,0x1C,0x52,0x1E,0x8B,0x07,0x9B,0x0F,0x05,0xD0,0xC9,0x1A,
+    0xDF,0x00,0x20,0x23,0xDE,0x1B,0x08,0xC9,0x0A,0xE0,0xFF,0xF7,0xC1,0xFF,0xF8,0xBD,
+    0x1D,0x46,0x08,0xC9,0xFD,0x40,0x1C,0x46,0xB4,0x40,0x2C,0x43,0x10,0xC0,0x12,0x1F,
+    0x04,0x2A,0xF5,0xD2,0xF3,0x08,0xC9,0x1A,0x52,0x1E,0xF0,0xD4,0x0B,0x78,0x49,0x1C,
+    0x03,0x70,0x40,0x1C,0x52,0x1E,0xEA,0xD4,0x0B,0x78,0x49,0x1C,0x03,0x70,0x40,0x1C,
+    0x52,0x1E,0xE4,0xD4,0x09,0x78,0x01,0x70,0xF8,0xBD,0xD2,0xB2,0x10,0xB5,0x13,0x02,
+    0x9A,0x18,0x13,0x04,0x9A,0x18,0x00,0xF0,0x0E,0xF8,0x10,0xBD,0x01,0xE0,0x04,0xC0,
+    0x09,0x1F,0x04,0x29,0xFB,0xD2,0x8B,0x07,0x01,0xD5,0x02,0x80,0x80,0x1C,0xC9,0x07,
+    0x00,0xD0,0x02,0x70,0x70,0x47,0x00,0x29,0x0B,0xD0,0xC3,0x07,0x02,0xD0,0x02,0x70,
+    0x40,0x1C,0x49,0x1E,0x02,0x29,0x04,0xD3,0x83,0x07,0x02,0xD5,0x02,0x80,0x80,0x1C,
+    0x89,0x1E,0xE3,0xE7,0x00,0x22,0xEE,0xE7,0x00,0x22,0xDF,0xE7,0x00,0x22,0x03,0x09,
+    0x8B,0x42,0x2C,0xD3,0x03,0x0A,0x8B,0x42,0x11,0xD3,0x00,0x23,0x9C,0x46,0x4E,0xE0,
+    0x03,0x46,0x0B,0x43,0x3C,0xD4,0x00,0x22,0x43,0x08,0x8B,0x42,0x31,0xD3,0x03,0x09,
+    0x8B,0x42,0x1C,0xD3,0x03,0x0A,0x8B,0x42,0x01,0xD3,0x94,0x46,0x3F,0xE0,0xC3,0x09,
+    0x8B,0x42,0x01,0xD3,0xCB,0x01,0xC0,0x1A,0x52,0x41,0x83,0x09,0x8B,0x42,0x01,0xD3,
+    0x8B,0x01,0xC0,0x1A,0x52,0x41,0x43,0x09,0x8B,0x42,0x01,0xD3,0x4B,0x01,0xC0,0x1A,
+    0x52,0x41,0x03,0x09,0x8B,0x42,0x01,0xD3,0x0B,0x01,0xC0,0x1A,0x52,0x41,0xC3,0x08,
+    0x8B,0x42,0x01,0xD3,0xCB,0x00,0xC0,0x1A,0x52,0x41,0x83,0x08,0x8B,0x42,0x01,0xD3,
+    0x8B,0x00,0xC0,0x1A,0x52,0x41,0x43,0x08,0x8B,0x42,0x01,0xD3,0x4B,0x00,0xC0,0x1A,
+    0x52,0x41,0x41,0x1A,0x00,0xD2,0x01,0x46,0x52,0x41,0x10,0x46,0x70,0x47,0x5D,0xE0,
+    0xCA,0x0F,0x00,0xD0,0x49,0x42,0x03,0x10,0x00,0xD3,0x40,0x42,0x53,0x40,0x00,0x22,
+    0x9C,0x46,0x03,0x09,0x8B,0x42,0x2D,0xD3,0x03,0x0A,0x8B,0x42,0x12,0xD3,0xFC,0x22,
+    0x89,0x01,0x12,0xBA,0x03,0x0A,0x8B,0x42,0x0C,0xD3,0x89,0x01,0x92,0x11,0x8B,0x42,
+    0x08,0xD3,0x89,0x01,0x92,0x11,0x8B,0x42,0x04,0xD3,0x89,0x01,0x3A,0xD0,0x92,0x11,
+    0x00,0xE0,0x89,0x09,0xC3,0x09,0x8B,0x42,0x01,0xD3,0xCB,0x01,0xC0,0x1A,0x52,0x41,
+    0x83,0x09,0x8B,0x42,0x01,0xD3,0x8B,0x01,0xC0,0x1A,0x52,0x41,0x43,0x09,0x8B,0x42,
+    0x01,0xD3,0x4B,0x01,0xC0,0x1A,0x52,0x41,0x03,0x09,0x8B,0x42,0x01,0xD3,0x0B,0x01,
+    0xC0,0x1A,0x52,0x41,0xC3,0x08,0x8B,0x42,0x01,0xD3,0xCB,0x00,0xC0,0x1A,0x52,0x41,
+    0x83,0x08,0x8B,0x42,0x01,0xD3,0x8B,0x00,0xC0,0x1A,0x52,0x41,0xD9,0xD2,0x43,0x08,
+    0x8B,0x42,0x01,0xD3,0x4B,0x00,0xC0,0x1A,0x52,0x41,0x41,0x1A,0x00,0xD2,0x01,0x46,
+    0x63,0x46,0x52,0x41,0x5B,0x10,0x10,0x46,0x01,0xD3,0x40,0x42,0x00,0x2B,0x00,0xD5,
+    0x49,0x42,0x70,0x47,0x63,0x46,0x5B,0x10,0x00,0xD3,0x40,0x42,0x01,0xB5,0x00,0x20,
+    0xC0,0x46,0xC0,0x46,0x02,0xBD,0x00,0x00,0xFF,0xB5,0x84,0xB0,0x0D,0x9E,0x0E,0x9C,
+    0x1D,0x46,0x17,0x46,0x00,0x20,0x2D,0x49,0x03,0x90,0x0A,0x78,0x90,0x42,0x52,0xDA,
+    0x00,0x20,0x03,0xE0,0x43,0x00,0x2A,0x4A,0xE2,0x52,0x40,0x1C,0x0A,0x78,0x90,0x42,
+    0xF8,0xDB,0x0A,0x22,0x00,0x21,0x05,0x98,0x03,0xF0,0x30,0xF9,0x0A,0x22,0x00,0x21,
+    0x38,0x46,0x03,0xF0,0x2B,0xF9,0x01,0x96,0x00,0x95,0x02,0x94,0x03,0xA8,0x07,0xC8,
+    0x3B,0x46,0x02,0xF0,0x15,0xFC,0x00,0x28,0x02,0xD0,0x03,0x98,0x40,0x1C,0xDA,0xE7,
+    0x1A,0x4A,0x1B,0x48,0x00,0x21,0x13,0x78,0x08,0xE0,0x7A,0x5C,0x00,0x2A,0x04,0xD1,
+    0x4A,0x00,0xA2,0x5E,0x82,0x42,0x00,0xDA,0x10,0x46,0x49,0x1C,0x99,0x42,0xF4,0xDB,
+    0x00,0x21,0x08,0xE0,0x05,0x9A,0x52,0x5C,0x00,0x2A,0x03,0xD0,0x4A,0x00,0xAB,0x5A,
+    0x1B,0x1A,0xAB,0x52,0x49,0x1C,0x0D,0x4A,0x13,0x78,0x99,0x42,0xF2,0xDB,0x00,0x21,
+    0x0C,0xE0,0x7A,0x5C,0x00,0x2A,0x04,0xD0,0x4A,0x00,0xB3,0x5A,0x1B,0x18,0xB3,0x52,
+    0x03,0xE0,0x4A,0x00,0xA3,0x5A,0x1B,0x1A,0xA3,0x52,0x49,0x1C,0x03,0x4A,0x12,0x78,
+    0x91,0x42,0xB6,0xDA,0xED,0xE7,0x08,0xB0,0xF0,0xBD,0x00,0x00,0x3C,0x00,0x00,0x20,
+    0xFF,0x7F,0x00,0x00,0xC2,0x06,0xD2,0x0E,0x01,0x21,0x91,0x40,0x40,0x09,0x02,0x4A,
+    0x80,0x00,0x80,0x18,0x01,0x60,0x70,0x47,0x00,0xE1,0x00,0xE0,0x83,0x07,0xFF,0x22,
+    0xDB,0x0E,0x9A,0x40,0x89,0x07,0x09,0x0E,0x99,0x40,0x00,0x28,0x0B,0xDA,0x00,0x07,
+    0x00,0x0F,0x08,0x38,0x83,0x08,0x08,0x48,0x9B,0x00,0x18,0x18,0xC3,0x69,0x93,0x43,
+    0x0B,0x43,0xC3,0x61,0x70,0x47,0x83,0x08,0x04,0x48,0x9B,0x00,0x18,0x18,0x03,0x68,
+    0x93,0x43,0x0B,0x43,0x03,0x60,0x70,0x47,0x00,0xED,0x00,0xE0,0x00,0xE4,0x00,0xE0,
+    0x10,0xB5,0x04,0xF0,0x73,0xFA,0x10,0xBD,0x30,0xB4,0x74,0x46,0x64,0x1E,0x25,0x78,
+    0x64,0x1C,0xAB,0x42,0x00,0xD2,0x1D,0x46,0x63,0x5D,0x5B,0x00,0xE3,0x18,0x30,0xBC,
+    0x18,0x47,0x00,0x00,0xFF,0xB5,0x14,0x22,0x50,0x43,0x4A,0x4A,0x81,0xB0,0x84,0x18,
+    0x49,0x48,0x0A,0x9E,0x40,0x68,0x1D,0x46,0x82,0x69,0x0B,0x99,0x92,0x57,0x00,0x92,
+    0x42,0x69,0x02,0x29,0x57,0x57,0x27,0xD0,0x63,0x7C,0x29,0x07,0x1A,0x07,0x12,0x0F,
+    0x09,0x0F,0xAA,0x42,0x03,0xD9,0x1A,0x09,0x12,0x01,0x0A,0x43,0x62,0x74,0x62,0x7C,
+    0x13,0x09,0xAB,0x42,0x04,0xD2,0x12,0x07,0x12,0x0F,0x09,0x01,0x0A,0x43,0x62,0x74,
+    0xA3,0x7C,0x31,0x07,0x1A,0x07,0x12,0x0F,0x09,0x0F,0xB2,0x42,0x03,0xD9,0x1A,0x09,
+    0x12,0x01,0x0A,0x43,0xA2,0x74,0xA2,0x7C,0x13,0x09,0xB3,0x42,0x04,0xD2,0x12,0x07,
+    0x12,0x0F,0x09,0x01,0x0A,0x43,0xA2,0x74,0x01,0x7B,0x00,0x29,0x27,0xD0,0x00,0x2D,
+    0x37,0xD0,0x81,0x7F,0x4A,0x1E,0xAA,0x42,0x0B,0xD1,0xC0,0x7F,0x89,0x1E,0x41,0x43,
+    0x88,0x19,0x41,0x00,0x03,0x98,0x3A,0x46,0x41,0x5E,0x02,0x98,0x00,0xF0,0x18,0xFD,
+    0x07,0x46,0x25,0x48,0x00,0x2E,0x40,0x68,0xC0,0x7F,0x25,0xD0,0x41,0x1E,0xB1,0x42,
+    0x0D,0xD1,0x01,0x46,0x69,0x43,0x08,0x18,0x41,0x00,0x03,0x98,0x08,0x18,0x40,0x38,
+    0x3C,0x21,0x41,0x5E,0x00,0x9A,0x02,0x98,0x00,0xF0,0x02,0xFD,0x00,0x90,0x21,0x68,
+    0x02,0x98,0x08,0x18,0x20,0x60,0x18,0x48,0x40,0x68,0x81,0x69,0x00,0x29,0x12,0xD0,
+    0x00,0x99,0xF2,0x01,0x51,0x18,0x02,0x9A,0x63,0x68,0x51,0x43,0xC9,0x11,0x59,0x18,
+    0x0D,0xE0,0xC0,0x7F,0x80,0x19,0xCC,0xE7,0x68,0x43,0x41,0x00,0x03,0x98,0x08,0x18,
+    0x02,0x21,0x41,0x5E,0xDE,0xE7,0x02,0x99,0x62,0x68,0x71,0x43,0x51,0x18,0x61,0x60,
+    0x40,0x69,0x00,0x28,0x07,0xD0,0xE8,0x01,0x02,0x99,0xC0,0x19,0xA2,0x68,0x48,0x43,
+    0xC0,0x11,0x10,0x18,0x03,0xE0,0x02,0x98,0xA1,0x68,0x68,0x43,0x08,0x18,0xA0,0x60,
+    0x05,0xB0,0xF0,0xBD,0xE0,0x0A,0x00,0x20,0x30,0x00,0x00,0x20,0xFF,0xB5,0x82,0xB0,
+    0x00,0x21,0x0B,0x98,0x41,0x4A,0x01,0x91,0x51,0x68,0x03,0x9C,0xC9,0x7F,0x56,0x78,
+    0x61,0x43,0x04,0x9C,0x09,0x19,0x89,0xB2,0x8C,0x46,0x4C,0x00,0x02,0x99,0x14,0x2E,
+    0x0C,0x5F,0x03,0xD3,0x00,0x20,0xC0,0x43,0x06,0xB0,0xF0,0xBD,0x00,0x21,0x3B,0xE0,
+    0x0E,0x22,0x0D,0x46,0x55,0x43,0x36,0x4A,0xAE,0x46,0xAA,0x18,0x95,0x7A,0x00,0x95,
+    0x2F,0x07,0x3F,0x0F,0x83,0x42,0x01,0xD2,0x1D,0x46,0x00,0xE0,0x05,0x46,0xAF,0x42,
+    0x28,0xD1,0x00,0x9D,0x2F,0x09,0x83,0x42,0x01,0xD9,0x1D,0x46,0x00,0xE0,0x05,0x46,
+    0xAF,0x42,0x1F,0xD1,0x0E,0x20,0x41,0x43,0x29,0x48,0x08,0x18,0x40,0x88,0x41,0x00,
+    0x02,0x98,0x40,0x5E,0xA0,0x42,0x01,0xDA,0x60,0x46,0x50,0x80,0x24,0x4B,0x70,0x46,
+    0x18,0x5A,0x71,0x46,0x40,0x1C,0x58,0x52,0x04,0x98,0x91,0x88,0x60,0x43,0x08,0x18,
+    0x90,0x80,0x03,0x98,0xD1,0x88,0x60,0x43,0x08,0x18,0xD0,0x80,0x10,0x89,0x00,0x19,
+    0x10,0x81,0x30,0xE0,0x49,0x1C,0xC9,0xB2,0xB1,0x42,0xC1,0xD3,0x01,0x99,0x00,0x29,
+    0x29,0xD1,0x31,0x46,0x0E,0x22,0x51,0x43,0x15,0x4A,0x01,0x25,0x55,0x52,0x89,0x18,
+    0x8A,0x7A,0x12,0x4F,0x12,0x09,0x12,0x01,0x83,0x42,0x01,0xD2,0x1D,0x46,0x00,0xE0,
+    0x05,0x46,0x2D,0x07,0x2D,0x0F,0x2A,0x43,0x8A,0x72,0x12,0x07,0x12,0x0F,0x3D,0x46,
+    0x83,0x42,0x00,0xD9,0x18,0x46,0x00,0x01,0x02,0x43,0x8A,0x72,0x60,0x46,0x48,0x80,
+    0x04,0x9A,0x20,0x46,0x50,0x43,0x88,0x80,0x03,0x9A,0x20,0x46,0x50,0x43,0xC8,0x80,
+    0x0C,0x81,0x76,0x1C,0x6E,0x70,0x00,0x20,0x8E,0xE7,0x00,0x00,0x30,0x00,0x00,0x20,
+    0xA8,0x0B,0x00,0x20,0x70,0xB5,0x20,0x48,0x1F,0x4C,0xC0,0x6B,0x80,0x3C,0x01,0x78,
+    0x00,0x20,0x20,0x74,0x22,0x46,0x21,0x70,0xE0,0x32,0xD0,0x8A,0x28,0x28,0x02,0xD8,
+    0x13,0x79,0x00,0x2B,0x07,0xD0,0xC8,0x28,0x00,0xD9,0xC8,0x20,0x01,0x23,0xC0,0x08,
+    0x23,0x74,0x40,0x18,0x20,0x70,0x20,0x7C,0x23,0x46,0x40,0x1C,0x60,0x74,0xA1,0x6B,
+    0x10,0x7A,0x08,0x70,0xA1,0x6B,0x50,0x7A,0x48,0x70,0x00,0x20,0xC0,0x33,0x51,0x7A,
+    0xD5,0x79,0x69,0x43,0x49,0x00,0x45,0x00,0x49,0x19,0x9D,0x6B,0x69,0x5A,0x49,0x08,
+    0xFF,0x29,0x00,0xDD,0xFF,0x21,0x85,0x1C,0xA6,0x6B,0x40,0x1C,0x40,0xB2,0x71,0x55,
+    0x02,0x28,0xEC,0xDB,0xE1,0x6B,0x58,0x7E,0x08,0x70,0xE1,0x6B,0x18,0x7E,0x48,0x70,
+    0xE1,0x6B,0x10,0x79,0x88,0x70,0x70,0xBD,0xC4,0x00,0x00,0x20,0xFF,0xB5,0x05,0x46,
+    0x06,0x46,0x04,0x46,0x00,0x8A,0xA9,0x8B,0x10,0x36,0x40,0x1A,0x71,0x88,0xEA,0x8B,
+    0x40,0x43,0x89,0x1A,0x49,0x43,0x1F,0x46,0x2C,0x34,0x40,0x18,0x06,0xF0,0x82,0xFB,
+    0x61,0x89,0x08,0x18,0xC0,0x03,0x00,0x0C,0x60,0x81,0x01,0x99,0x88,0x42,0x04,0xDD,
+    0x08,0x20,0x20,0x5E,0x7F,0x1C,0xC0,0x19,0x30,0xE0,0x02,0x99,0x88,0x42,0x11,0xDD,
+    0x09,0x98,0x38,0x18,0x42,0x08,0x08,0x20,0x20,0x5E,0x11,0x1A,0x10,0x31,0x20,0x29,
+    0x01,0xD9,0x08,0x21,0x00,0xE0,0x04,0x21,0x90,0x42,0x01,0xDD,0x40,0x1A,0x1E,0xE0,
+    0x40,0x18,0x1C,0xE0,0xB0,0x88,0xA9,0x8B,0xEA,0x8B,0x40,0x1A,0xF1,0x88,0x40,0x43,
+    0x89,0x1A,0x49,0x43,0x40,0x18,0x06,0xF0,0x55,0xFB,0x09,0x99,0xBA,0x08,0x51,0x18,
+    0xC9,0xB2,0x80,0x28,0x05,0xDD,0x08,0x20,0x20,0x5E,0x80,0x28,0x01,0xDA,0x40,0x1C,
+    0x05,0xE0,0x08,0x20,0x20,0x5E,0x88,0x42,0x03,0xDD,0x40,0x18,0x40,0x10,0x20,0x81,
+    0x04,0xE0,0x09,0x99,0x88,0x42,0x01,0xDD,0x40,0x1E,0xF8,0xE7,0x08,0x20,0x20,0x5E,
+    0x80,0x21,0x08,0x1A,0x04,0xB0,0xF0,0xBD,0xF0,0xB5,0x23,0x4E,0x04,0x46,0x35,0x68,
+    0x85,0xB0,0x28,0x7A,0xFF,0x21,0x40,0x00,0x03,0x90,0x68,0x7A,0x81,0x31,0x48,0x43,
+    0x00,0x0A,0x02,0x90,0xE8,0x7A,0x64,0x21,0xC0,0x01,0xFF,0xF7,0xCF,0xFC,0xC7,0xB2,
+    0xA8,0x7A,0xFF,0x21,0x02,0x46,0x14,0x32,0x50,0x43,0x78,0x31,0xFF,0xF7,0xD0,0xFC,
+    0xC5,0xB2,0x2A,0x46,0x39,0x46,0x20,0x46,0x00,0xF0,0x28,0xF8,0xA0,0x78,0x03,0x28,
+    0x05,0xD2,0x20,0x8A,0x69,0x46,0x88,0x80,0x60,0x8A,0xC8,0x80,0x12,0xE0,0x3B,0x46,
+    0x00,0x95,0x20,0x46,0x02,0x9A,0x03,0x99,0xFF,0xF7,0x70,0xFF,0x01,0x46,0x30,0x68,
+    0x01,0xAA,0x00,0x7B,0x00,0x28,0x20,0x46,0x02,0xD0,0x00,0xF0,0xB9,0xF8,0x01,0xE0,
+    0x00,0xF0,0x39,0xF8,0x69,0x46,0x88,0x88,0x20,0x84,0xC9,0x88,0x61,0x84,0x20,0x82,
+    0x61,0x82,0x01,0x98,0x05,0xB0,0xF0,0xBD,0x38,0x00,0x00,0x20,0xF0,0xB5,0x05,0x46,
+    0x10,0x35,0x04,0x46,0x2C,0x34,0x02,0x22,0x93,0x00,0x5B,0x19,0x1E,0x1F,0x37,0x88,
+    0x1F,0x80,0x52,0x1E,0x76,0x88,0x52,0xB2,0x5E,0x80,0x00,0x2A,0xF4,0xDC,0x82,0x89,
+    0x2A,0x80,0xC3,0x89,0x6B,0x80,0x80,0x78,0x03,0x28,0x13,0xD2,0x02,0x28,0x11,0xD1,
+    0xA8,0x88,0x10,0x1A,0x00,0xB2,0x20,0x80,0x6A,0x88,0xEB,0x88,0xD2,0x1A,0x12,0xB2,
+    0x62,0x80,0xA0,0x80,0xE2,0x80,0x40,0x43,0x52,0x43,0x21,0x81,0x80,0x18,0x06,0xF0,
+    0xC1,0xFA,0x60,0x81,0xF0,0xBD,0xF7,0xB5,0x86,0xB0,0x02,0x46,0x83,0x8C,0x6C,0x46,
+    0x23,0x80,0xC0,0x8C,0x60,0x80,0x14,0x46,0x15,0x46,0x92,0x8D,0x05,0x92,0x9A,0x18,
+    0x2C,0x34,0x04,0x23,0xE3,0x5E,0x01,0x26,0x5B,0x10,0xD2,0x18,0x17,0xB2,0x62,0x88,
+    0xBC,0x46,0x80,0x18,0x06,0x22,0xA2,0x5E,0xB6,0x02,0x52,0x10,0x80,0x18,0x02,0xB2,
+    0x08,0x01,0x01,0x92,0x02,0x46,0x4A,0x43,0xD3,0x11,0x59,0x43,0x49,0x12,0x4A,0x00,
+    0x59,0x00,0x89,0x10,0x8B,0x1A,0x40,0x00,0x80,0x10,0x1F,0x1A,0xBE,0x19,0x67,0x46,
+    0x00,0x96,0x7E,0x43,0x49,0x00,0x01,0x27,0x49,0x42,0xFF,0x02,0xC9,0x19,0x10,0x35,
+    0x04,0x91,0x2F,0x88,0x1B,0x18,0x79,0x43,0x01,0x20,0xC0,0x02,0x1F,0x18,0xAB,0x88,
+    0x38,0x46,0x58,0x43,0x89,0x19,0x41,0x18,0x01,0x20,0x03,0x93,0x52,0x00,0x80,0x02,
+    0x2B,0x89,0x10,0x18,0x43,0x43,0x02,0x90,0x58,0x18,0x03,0x21,0xC9,0x02,0x8A,0x10,
+    0x80,0x18,0xFF,0xF7,0x25,0xFC,0x06,0x46,0x01,0x9A,0x00,0x98,0x04,0x99,0x50,0x43,
+    0x6A,0x88,0x51,0x43,0x08,0x18,0xE9,0x88,0x6A,0x89,0x4F,0x43,0x39,0x18,0x02,0x98,
+    0x42,0x43,0x50,0x18,0x03,0x21,0xC9,0x02,0x8A,0x10,0x80,0x18,0xFF,0xF7,0x10,0xFC,
+    0x03,0x9B,0x05,0x9A,0xF1,0x1A,0x8A,0x1A,0xA2,0x80,0x21,0x80,0x00,0x2E,0x00,0xDA,
+    0x00,0x26,0x08,0x99,0x0E,0x80,0xE9,0x88,0x62,0x88,0x41,0x1A,0x8A,0x1A,0xE2,0x80,
+    0x61,0x80,0x00,0x28,0x00,0xDA,0x00,0x20,0x08,0x99,0x48,0x80,0x09,0xB0,0xF0,0xBD,
+    0xF7,0xB5,0x86,0xB0,0x85,0x8C,0x6B,0x46,0x02,0x46,0x1D,0x80,0xC0,0x8C,0x58,0x80,
+    0x93,0x8D,0x05,0x93,0xEB,0x18,0x30,0x25,0x55,0x5F,0x14,0x46,0x6D,0x10,0x5B,0x19,
+    0x1B,0xB2,0x9C,0x46,0xD3,0x8D,0x15,0x46,0xC0,0x18,0x32,0x23,0xD3,0x5E,0x10,0x35,
+    0x5B,0x10,0xC0,0x18,0x00,0xB2,0x01,0x90,0x08,0x01,0x02,0x46,0x4A,0x43,0xD2,0x11,
+    0x51,0x43,0x4E,0x12,0x91,0x00,0x51,0x18,0x82,0x00,0x80,0x18,0x72,0x00,0x89,0x10,
+    0x52,0x42,0x52,0x18,0x80,0x10,0x17,0x1A,0x01,0x23,0x9B,0x02,0xFF,0x18,0x63,0x46,
+    0x00,0x97,0x5F,0x43,0x73,0x00,0xF3,0x18,0x49,0x00,0x5B,0x1A,0x01,0x21,0x09,0x03,
+    0x59,0x18,0x04,0x91,0x2B,0x88,0x12,0x18,0x59,0x43,0xCB,0x19,0x01,0x20,0xA9,0x88,
+    0x80,0x02,0x10,0x18,0x03,0x91,0x02,0x90,0x41,0x43,0xC8,0x18,0x29,0x89,0x2C,0x34,
+    0x71,0x43,0x08,0x18,0x03,0x21,0xC9,0x02,0x8A,0x10,0x80,0x18,0xFF,0xF7,0xA8,0xFB,
+    0x07,0x46,0x00,0x9A,0x01,0x98,0x04,0x99,0x42,0x43,0x68,0x88,0x41,0x43,0x89,0x18,
+    0xEA,0x88,0x02,0x98,0x42,0x43,0x50,0x18,0x69,0x89,0x71,0x43,0x08,0x18,0x03,0x21,
+    0xC9,0x02,0x8A,0x10,0x80,0x18,0xFF,0xF7,0x93,0xFB,0x03,0x99,0x05,0x9B,0x79,0x1A,
+    0xCA,0x1A,0xA2,0x80,0x21,0x80,0x00,0x2F,0x00,0xDA,0x00,0x27,0x08,0x99,0x0F,0x80,
+    0xE9,0x88,0x62,0x88,0x41,0x1A,0x8A,0x1A,0xE2,0x80,0x61,0x80,0x00,0x28,0x00,0xDA,
+    0x00,0x20,0x08,0x99,0x48,0x80,0x09,0xB0,0xF0,0xBD,0x00,0x00,0xFF,0xB5,0x87,0xB0,
+    0x00,0x26,0x30,0x46,0x11,0x9A,0x0C,0xE0,0x38,0x21,0x08,0x9B,0x41,0x43,0xC9,0x18,
+    0x89,0x78,0x00,0x29,0x03,0xD0,0x10,0x99,0x88,0x55,0x76,0x1C,0xF6,0xB2,0x40,0x1C,
+    0xC0,0xB2,0x90,0x42,0xF0,0xD3,0x12,0x98,0x00,0x2E,0x06,0x70,0x08,0xD0,0x0A,0x98,
+    0x00,0x28,0x05,0xD0,0xB0,0x42,0x00,0xD8,0x30,0x46,0x00,0x24,0x01,0x90,0x5E,0xE0,
+    0x00,0x20,0x0B,0xB0,0xF0,0xBD,0x00,0x25,0x54,0xE0,0xB4,0x42,0x47,0xD2,0x0A,0x98,
+    0x85,0x42,0x44,0xD2,0x09,0x98,0xE9,0x00,0x09,0x18,0x08,0x22,0x02,0xA8,0xFF,0xF7,
+    0xD3,0xFA,0x68,0x46,0x43,0x89,0x02,0x89,0x10,0x98,0x38,0x21,0x00,0x5D,0x48,0x43,
+    0x08,0x99,0x40,0x18,0xC1,0x8C,0x80,0x8C,0x01,0xF0,0xD8,0xFD,0x00,0x90,0x10,0x98,
+    0x38,0x21,0x00,0x5D,0x48,0x43,0x08,0x99,0x40,0x18,0x81,0x78,0x02,0x29,0x28,0xD3,
+    0x1E,0x4F,0x39,0x68,0x49,0x69,0x00,0x29,0x23,0xD0,0xC3,0x89,0x82,0x89,0xC1,0x8C,
+    0x80,0x8C,0x01,0xF0,0xC3,0xFD,0x05,0x90,0x68,0x46,0x43,0x89,0x02,0x89,0x10,0x98,
+    0x38,0x21,0x00,0x5D,0x48,0x43,0x08,0x99,0x40,0x18,0xC1,0x89,0x80,0x89,0x01,0xF0,
+    0xB5,0xFD,0x04,0x90,0x38,0x68,0x00,0x9A,0x47,0x69,0x13,0x9B,0x04,0x99,0x05,0x98,
+    0xB8,0x47,0x00,0x28,0x05,0xD1,0x13,0x99,0x04,0x98,0x88,0x42,0x01,0xDB,0x0C,0x48,
+    0x00,0xE0,0x00,0x98,0x01,0x99,0x61,0x43,0x49,0x19,0x4A,0x00,0x07,0x99,0x6D,0x1C,
+    0x88,0x52,0xED,0xB2,0x01,0x98,0x85,0x42,0xA7,0xD3,0x64,0x1C,0xE4,0xB2,0x84,0x42,
+    0xA1,0xD3,0x12,0x98,0x06,0x70,0x01,0x98,0x9B,0xE7,0x00,0x00,0x38,0x00,0x00,0x20,
+    0xFF,0x7F,0x00,0x00,0xFE,0xB5,0x4D,0x48,0x54,0x22,0xC0,0x6B,0x00,0x21,0x80,0x79,
+    0x01,0x90,0x4B,0x48,0x02,0xF0,0x12,0xFC,0x00,0x25,0x06,0x20,0x48,0x4A,0x00,0x21,
+    0x68,0x43,0x84,0x18,0x00,0x20,0x4B,0x00,0x46,0x4A,0x12,0x5C,0x16,0x09,0x8E,0x42,
+    0x06,0xD1,0x17,0x07,0xE6,0x5C,0x3F,0x0F,0x01,0x22,0xBA,0x40,0x16,0x43,0xE6,0x54,
+    0x40,0x1C,0x08,0x28,0xF0,0xD3,0x49,0x1C,0x03,0x29,0xEB,0xD3,0x6D,0x1C,0x0C,0x2D,
+    0xE3,0xD3,0x3A,0x49,0x00,0x24,0xA0,0x31,0xCC,0x74,0x08,0x46,0x8C,0x74,0x20,0x38,
+    0x00,0x90,0x00,0x23,0x37,0x4A,0xE5,0x18,0x52,0x5D,0x00,0x20,0x96,0x46,0x12,0x09,
+    0x94,0x46,0x84,0x45,0x27,0xD1,0x72,0x46,0x15,0x07,0x2D,0x0F,0x01,0x22,0xAA,0x40,
+    0x00,0x9D,0x8E,0x7C,0xAD,0x6A,0xB6,0x00,0xF6,0x18,0xAD,0x57,0x01,0x2D,0x02,0xD0,
+    0x6D,0x1C,0x0B,0xD0,0x17,0xE0,0xCE,0x7C,0x06,0x25,0x6E,0x43,0x28,0x4D,0x76,0x19,
+    0x45,0x00,0x77,0x5D,0x97,0x43,0x77,0x55,0x75,0x19,0x09,0xE0,0xCE,0x7C,0x06,0x25,
+    0x6E,0x43,0x23,0x4D,0x75,0x19,0x46,0x00,0xAF,0x5D,0x17,0x43,0xAF,0x55,0xAD,0x19,
+    0x6E,0x78,0x16,0x43,0x6E,0x70,0x40,0x1C,0x03,0x28,0xD2,0xD3,0x5B,0x1C,0x04,0x2B,
+    0xC8,0xD3,0xC8,0x7C,0x40,0x1C,0xC8,0x74,0x88,0x7C,0x40,0x1C,0xC0,0xB2,0x88,0x74,
+    0x04,0x28,0xBE,0xD1,0x00,0x20,0x88,0x74,0x01,0x98,0x24,0x1D,0x02,0x1B,0x52,0x1E,
+    0x03,0x2A,0x00,0xD2,0x04,0x1F,0x84,0x42,0xB3,0xD1,0xCE,0x7C,0x0E,0x75,0x11,0x4F,
+    0x00,0x21,0x00,0x20,0x3A,0x5C,0x13,0x09,0x8B,0x42,0x10,0xD1,0x15,0x07,0x06,0x22,
+    0x33,0x46,0x53,0x43,0x0A,0x4A,0x2D,0x0F,0x9A,0x18,0x4B,0x00,0xD2,0x18,0x94,0x79,
+    0x01,0x23,0xAB,0x40,0x1C,0x43,0x94,0x71,0x14,0x7B,0x9C,0x43,0x14,0x73,0x40,0x1C,
+    0x08,0x28,0xE7,0xD3,0x49,0x1C,0x03,0x29,0xE3,0xD3,0xFE,0xBD,0xC4,0x00,0x00,0x20,
+    0xAC,0x09,0x00,0x20,0x21,0x7B,0x00,0x00,0x70,0xB5,0x04,0x46,0x00,0x20,0x10,0x21,
+    0x20,0x5E,0x61,0x5E,0x42,0x18,0x04,0x20,0x0C,0x21,0x20,0x5E,0x61,0x5E,0x40,0x18,
+    0x82,0x42,0x01,0xDA,0x11,0x46,0x00,0xE0,0x01,0x46,0x01,0x29,0x01,0xDA,0x01,0x21,
+    0x04,0xE0,0x82,0x42,0x01,0xDA,0x11,0x46,0x00,0xE0,0x01,0x46,0x82,0x42,0x00,0xDD,
+    0x10,0x46,0x64,0x22,0x50,0x43,0xFF,0xF7,0x2B,0xFA,0x05,0x46,0x02,0x20,0x0E,0x21,
+    0x20,0x5E,0x61,0x5E,0x0A,0x22,0x40,0x18,0x06,0x21,0x61,0x5E,0xA2,0x5E,0x8A,0x18,
+    0x90,0x42,0x01,0xDA,0x01,0x46,0x00,0xE0,0x11,0x46,0x01,0x29,0x01,0xDA,0x01,0x21,
+    0x04,0xE0,0x90,0x42,0x01,0xDA,0x01,0x46,0x00,0xE0,0x11,0x46,0x90,0x42,0x00,0xDC,
+    0x10,0x46,0x8D,0x22,0x50,0x43,0xFF,0xF7,0x0B,0xFA,0x28,0x18,0x00,0xB2,0xFA,0x38,
+    0xC1,0x0F,0x08,0x18,0x41,0x10,0x3C,0x20,0x40,0x1A,0x05,0x28,0x03,0xDB,0x3C,0x28,
+    0x01,0xDD,0x3C,0x20,0x02,0xE0,0x05,0x28,0x00,0xDA,0x05,0x20,0xC0,0xB2,0x70,0xBD,
+    0xF1,0xB5,0x8C,0xB0,0x00,0x20,0x06,0x90,0x4F,0x48,0x41,0x68,0x89,0x6A,0x00,0x29,
+    0x7E,0xD0,0x00,0x21,0x08,0x46,0x05,0x91,0x85,0xE0,0x01,0x46,0x0E,0x20,0x41,0x43,
+    0x4A,0x48,0x08,0x26,0x0D,0x18,0x0B,0x95,0xAE,0x5F,0x06,0x20,0x28,0x5E,0x77,0x10,
+    0xC0,0x19,0x31,0x46,0xFF,0xF7,0xDC,0xF9,0xC4,0xB2,0x04,0x20,0x28,0x5E,0x31,0x46,
+    0xC0,0x19,0xFF,0xF7,0xD5,0xF9,0xC0,0xB2,0x86,0x46,0x01,0x20,0x84,0x46,0x60,0x1E,
+    0x41,0xB2,0x00,0x25,0x60,0x46,0x20,0x18,0x0A,0x90,0x51,0xE0,0x70,0x46,0x62,0x46,
+    0x80,0x1A,0x72,0x44,0x40,0xB2,0x09,0x92,0x45,0xE0,0x00,0x29,0x01,0xDA,0x00,0x24,
+    0x00,0xE0,0x0C,0x46,0x34,0x4A,0x52,0x68,0x93,0x7F,0x1E,0x46,0x5B,0x1E,0x08,0x93,
+    0x9C,0x42,0x05,0xDA,0x00,0x29,0x01,0xDA,0x00,0x23,0x02,0xE0,0x0B,0x46,0x00,0xE0,
+    0x73,0x1E,0xDC,0xB2,0x00,0x28,0x01,0xDA,0x00,0x27,0x00,0xE0,0x07,0x46,0xD2,0x7F,
+    0x53,0x1E,0x07,0x93,0x9F,0x42,0x05,0xDA,0x00,0x28,0x01,0xDA,0x00,0x23,0x02,0xE0,
+    0x03,0x46,0x00,0xE0,0x53,0x1E,0xDB,0xB2,0x00,0x29,0x01,0xDA,0x01,0x24,0x04,0xE0,
+    0x08,0x9F,0x8F,0x42,0x01,0xDA,0xB6,0x1E,0xF4,0xB2,0x00,0x28,0x01,0xDA,0x01,0x23,
+    0x04,0xE0,0x07,0x9E,0x86,0x42,0x01,0xDA,0x93,0x1E,0xDB,0xB2,0x62,0x43,0xD2,0x18,
+    0x53,0x00,0x0C,0x9A,0x6C,0x46,0xD2,0x5A,0x6B,0x00,0x6D,0x1C,0xE2,0x52,0x40,0x1C,
+    0x09,0x9A,0x6D,0xB2,0x40,0xB2,0x82,0x42,0xB7,0xDA,0x49,0x1C,0x0A,0x98,0x49,0xB2,
+    0x88,0x42,0xAB,0xDA,0x10,0x48,0x40,0x68,0x81,0x6A,0x68,0x46,0x88,0x47,0x00,0xE0,
+    0x17,0xE0,0x0B,0x99,0xC8,0x72,0x06,0x99,0x88,0x42,0x00,0xD9,0x06,0x90,0x05,0x98,
+    0x40,0x1C,0xC0,0xB2,0x05,0x90,0x08,0x49,0x49,0x78,0x88,0x42,0x00,0xD2,0x74,0xE7,
+    0x05,0x48,0x40,0x68,0x01,0x7C,0x4A,0x00,0x8A,0x18,0x06,0x99,0x51,0x18,0x89,0x08,
+    0x01,0x74,0x0D,0xB0,0xF0,0xBD,0x00,0x00,0x30,0x00,0x00,0x20,0xA8,0x0B,0x00,0x20,
+    0x70,0xB5,0x15,0x46,0x0A,0x46,0x12,0x49,0x00,0x24,0x4E,0x68,0xB1,0x7B,0x51,0x1A,
+    0xF2,0x7B,0x51,0x43,0x0A,0xB2,0x00,0x2A,0x00,0xDA,0x00,0x22,0x82,0x42,0x01,0xDB,
+    0x00,0x20,0x70,0xBD,0x92,0x02,0x01,0x46,0x10,0x46,0xFF,0xF7,0x39,0xF9,0x01,0x21,
+    0x89,0x02,0x08,0x1A,0x00,0xB2,0x71,0x7B,0x04,0xE0,0x40,0x43,0x80,0x12,0x64,0x1C,
+    0x00,0xB2,0xE4,0xB2,0xA1,0x42,0xF8,0xD8,0x68,0x43,0x80,0x12,0x00,0xB2,0x70,0xBD,
+    0x30,0x00,0x00,0x20,0xF8,0xB5,0x48,0x22,0x00,0x21,0x2E,0x48,0x02,0xF0,0x4E,0xFA,
+    0x2C,0x4C,0x2D,0x4E,0x00,0x21,0x00,0x20,0x2C,0x4A,0x12,0x5C,0x12,0x09,0x8A,0x42,
+    0x24,0xD1,0x32,0x18,0x8B,0x00,0x40,0x32,0xE5,0x5C,0x12,0x79,0x15,0x43,0xE5,0x54,
+    0x1B,0x19,0x9D,0x7B,0x15,0x43,0x9D,0x73,0xDD,0x7E,0x15,0x43,0xDD,0x76,0xC5,0x07,
+    0x08,0xD0,0x1D,0x46,0x20,0x35,0xAF,0x79,0x17,0x43,0xAF,0x71,0xEF,0x7C,0x17,0x43,
+    0xEF,0x74,0x07,0xE0,0x1D,0x46,0x20,0x35,0xAF,0x7C,0x17,0x43,0xAF,0x74,0xEF,0x79,
+    0x17,0x43,0xEF,0x71,0x20,0x33,0xDD,0x7F,0x15,0x43,0xDD,0x77,0x40,0x1C,0xC0,0xB2,
+    0x08,0x28,0xD1,0xD3,0x16,0x4F,0x00,0x22,0xB8,0x5C,0x00,0x09,0x88,0x42,0x17,0xD1,
+    0xB0,0x18,0x8B,0x00,0x40,0x30,0xE5,0x5C,0x00,0x7B,0x05,0x43,0xE5,0x54,0x1B,0x19,
+    0xDD,0x7B,0x05,0x43,0xDD,0x73,0x9D,0x7E,0x05,0x43,0x9D,0x76,0x20,0x33,0xDD,0x79,
+    0x05,0x43,0xDD,0x71,0xDD,0x7C,0x05,0x43,0xDD,0x74,0xDD,0x7F,0x05,0x43,0xDD,0x77,
+    0x52,0x1C,0xD2,0xB2,0x09,0x2A,0xDF,0xD3,0x49,0x1C,0xC9,0xB2,0x03,0x29,0xAA,0xD3,
+    0xF8,0xBD,0x00,0x00,0x54,0x09,0x00,0x20,0x40,0x7B,0x00,0x00,0x21,0x7B,0x00,0x00,
+    0x29,0x7B,0x00,0x00,0x08,0xB5,0x6A,0x46,0x00,0x90,0x13,0x88,0x0A,0x33,0x13,0x80,
+    0x0A,0x46,0x00,0x99,0x01,0xF0,0xF4,0xFC,0x08,0xBD,0x40,0x1A,0x00,0xB2,0x00,0x28,
+    0x02,0xDA,0xFF,0x30,0x69,0x30,0x00,0xB2,0x80,0xB2,0x70,0x47,0xF0,0xB5,0x6F,0x4E,
+    0x8B,0xB0,0xF2,0x6B,0x35,0x46,0x10,0x79,0x01,0x90,0xD0,0x78,0x00,0x90,0x80,0x3D,
+    0x13,0x78,0x69,0x6D,0x5B,0x00,0x68,0x6C,0x06,0x93,0xD3,0x7D,0x0A,0x93,0x1B,0x23,
+    0xD3,0x56,0x09,0x93,0x00,0x23,0x2B,0x62,0x05,0x93,0xEB,0x61,0x04,0x93,0x54,0x78,
+    0x64,0x08,0x08,0x94,0x52,0x24,0x14,0x5F,0x62,0x10,0x07,0x92,0xEA,0x1D,0xF9,0x32,
+    0x02,0x92,0x13,0x77,0x6A,0x78,0x05,0x2A,0x22,0xD8,0x00,0x9F,0x01,0x9A,0x2B,0x46,
+    0x57,0x43,0x00,0x22,0x20,0x33,0x19,0xE0,0x58,0x4C,0x80,0x3C,0x64,0x78,0x02,0x2C,
+    0x01,0xD8,0x0C,0x88,0x05,0xE0,0x00,0x25,0x04,0x88,0x4D,0x5F,0x64,0x19,0xE4,0x03,
+    0x24,0x0C,0x04,0x80,0x00,0x24,0x0C,0x5F,0x00,0x2C,0x03,0xDA,0xDC,0x7C,0x01,0x25,
+    0x2C,0x43,0xDC,0x74,0x80,0x1C,0x89,0x1C,0x52,0x1C,0x92,0xB2,0xBA,0x42,0xE3,0xD3,
+    0x4A,0x48,0x80,0x38,0x41,0x6C,0x03,0x91,0x00,0x25,0x44,0x6D,0x81,0xE0,0x00,0x20,
+    0x02,0x9A,0x84,0x46,0x92,0x6B,0x01,0x46,0x50,0x55,0x03,0x46,0x45,0xE0,0x03,0x98,
+    0x22,0x88,0x00,0x88,0x80,0x1A,0x02,0xB2,0x22,0x80,0x06,0x98,0x82,0x42,0x05,0xDA,
+    0x49,0x1C,0x60,0x46,0x80,0x18,0x00,0xB2,0xC9,0xB2,0x84,0x46,0x08,0x98,0x82,0x42,
+    0x1A,0xDD,0x0A,0x98,0x82,0x42,0x2A,0xDD,0xF0,0x6B,0xC0,0x79,0x00,0x28,0x03,0xD0,
+    0x00,0x9F,0x7F,0x1E,0xBD,0x42,0x04,0xD0,0x01,0x27,0x05,0x98,0x9F,0x40,0x07,0x43,
+    0x05,0x97,0x02,0x98,0x01,0x27,0x80,0x6B,0x47,0x55,0xF0,0x6B,0x00,0x78,0x90,0x42,
+    0x15,0xDA,0x02,0x9A,0x17,0x77,0x12,0xE0,0x07,0x98,0x82,0x42,0x0F,0xDA,0x09,0x98,
+    0x82,0x42,0x0C,0xDA,0xF0,0x6B,0xC0,0x79,0x00,0x28,0x03,0xD0,0x00,0x98,0x40,0x1E,
+    0x85,0x42,0x04,0xD0,0x01,0x20,0x04,0x9A,0x98,0x40,0x10,0x43,0x04,0x90,0x03,0x98,
+    0xA4,0x1C,0x80,0x1C,0x5B,0x1C,0x5B,0xB2,0x03,0x90,0x01,0x98,0x83,0x42,0xB6,0xDB,
+    0xF0,0x6B,0x20,0x30,0x80,0x7C,0x00,0x28,0x29,0xD0,0x01,0x98,0x40,0x00,0x24,0x1A,
+    0x02,0x29,0x04,0xD9,0x60,0x46,0xFE,0xF7,0xFB,0xFF,0x00,0xB2,0x00,0xE0,0x00,0x20,
+    0x00,0x22,0x19,0xE0,0x16,0x49,0x00,0x28,0x61,0x5E,0x0B,0xDD,0x06,0x9B,0x99,0x42,
+    0x0F,0xDA,0x43,0x1C,0x99,0x42,0x01,0xDD,0x09,0x1A,0x09,0xE0,0x00,0x29,0x08,0xDD,
+    0x01,0x21,0x05,0xE0,0x81,0x42,0xF7,0xDB,0x00,0x29,0x02,0xDA,0x00,0x21,0xC9,0x43,
+    0x21,0x80,0xA4,0x1C,0x52,0x1C,0x52,0xB2,0x01,0x99,0x8A,0x42,0xE2,0xDB,0x6D,0x1C,
+    0x6D,0xB2,0x00,0x98,0x85,0x42,0x00,0xDA,0x79,0xE7,0x04,0x48,0x05,0x99,0x80,0x38,
+    0x01,0x62,0x04,0x99,0xC1,0x61,0x0B,0xB0,0xF0,0xBD,0x00,0x00,0xC4,0x00,0x00,0x20,
+    0x00,0x00,0x00,0x00,0xF1,0xB5,0x00,0x25,0x84,0xB0,0x2E,0x46,0x7A,0xE0,0x28,0x46,
+    0x14,0x22,0x50,0x43,0x3F,0x4A,0x07,0x46,0x84,0x18,0xE0,0x7C,0x00,0x09,0x6F,0xD0,
+    0x3D,0x48,0x40,0x68,0x42,0x6A,0x00,0x2A,0x06,0xD0,0x20,0x7C,0x01,0x09,0x00,0x07,
+    0x00,0x0F,0x90,0x47,0x00,0x28,0x27,0xD0,0x60,0x68,0x36,0x4A,0xA1,0x68,0x01,0x91,
+    0xD1,0x59,0x00,0x02,0x00,0x91,0xFE,0xF7,0xA3,0xFF,0x02,0x46,0x32,0x48,0x80,0x32,
+    0x47,0x68,0x38,0x8C,0x02,0x90,0x50,0x43,0xF9,0x7F,0xFE,0xF7,0x99,0xFF,0x01,0x99,
+    0x03,0x90,0x08,0x02,0x00,0x99,0xFE,0xF7,0x93,0xFF,0x02,0x46,0x78,0x8C,0x01,0x90,
+    0x80,0x32,0x50,0x43,0xB9,0x7F,0xFE,0xF7,0x8B,0xFF,0x03,0x99,0x00,0x12,0x09,0x12,
+    0x00,0x29,0x06,0xDA,0x00,0x21,0x08,0xE0,0xE0,0x7C,0x00,0x07,0x00,0x0F,0xE0,0x74,
+    0x36,0xE0,0x02,0x9A,0x8A,0x42,0x00,0xDA,0x11,0x46,0x00,0x28,0x01,0xDA,0x00,0x20,
+    0x03,0xE0,0x01,0x9A,0x82,0x42,0x00,0xDA,0x10,0x46,0x04,0x9B,0xF2,0x00,0x99,0x52,
+    0x04,0x99,0x76,0x1C,0x51,0x18,0x48,0x80,0x48,0x79,0x62,0x7C,0x00,0x09,0x12,0x07,
+    0x00,0x01,0x12,0x0F,0x10,0x43,0x48,0x71,0x62,0x7C,0x00,0x07,0x12,0x09,0x00,0x0F,
+    0x12,0x01,0x10,0x43,0x48,0x71,0x88,0x79,0xA2,0x7C,0x00,0x09,0x12,0x07,0x00,0x01,
+    0x12,0x0F,0x10,0x43,0x88,0x71,0xA2,0x7C,0x00,0x07,0x12,0x09,0x00,0x0F,0x12,0x01,
+    0x10,0x43,0x88,0x71,0x00,0x98,0xF6,0xB2,0x40,0x10,0x08,0x71,0x08,0x2E,0x05,0xD2,
+    0x6D,0x1C,0xED,0xB2,0x04,0x49,0x08,0x78,0x85,0x42,0x80,0xD3,0x30,0x46,0x05,0xB0,
+    0xF0,0xBD,0x00,0x00,0xE0,0x0A,0x00,0x20,0x30,0x00,0x00,0x20,0xF3,0xB5,0x85,0xB0,
+    0x05,0x20,0x00,0x90,0x31,0x48,0x01,0x90,0xC0,0x6B,0x40,0x30,0x00,0x78,0x80,0x1E,
+    0xC6,0xB2,0x3F,0x2E,0x00,0xD9,0x3F,0x26,0x00,0x20,0x80,0x25,0x2C,0x46,0x03,0x90,
+    0x20,0x46,0x01,0x27,0x03,0xE0,0x80,0x1B,0x7F,0x1C,0xC0,0xB2,0xFF,0xB2,0xB0,0x42,
+    0xF9,0xD8,0x3A,0x46,0x31,0x46,0x02,0x90,0x05,0xF0,0xA0,0xFB,0x06,0x98,0x80,0x47,
+    0x04,0x90,0x06,0x98,0x80,0x47,0x04,0x99,0x40,0x18,0x01,0x99,0x00,0x04,0xC9,0x6B,
+    0x40,0x0C,0x40,0x31,0xC9,0x88,0x81,0x42,0x01,0xD9,0xAC,0x43,0x01,0xE0,0x01,0x2D,
+    0x02,0xD0,0x00,0x2D,0x07,0xD0,0x08,0xE0,0x0A,0x46,0x14,0x32,0x82,0x42,0x04,0xD2,
+    0x64,0x1C,0xE4,0xB2,0x01,0xE0,0x01,0x22,0x03,0x92,0x6D,0x08,0x03,0x9A,0x2C,0x43,
+    0x00,0x2A,0xCD,0xD0,0x01,0x9A,0xD2,0x6B,0x40,0x32,0xD2,0x88,0x52,0x08,0x82,0x42,
+    0x02,0xD2,0x49,0x00,0x81,0x42,0x05,0xD8,0x00,0x99,0x49,0x1E,0x09,0x06,0x09,0x0E,
+    0x00,0x91,0xB9,0xD1,0x00,0x99,0x05,0x22,0x51,0x1A,0x05,0x9A,0x11,0x70,0x05,0x99,
+    0x4F,0x70,0x05,0x99,0x8E,0x70,0x05,0x9A,0x02,0x99,0xD1,0x70,0x05,0x99,0x08,0x71,
+    0x01,0x0A,0x05,0x98,0x41,0x71,0x07,0xB0,0xF0,0xBD,0x00,0x00,0xC4,0x00,0x00,0x20,
+    0x70,0xB5,0x15,0x4C,0xE0,0x7C,0xC0,0x07,0x24,0xD0,0x3C,0x20,0x05,0xF0,0x86,0xFB,
+    0x00,0x25,0xE5,0x75,0x02,0xF0,0xD4,0xF8,0x20,0x46,0x20,0x38,0x05,0x72,0x01,0x20,
+    0x05,0xF0,0xD0,0xF8,0x02,0x20,0x05,0xF0,0xAD,0xFA,0x02,0xF0,0x43,0xFF,0x0B,0x48,
+    0x81,0x7C,0x80,0x22,0x11,0x43,0x81,0x74,0x00,0xF0,0x12,0xF8,0x00,0x20,0x05,0xF0,
+    0xA1,0xFA,0x02,0x20,0x05,0xF0,0x9E,0xFA,0x00,0x21,0x02,0x20,0x05,0xF0,0xBC,0xF9,
+    0x02,0xF0,0x8C,0xF9,0x70,0xBD,0x00,0x00,0x64,0x00,0x00,0x20,0xE0,0x12,0x00,0x40,
+    0xF8,0xB5,0x25,0x48,0x24,0x4F,0xC0,0x6B,0x80,0x3F,0x23,0x4D,0x86,0x79,0x39,0x7A,
+    0xA0,0x35,0x34,0x46,0x01,0x29,0x38,0xD0,0x00,0x24,0xEC,0x74,0x1F,0x49,0x0A,0x7A,
+    0x02,0x23,0x1A,0x43,0x0A,0x72,0x1E,0x49,0x08,0x22,0xCA,0x80,0x20,0x30,0xC0,0x78,
+    0x40,0x1E,0xC0,0xB2,0x00,0x90,0x01,0x20,0x05,0xF0,0xAA,0xF9,0x19,0x49,0xAA,0x20,
+    0x88,0x80,0xEA,0x7C,0xF9,0x6D,0x01,0x20,0x88,0x54,0xFF,0x20,0x14,0x49,0x02,0x30,
+    0xC8,0x81,0x21,0x46,0x00,0x98,0x00,0xF0,0x27,0xF8,0x38,0x7A,0x01,0x28,0x0E,0xD0,
+    0x00,0x2C,0x17,0xD0,0x28,0x7C,0x00,0x19,0xC4,0xB2,0xB4,0x42,0x07,0xD0,0x28,0x7C,
+    0x01,0x19,0xB1,0x42,0x01,0xD9,0x30,0x1A,0xC4,0xB2,0xB4,0x42,0xDE,0xD3,0x07,0x49,
+    0x08,0x7A,0xFD,0x22,0x10,0x40,0x08,0x72,0xF8,0xBD,0x76,0x1C,0x29,0x7D,0xF6,0xB2,
+    0xE9,0x74,0xC3,0xE7,0x2C,0x7C,0xE8,0xE7,0xC4,0x00,0x00,0x20,0x00,0x03,0x00,0x40,
+    0x00,0x10,0x00,0x40,0x00,0x02,0x00,0x40,0xF3,0xB5,0x95,0xB0,0x72,0x48,0x13,0x90,
+    0xC0,0x6B,0x4C,0x21,0x09,0x5A,0x70,0x4D,0x0A,0x31,0x07,0x79,0x89,0xB2,0xA0,0x35,
+    0x10,0x91,0x29,0x7C,0x11,0x91,0x6C,0x49,0x80,0x39,0x0A,0x7A,0x01,0x2A,0x02,0xD1,
+    0xC7,0x79,0x01,0x20,0x11,0x90,0x00,0x20,0x0D,0x90,0x67,0x48,0xC0,0x30,0x0F,0x90,
+    0x0D,0x98,0xA9,0xE0,0x02,0x20,0x0E,0x90,0x00,0x20,0x0C,0x90,0x13,0x98,0xE9,0x7C,
+    0xC0,0x6B,0x00,0x79,0x48,0x43,0x60,0x49,0x80,0x39,0x89,0x6D,0x46,0x18,0x78,0x00,
+    0x12,0x90,0x01,0x20,0x0B,0x90,0x00,0x20,0x0A,0x90,0xFF,0x21,0x05,0xA8,0x12,0x9A,
+    0x01,0xF0,0x44,0xFF,0x3A,0x46,0x00,0x21,0x30,0x46,0x01,0xF0,0x3F,0xFF,0x00,0x24,
+    0x14,0x94,0x0F,0x99,0xEA,0x7C,0x09,0x68,0x52,0x00,0x8C,0x52,0x6D,0xE0,0xE8,0x7C,
+    0x00,0x21,0x05,0xF0,0x49,0xFA,0x50,0x48,0x80,0x38,0x00,0x7A,0x01,0x28,0x0B,0xD0,
+    0xE8,0x7C,0x05,0xF0,0x23,0xF8,0x00,0x20,0x05,0xF0,0x30,0xFE,0x00,0x21,0x68,0x46,
+    0x03,0xF0,0xA8,0xFC,0x00,0x20,0x2E,0xE0,0x00,0x21,0x01,0x20,0x16,0x9A,0x05,0xF0,
+    0xFD,0xFA,0xF0,0xE7,0x0B,0x99,0x00,0x29,0x0A,0xD0,0x42,0x00,0x69,0x46,0x8A,0x5A,
+    0x10,0x99,0x8A,0x42,0x04,0xD2,0x01,0x21,0x0A,0x9A,0x81,0x40,0x11,0x43,0x0A,0x91,
+    0x01,0x21,0x81,0x40,0x8C,0x46,0x21,0x42,0x13,0xD1,0x41,0x00,0x6A,0x46,0x53,0x5A,
+    0x10,0x9A,0x9A,0x1A,0x00,0xD5,0x52,0x42,0x05,0xAB,0x5B,0x5A,0x92,0xB2,0x93,0x42,
+    0x02,0xD3,0x05,0xAB,0x5A,0x52,0x04,0xE0,0x31,0x5C,0x49,0x1E,0x31,0x54,0x61,0x46,
+    0x0C,0x43,0x40,0x1C,0xC0,0xB2,0xB8,0x42,0xD4,0xD3,0x0B,0x98,0x00,0x28,0x07,0xD0,
+    0x00,0x20,0x0B,0x90,0x0F,0x99,0xEA,0x7C,0x09,0x68,0x0A,0x98,0x52,0x00,0x88,0x52,
+    0x01,0x21,0x0B,0x46,0xBB,0x40,0x5B,0x1E,0xA3,0x42,0x02,0xD1,0x01,0x20,0x0C,0x90,
+    0x16,0xE0,0x00,0x20,0x0B,0x46,0x0B,0xE0,0x19,0x46,0x81,0x40,0x21,0x42,0x05,0xD1,
+    0x31,0x5C,0x15,0x9A,0x91,0x42,0x0B,0xD2,0x49,0x1C,0x31,0x54,0x40,0x1C,0xC0,0xB2,
+    0xB8,0x42,0xF1,0xD3,0x14,0x98,0x00,0x28,0x02,0xD1,0x0C,0x98,0x00,0x28,0x8E,0xD0,
+    0x0E,0x98,0x40,0x1E,0x00,0x06,0x00,0x0E,0x0E,0x90,0x03,0xD0,0x0C,0x98,0x00,0x28,
+    0x00,0xD1,0x6E,0xE7,0x15,0x49,0xAA,0x20,0x88,0x80,0xE8,0x7C,0x40,0x1C,0xE8,0x74,
+    0x0D,0x98,0x40,0x1C,0xC0,0xB2,0x0D,0x90,0x11,0x99,0x88,0x42,0x00,0xD2,0x51,0xE7,
+    0x0D,0x48,0x80,0x38,0x00,0x7A,0x01,0x28,0x01,0xD0,0x00,0x24,0x0E,0xE0,0x01,0x21,
+    0x08,0x46,0x16,0x9A,0x05,0xF0,0x82,0xFA,0x0B,0xE0,0x16,0x98,0x01,0x21,0x00,0x19,
+    0xC2,0xB2,0x08,0x46,0x05,0xF0,0x7A,0xFA,0x64,0x1C,0xE4,0xB2,0x28,0x7C,0xA0,0x42,
+    0xF3,0xD8,0x00,0x20,0x17,0xB0,0xF0,0xBD,0xC4,0x00,0x00,0x20,0x00,0x02,0x00,0x40,
+    0xF0,0xB5,0x4A,0x4F,0x00,0x23,0x91,0xB0,0x3C,0x46,0xFB,0x71,0x20,0x34,0x20,0x7D,
+    0x21,0x7D,0x80,0x07,0xC0,0x0F,0x49,0x08,0x49,0x00,0x01,0x43,0x21,0x75,0x20,0x7D,
+    0xFD,0x21,0x08,0x40,0x20,0x75,0x19,0x20,0x6D,0x46,0xA8,0x74,0x03,0x20,0x28,0x75,
+    0x28,0x20,0xE8,0x74,0x0A,0x20,0xA8,0x75,0xE8,0x7E,0x18,0x22,0xC1,0x06,0xC9,0x0E,
+    0x14,0x20,0x11,0x43,0xE8,0x75,0x0F,0x22,0xAA,0x76,0xFB,0x22,0x11,0x40,0x04,0x22,
+    0x2A,0x76,0x3C,0x22,0x6A,0x76,0x02,0x22,0x11,0x43,0x49,0x08,0x28,0x82,0x49,0x00,
+    0xE9,0x76,0x01,0x21,0x69,0x75,0x32,0x4D,0x09,0x95,0x0A,0x35,0x0A,0x95,0x3E,0x78,
+    0x6D,0x46,0xAE,0x85,0x29,0x77,0x05,0x21,0x69,0x77,0xA8,0x77,0xEA,0x77,0x25,0x46,
+    0xE0,0x35,0xE8,0x7F,0xFF,0x28,0x01,0xD1,0x14,0x20,0xE8,0x77,0x08,0xAA,0x10,0x70,
+    0x28,0x48,0x0D,0x90,0x25,0x4E,0x28,0x48,0x80,0x36,0x0F,0x93,0x0E,0x90,0xF0,0x6B,
+    0x81,0x79,0x91,0x73,0x41,0x79,0xD1,0x73,0x01,0x46,0x40,0x31,0x0B,0x89,0x6A,0x46,
+    0x13,0x86,0x49,0x89,0x51,0x86,0x31,0x46,0x40,0x31,0x03,0x91,0x49,0x7E,0xBB,0x6F,
+    0x3A,0x6E,0x01,0x93,0x00,0x92,0x02,0x91,0x42,0x79,0x81,0x79,0x7B,0x6D,0xF8,0x6C,
+    0x00,0xF0,0x76,0xFD,0x03,0x99,0x48,0x7E,0x32,0x28,0x09,0xD9,0x69,0x46,0xC8,0x7E,
+    0xC0,0x06,0xC0,0x0E,0x20,0x30,0xC8,0x76,0x02,0x20,0x48,0x75,0x1E,0x20,0xC8,0x74,
+    0xF0,0x6B,0x31,0x69,0xC2,0x7A,0x70,0x69,0x10,0xAB,0x03,0x93,0x01,0x92,0x02,0x91,
+    0x00,0x90,0xAA,0x6B,0x04,0xAB,0x79,0x6D,0xF8,0x6C,0x00,0xF0,0x5F,0xFC,0xF8,0x71,
+    0x08,0xA9,0x09,0x78,0xE9,0x77,0x00,0x28,0x05,0xD0,0x20,0x7D,0x02,0x21,0x08,0x43,
+    0x20,0x75,0x11,0xB0,0xF0,0xBD,0x14,0x20,0xE8,0x77,0xFA,0xE7,0x44,0x00,0x00,0x20,
+    0xE0,0x7B,0x00,0x00,0xD1,0x19,0x00,0x00,0xF9,0x0C,0x00,0x00,0xF0,0xB5,0x6F,0x48,
+    0x87,0xB0,0xC0,0x6B,0xC1,0x78,0x03,0x91,0x01,0x79,0x04,0x91,0x3A,0x21,0x09,0x5C,
+    0x8E,0x46,0x3E,0x21,0x41,0x5E,0x06,0x91,0x68,0x49,0x82,0x7B,0x80,0x39,0x09,0x6A,
+    0x01,0x91,0x66,0x49,0x80,0x39,0x89,0x69,0x00,0x91,0x64,0x49,0x60,0x39,0x0C,0x46,
+    0xA0,0x34,0x05,0x91,0x00,0x2A,0x03,0xD0,0x00,0x9A,0x01,0x99,0x11,0x42,0x0C,0xD0,
+    0x00,0x21,0xA1,0x76,0x5D,0x49,0x04,0x9B,0x80,0x39,0x03,0x9A,0x49,0x6D,0x5A,0x43,
+    0x00,0x26,0x94,0x46,0x35,0x46,0x32,0x46,0x70,0xE0,0x58,0x4D,0x00,0x21,0x80,0x3D,
+    0x2D,0x6E,0x76,0x46,0x0A,0x46,0xAC,0x46,0x77,0x42,0x13,0x46,0x0D,0x46,0x02,0x97,
+    0x13,0xE0,0x66,0x46,0x00,0x27,0xF7,0x5F,0x77,0x45,0x01,0xDD,0x52,0x1C,0x08,0xE0,
+    0x02,0x9E,0xB7,0x42,0x05,0xDA,0x06,0x9E,0x5B,0x1C,0xB7,0x42,0x01,0xDA,0x49,0x1C,
+    0xC9,0xB2,0x66,0x46,0xB6,0x1C,0xB4,0x46,0x6D,0x1C,0x04,0x9F,0xBD,0x42,0xE8,0xD3,
+    0x46,0x4D,0x80,0x3D,0xAD,0x6F,0x00,0x26,0x11,0xE0,0x00,0x27,0xEF,0x5F,0x77,0x45,
+    0x01,0xDD,0x52,0x1C,0x08,0xE0,0x02,0x9E,0xB7,0x42,0x05,0xDA,0x06,0x9E,0x5B,0x1C,
+    0xB7,0x42,0x01,0xDA,0x49,0x1C,0xC9,0xB2,0xAD,0x1C,0x66,0x46,0x76,0x1C,0x03,0x9F,
+    0xB4,0x46,0xBE,0x42,0xE9,0xD3,0x39,0x4D,0x40,0x35,0xAD,0x7E,0x04,0x2A,0x01,0xD8,
+    0x00,0x2B,0x07,0xD0,0x6D,0x1C,0xEA,0xB2,0xA2,0x76,0x00,0x29,0x06,0xD0,0x12,0x1D,
+    0xA2,0x76,0x03,0xE0,0x00,0x2D,0xA5,0xD0,0x6D,0x1E,0xA5,0x76,0xA1,0x7E,0x32,0x29,
+    0xA0,0xD9,0x00,0x21,0xA1,0x76,0x2D,0x4A,0x01,0x21,0x80,0x3A,0x51,0x70,0x05,0x9A,
+    0xD2,0x7C,0x0A,0x43,0x05,0x99,0xCA,0x74,0x94,0xE7,0x00,0x23,0xCB,0x5E,0xC7,0x7D,
+    0xBB,0x42,0x04,0xDD,0x07,0x78,0xBB,0x42,0x01,0xDA,0x76,0x1C,0x04,0xE0,0x1B,0x27,
+    0xC7,0x57,0xBB,0x42,0x00,0xDA,0x6D,0x1C,0x89,0x1C,0x52,0x1C,0x63,0x46,0x62,0x45,
+    0xEB,0xD3,0x00,0x21,0x02,0x91,0x80,0x7B,0x14,0x27,0x00,0x28,0x0E,0xD0,0x05,0x2D,
+    0x03,0xD9,0x00,0x98,0x00,0x28,0x06,0xD0,0x01,0xE0,0x00,0x2D,0x06,0xD0,0x01,0x99,
+    0x00,0x98,0x08,0x42,0x02,0xD1,0x01,0x20,0x28,0x27,0x02,0x90,0x98,0x00,0x05,0x21,
+    0xFE,0xF7,0xFC,0xFB,0x11,0x49,0x40,0x31,0xC9,0x7E,0x86,0x42,0x0F,0xD2,0x85,0x42,
+    0x0D,0xD2,0x02,0x9A,0x01,0x2A,0x0A,0xD0,0x40,0x08,0xB0,0x42,0x05,0xD9,0xA8,0x42,
+    0x03,0xD9,0x00,0x29,0x01,0xD0,0x49,0x1E,0xE1,0x76,0x07,0xB0,0xF0,0xBD,0x49,0x1C,
+    0xC8,0xB2,0xE0,0x76,0xB8,0x42,0xF8,0xD3,0x05,0x98,0xC0,0x7C,0x01,0x21,0x08,0x43,
+    0x05,0x99,0xC8,0x74,0x00,0x20,0xE0,0x76,0xEF,0xE7,0x00,0x00,0xC4,0x00,0x00,0x20,
+    0xF0,0xB5,0x8C,0x46,0x4E,0x49,0x88,0xB0,0xC9,0x6B,0x07,0x91,0x8D,0x79,0x4C,0x79,
+    0x01,0x46,0x61,0x43,0x4A,0x00,0x61,0x46,0x4B,0x00,0x49,0x49,0xD2,0x18,0x80,0x39,
+    0x49,0x6D,0x52,0x18,0x61,0x00,0x8E,0x46,0x56,0x1A,0x31,0x46,0x20,0x39,0xCF,0x8B,
+    0x69,0x46,0x0F,0x80,0x37,0x88,0x4F,0x80,0x76,0x88,0x8E,0x80,0x11,0x46,0x20,0x39,
+    0xCE,0x8B,0x69,0x46,0xCE,0x80,0x16,0x88,0x0E,0x81,0x56,0x88,0x4E,0x81,0x71,0x46,
+    0x8F,0x18,0x05,0x97,0x20,0x3F,0xFE,0x8B,0x69,0x46,0x8E,0x81,0x71,0x46,0x52,0x5A,
+    0x69,0x46,0xCA,0x81,0x05,0x9F,0x7A,0x88,0x0A,0x82,0x35,0x49,0x80,0x39,0x0A,0x6E,
+    0x99,0x1E,0x56,0x5A,0x69,0x46,0x8E,0x82,0xD6,0x5E,0xCE,0x82,0x9B,0x1C,0xD2,0x5A,
+    0x0A,0x83,0x62,0x46,0x00,0x21,0x6B,0x46,0x00,0x2A,0x2F,0xD0,0x64,0x1E,0xA4,0x45,
+    0x03,0xD1,0x99,0x80,0x59,0x81,0x19,0x82,0x19,0x83,0x00,0x28,0x2B,0xD0,0x6A,0x1E,
+    0x90,0x42,0x02,0xD1,0x99,0x81,0xD9,0x81,0x19,0x82,0x25,0x49,0x80,0x39,0x09,0x78,
+    0x4C,0x08,0x00,0x22,0x11,0x46,0x4F,0x00,0xDF,0x5B,0x49,0x1C,0xBA,0x18,0xC9,0xB2,
+    0x12,0xB2,0x09,0x29,0xF7,0xD3,0xA2,0x42,0x0D,0xDB,0x07,0x99,0x89,0x7B,0x00,0x29,
+    0x2F,0xD0,0x1B,0x49,0x0A,0x22,0x40,0x31,0x4B,0x7E,0x80,0x31,0x00,0x2B,0x00,0xD0,
+    0x0A,0x79,0x96,0x42,0x0B,0xDA,0x00,0x20,0x08,0xB0,0xF0,0xBD,0x19,0x80,0xD9,0x80,
+    0x99,0x81,0x99,0x82,0xD1,0xE7,0x19,0x80,0x59,0x80,0x99,0x80,0xD5,0xE7,0x49,0x79,
+    0x00,0x29,0x16,0xD0,0x0E,0x49,0x40,0x31,0x49,0x69,0x00,0x28,0x07,0xD0,0x6D,0x1E,
+    0x42,0x1E,0xA8,0x42,0x0A,0xD1,0x8A,0x5C,0x00,0x2A,0x0E,0xD0,0x09,0xE0,0x08,0x78,
+    0x00,0x28,0x06,0xD1,0x48,0x78,0x00,0x28,0xDE,0xD0,0x02,0xE0,0x8A,0x5C,0x00,0x2A,
+    0x01,0xD0,0x01,0x20,0xD8,0xE7,0x42,0x1C,0xED,0xE7,0x08,0x5C,0xF3,0xE7,0x00,0x00,
+    0xC4,0x00,0x00,0x20,0x1C,0xB5,0x05,0xA1,0x03,0xC9,0x01,0x91,0x00,0x90,0x05,0x4B,
+    0x14,0x22,0x05,0x21,0x68,0x46,0x02,0xF0,0x6F,0xFF,0x1C,0xBD,0x08,0x13,0x21,0x28,
+    0x38,0x00,0x00,0x00,0x14,0x0A,0x00,0x20,0x03,0x48,0x01,0x21,0x01,0x70,0x00,0x21,
+    0x41,0x70,0x81,0x70,0x70,0x47,0x00,0x00,0xC0,0x0C,0x00,0x20,0xF0,0xB5,0x00,0x24,
+    0x01,0x27,0x08,0x4E,0x0A,0xE0,0x05,0x88,0x95,0x42,0x01,0xD3,0x9D,0x42,0x02,0xD9,
+    0xF5,0x7C,0x3D,0x43,0xF5,0x74,0x80,0x1C,0x64,0x1C,0xA4,0xB2,0x8C,0x42,0xF2,0xD3,
+    0xF0,0xBD,0x00,0x00,0x64,0x00,0x00,0x20,0xF7,0xB5,0x9E,0xB0,0x00,0x20,0x0C,0x90,
+    0xFE,0x48,0x14,0x46,0x40,0x68,0xC1,0x7F,0x06,0x91,0x80,0x7F,0x0E,0x90,0x11,0x46,
+    0x1E,0x98,0x02,0xF0,0x15,0xF8,0x00,0x28,0x01,0xD0,0x01,0x20,0x0C,0x90,0x60,0xB2,
+    0x60,0xE2,0xF7,0x49,0x40,0x00,0x08,0x5A,0x55,0xE2,0x00,0x21,0x04,0x91,0x05,0x91,
+    0xF4,0xA1,0x06,0xC9,0x07,0x91,0x08,0x92,0xF4,0xA1,0x06,0xC9,0x09,0x91,0x81,0x04,
+    0x46,0x06,0x4C,0x0E,0x06,0x98,0x0A,0x92,0x76,0x0E,0x60,0x43,0x80,0x19,0x1E,0x99,
+    0x40,0x00,0x45,0x18,0x1F,0x99,0x6A,0x46,0x40,0x18,0x00,0x21,0x11,0x90,0x41,0x5E,
+    0x0F,0x91,0x28,0x88,0x01,0x23,0x81,0x04,0x06,0x98,0x89,0x0C,0x40,0xB2,0x0D,0x91,
+    0x14,0x90,0x10,0x72,0x06,0x98,0x40,0x42,0x40,0xB2,0x13,0x90,0x50,0x72,0x93,0x72,
+    0x98,0x1E,0xD0,0x72,0x06,0x98,0x40,0x1E,0x10,0x73,0x06,0x9A,0xD7,0x43,0x6A,0x46,
+    0x57,0x73,0x06,0x9F,0x7F,0x1C,0x97,0x73,0x06,0x9A,0x9B,0x1A,0x6A,0x46,0xD3,0x73,
+    0x00,0x2C,0x51,0xD0,0x0E,0x9A,0x52,0x1E,0x94,0x42,0x04,0xD1,0x7F,0x22,0x6B,0x46,
+    0x1A,0x72,0x1A,0x73,0x9A,0x73,0x00,0x2E,0x4C,0xD0,0x86,0x42,0x04,0xD1,0x7F,0x20,
+    0x6A,0x46,0x90,0x72,0x90,0x73,0xD0,0x73,0x0C,0x98,0x00,0x28,0x48,0xD0,0xCB,0x48,
+    0x00,0x27,0x00,0x78,0x00,0x28,0x05,0xD0,0x01,0x20,0x80,0x03,0x08,0x18,0x80,0x0B,
+    0x80,0x03,0x28,0x80,0x00,0x20,0x02,0xA9,0x09,0x56,0x7F,0x29,0x27,0xD0,0x49,0x00,
+    0x4A,0x19,0x94,0x46,0x12,0x88,0x00,0x92,0x92,0x0B,0x02,0x2A,0x1F,0xD0,0x11,0x9A,
+    0x51,0x5E,0xBE,0x4A,0x52,0x68,0xD2,0x78,0x8A,0x42,0x18,0xDD,0x04,0x29,0x0E,0xDD,
+    0x07,0xAA,0x12,0x5C,0x19,0xAB,0x12,0x19,0xDA,0x55,0x09,0xAA,0x12,0x5C,0x1B,0xAB,
+    0x92,0x19,0xDA,0x55,0x7B,0x00,0x15,0xAA,0x7F,0x1C,0xD1,0x52,0xFF,0xB2,0x00,0x99,
+    0x8A,0x04,0x01,0x21,0x92,0x0C,0xC9,0x03,0x52,0x18,0x61,0x46,0x0A,0x80,0x40,0x1C,
+    0xC0,0xB2,0x08,0x28,0xCF,0xD3,0x4B,0xE0,0x7F,0x22,0x6B,0x46,0x5A,0x72,0x5A,0x73,
+    0xDA,0x73,0xB0,0xE7,0x7F,0x20,0x6A,0x46,0xD0,0x72,0x10,0x73,0x50,0x73,0xB3,0xE7,
+    0x00,0x27,0x10,0x97,0x10,0x99,0x02,0xA8,0x40,0x56,0x7F,0x28,0x32,0xD0,0x40,0x00,
+    0x41,0x19,0x12,0x91,0x11,0x99,0x0A,0x5E,0x29,0x88,0x88,0x0B,0x84,0x46,0x03,0x28,
+    0x04,0xD0,0x12,0x98,0x00,0x88,0x83,0x0B,0x01,0x2B,0x30,0xD0,0x12,0x98,0x00,0x88,
+    0x81,0x0B,0x02,0x29,0x1E,0xD0,0x99,0x49,0x49,0x68,0xC9,0x78,0x91,0x42,0x19,0xDD,
+    0x04,0x2A,0x10,0xDD,0x10,0x9B,0x07,0xA9,0xC9,0x5C,0x0B,0x19,0x19,0xA9,0xCB,0x55,
+    0x10,0x9B,0x09,0xA9,0xC9,0x5C,0x1B,0xAB,0x89,0x19,0xD9,0x55,0x7B,0x00,0x15,0xA9,
+    0x7F,0x1C,0xCA,0x52,0xFF,0xB2,0x81,0x04,0x01,0x20,0x89,0x0C,0xC0,0x03,0x09,0x18,
+    0x12,0x98,0x01,0x80,0x10,0x98,0x40,0x1C,0xC0,0xB2,0x10,0x90,0x08,0x28,0xC1,0xD3,
+    0x28,0x88,0x81,0x0B,0x7B,0xD0,0x80,0x0B,0x01,0x28,0x79,0xD0,0x3D,0xE1,0x8B,0x0B,
+    0x35,0xD0,0x62,0x46,0x01,0x2A,0xED,0xD1,0x89,0x04,0x82,0x04,0x89,0x0C,0x92,0x0C,
+    0x91,0x42,0xE7,0xD0,0x10,0x99,0x04,0x29,0xE4,0xD2,0xC0,0xB2,0x05,0x90,0x04,0x98,
+    0x7B,0x4A,0x14,0x21,0x48,0x43,0x3C,0x32,0x80,0x18,0x00,0x7C,0x14,0x23,0x01,0x09,
+    0x00,0x07,0x00,0x0F,0x71,0x1A,0x20,0x1A,0x49,0x43,0x40,0x43,0x08,0x18,0x01,0xB2,
+    0x05,0x98,0x58,0x43,0x80,0x18,0x00,0x7C,0x02,0x09,0x00,0x07,0x00,0x0F,0xB2,0x1A,
+    0x20,0x1A,0x52,0x43,0x40,0x43,0x10,0x18,0x00,0xB2,0x81,0x42,0x49,0xDA,0x03,0x20,
+    0x01,0x90,0x00,0x96,0x23,0x46,0x1F,0x9A,0x0F,0x99,0x04,0x98,0x5C,0xE0,0x67,0x4B,
+    0x5B,0x68,0x00,0x93,0xDB,0x7A,0x5B,0x09,0x2C,0xD1,0x10,0x9B,0x04,0x2B,0x29,0xD3,
+    0x0F,0x9B,0x93,0x42,0x00,0xDA,0x1A,0x46,0x94,0x46,0x00,0x9A,0x13,0x79,0x04,0x22,
+    0x9A,0x40,0x12,0xB2,0x01,0x92,0x10,0x9A,0xD2,0x07,0x01,0xD0,0x13,0x9A,0x00,0xE0,
+    0x14,0x9A,0x10,0x9B,0x06,0x2B,0x02,0xD2,0x00,0x23,0xDB,0x43,0x00,0xE0,0x01,0x23,
+    0x00,0x93,0x53,0x00,0x11,0x9A,0xD2,0x5E,0x63,0x46,0x9B,0x1A,0x01,0x9A,0x93,0x42,
+    0x08,0xDB,0x00,0x9A,0x53,0x00,0x11,0x9A,0xD2,0x5E,0x63,0x46,0x9B,0x1A,0x01,0x9A,
+    0x93,0x42,0x87,0xDA,0xC0,0xB2,0x04,0x90,0x89,0x04,0x01,0x20,0x89,0x0C,0x80,0x03,
+    0x08,0x18,0x81,0x0B,0x04,0x98,0x89,0x03,0x01,0x43,0x29,0x80,0x7A,0xE7,0x3F,0xE0,
+    0xA1,0xE0,0x81,0x42,0x06,0xDD,0x03,0x20,0x00,0x96,0x01,0x90,0x23,0x46,0x1F,0x9A,
+    0x0F,0x99,0x10,0xE0,0x03,0x20,0x00,0x96,0x01,0x90,0x0F,0x98,0x23,0x46,0x41,0x10,
+    0x1F,0x9A,0x04,0x98,0xFE,0xF7,0xCE,0xFA,0x03,0x20,0x00,0x96,0x01,0x90,0x0F,0x98,
+    0x1F,0x9A,0x23,0x46,0x41,0x10,0x05,0x98,0xFE,0xF7,0xC4,0xFA,0x12,0x98,0x32,0x46,
+    0x00,0x78,0x00,0x90,0x2B,0x78,0x21,0x46,0x1F,0x98,0xFE,0xF7,0x57,0xFB,0x00,0x28,
+    0x1F,0xDB,0x28,0x88,0x03,0x21,0x89,0x03,0x08,0x43,0x28,0x80,0x05,0x9A,0x04,0x99,
+    0x91,0x42,0x03,0xD2,0x80,0x0B,0x80,0x03,0xC9,0x01,0x03,0xE0,0x80,0x0B,0x80,0x03,
+    0xD1,0x01,0x04,0x9A,0x11,0x43,0x89,0x04,0x89,0x0C,0x08,0x43,0x28,0x80,0x39,0xE7,
+    0x26,0x4A,0x50,0x68,0x81,0x79,0x0A,0x29,0x00,0xD3,0x0A,0x21,0x10,0x78,0x81,0x42,
+    0x03,0xD8,0x00,0x20,0xC0,0x43,0x21,0xB0,0xF0,0xBD,0x14,0x21,0x04,0x90,0x48,0x43,
+    0x1F,0x49,0x22,0x07,0x3C,0x31,0x40,0x18,0x41,0x7C,0x12,0x0E,0x09,0x07,0x09,0x0F,
+    0x11,0x43,0x0A,0x09,0x09,0x09,0x09,0x01,0x11,0x43,0x41,0x74,0x02,0x7C,0x09,0x07,
+    0x12,0x09,0x09,0x0F,0x12,0x01,0x0A,0x43,0x02,0x74,0x81,0x7C,0x32,0x07,0x09,0x07,
+    0x09,0x0F,0x12,0x0E,0x11,0x43,0x0A,0x09,0x09,0x09,0x09,0x01,0x11,0x43,0x81,0x74,
+    0x02,0x7C,0x09,0x01,0x12,0x07,0x12,0x0F,0x0A,0x43,0x02,0x74,0x00,0x21,0x01,0x60,
+    0x41,0x60,0x81,0x60,0x01,0x21,0xC1,0x81,0x0F,0x9A,0x82,0x81,0x28,0x88,0x23,0x46,
+    0x82,0x04,0x92,0x0C,0x88,0x03,0x10,0x18,0x82,0x0B,0x04,0x98,0x92,0x03,0x02,0x43,
+    0x2A,0x80,0x01,0x91,0x00,0x96,0x1F,0x9A,0x0F,0x99,0x0B,0xE0,0x30,0x00,0x00,0x20,
+    0xA4,0x0A,0x00,0x20,0x01,0xFF,0x00,0x00,0x01,0xFF,0x01,0xFF,0x00,0x00,0x01,0xFF,
+    0xFF,0xFF,0x01,0x01,0x04,0x98,0xFE,0xF7,0x45,0xFA,0x35,0x48,0x34,0x49,0x00,0x78,
+    0x40,0x1C,0x08,0x70,0x21,0xE0,0x04,0x98,0x14,0x21,0x48,0x43,0x31,0x49,0x40,0x18,
+    0x0C,0x21,0x10,0x90,0x41,0x5E,0x0F,0x98,0x81,0x42,0x08,0xDA,0x20,0x07,0x00,0x0F,
+    0x31,0x01,0x08,0x43,0x10,0x99,0x08,0x74,0x10,0x99,0x0F,0x98,0x88,0x81,0x01,0x20,
+    0x01,0x90,0x00,0x96,0x23,0x46,0x1F,0x9A,0x0F,0x99,0x04,0x98,0xFE,0xF7,0x22,0xFA,
+    0x10,0x98,0x10,0x99,0xC0,0x89,0x40,0x1C,0xC8,0x81,0x00,0x24,0x30,0xE0,0x19,0xA8,
+    0x00,0x57,0x0F,0x90,0x62,0x00,0x15,0xA9,0x89,0x5E,0x2A,0x88,0x1B,0xA8,0x00,0x57,
+    0x92,0x0B,0x03,0x2A,0x02,0xD0,0x01,0x2A,0x16,0xD0,0x1F,0xE0,0x49,0x10,0xC6,0xB2,
+    0x10,0x91,0x00,0x96,0x02,0x21,0x0F,0x98,0x01,0x91,0xC3,0xB2,0x1F,0x9A,0x10,0x99,
+    0x04,0x98,0xFE,0xF7,0xFF,0xF9,0x02,0x20,0x01,0x90,0x00,0x96,0x0F,0x98,0x1F,0x9A,
+    0xC3,0xB2,0x10,0x99,0x05,0x98,0x07,0xE0,0xC0,0xB2,0x00,0x90,0x0F,0x98,0x02,0x22,
+    0x01,0x92,0xC3,0xB2,0x1F,0x9A,0x04,0x98,0xFE,0xF7,0xEC,0xF9,0x64,0x1C,0xE4,0xB2,
+    0xBC,0x42,0xCC,0xD3,0x0D,0x98,0x08,0x49,0x88,0x42,0x00,0xD0,0xA5,0xE5,0x0B,0x98,
+    0x40,0x1E,0x40,0xB2,0x0B,0x90,0x00,0x28,0x00,0xDB,0x9A,0xE5,0x00,0x20,0x42,0xE7,
+    0x30,0x00,0x00,0x20,0xE0,0x0A,0x00,0x20,0xFF,0x3F,0x00,0x00,0x06,0x4A,0x10,0xB5,
+    0x80,0x32,0xD3,0x6B,0x04,0x49,0xDA,0x78,0x1B,0x79,0x48,0x6D,0x09,0x6D,0x5A,0x43,
+    0x01,0xF0,0xA4,0xF9,0x10,0xBD,0x00,0x00,0x44,0x00,0x00,0x20,0xFF,0xB5,0x81,0xB0,
+    0x20,0x4D,0x06,0x46,0x0D,0x9C,0x00,0x20,0x6B,0x60,0x17,0x46,0x20,0x70,0x01,0xF0,
+    0x3B,0xFA,0x3A,0x46,0x30,0x46,0x02,0x99,0x02,0xF0,0x28,0xFC,0x02,0x46,0x30,0x46,
+    0x02,0x99,0xFF,0xF7,0x59,0xFD,0x00,0x28,0x01,0xDA,0x01,0x20,0x19,0xE0,0x28,0x78,
+    0x00,0x28,0x04,0xD0,0x68,0x68,0xC0,0x7A,0x41,0x09,0x02,0xD0,0x06,0xE0,0x02,0x20,
+    0x0F,0xE0,0x80,0x07,0x02,0xD5,0x02,0x98,0xFE,0xF7,0x5A,0xFE,0x68,0x68,0xC0,0x7A,
+    0xC0,0x07,0x0A,0xD0,0x30,0x46,0x02,0x99,0x01,0xF0,0x84,0xFC,0x00,0x28,0x04,0xD0,
+    0x03,0x20,0x20,0x70,0x00,0x20,0x05,0xB0,0xF0,0xBD,0x30,0x46,0x0B,0x9B,0x0A,0x9A,
+    0x02,0x99,0x01,0xF0,0x97,0xFD,0x02,0x98,0x02,0xF0,0x22,0xF8,0x0C,0x98,0xFF,0xF7,
+    0x71,0xF8,0xF0,0xE7,0x30,0x00,0x00,0x20,0xFF,0xB5,0xD3,0xB0,0x00,0x20,0x48,0xA9,
+    0x08,0x77,0x34,0x48,0x1D,0x46,0x02,0x60,0x17,0x78,0x0A,0x2F,0x00,0xD3,0x0A,0x27,
+    0x00,0x24,0x11,0xE0,0x38,0x20,0x26,0x46,0x46,0x43,0x70,0x19,0x81,0x78,0x00,0x29,
+    0x08,0xD1,0xA9,0x57,0x49,0x1C,0x05,0xD0,0x38,0x21,0xFE,0xF7,0x0B,0xF8,0x00,0x20,
+    0xC0,0x43,0xA8,0x55,0x64,0x1C,0xE4,0xB2,0xBC,0x42,0xEB,0xD3,0xFF,0x22,0x0C,0x21,
+    0x4C,0xA8,0xFD,0xF7,0xDA,0xFF,0xFF,0x22,0x0A,0x21,0x50,0xA8,0xFD,0xF7,0xD5,0xFF,
+    0x20,0x48,0x4F,0xA9,0x00,0x68,0x50,0xAA,0xC0,0x89,0x03,0x90,0x00,0x92,0x02,0x91,
+    0x01,0x97,0x29,0x46,0x04,0xA8,0x54,0x9B,0x53,0x9A,0xFE,0xF7,0x7F,0xFC,0x48,0xA9,
+    0x0B,0x7F,0x00,0x2B,0x0F,0xD0,0x54,0x99,0x00,0x29,0x0C,0xD0,0x01,0x2B,0x01,0xD1,
+    0x01,0x29,0x1E,0xD0,0x00,0x22,0xD2,0x43,0x01,0x92,0x00,0x91,0x02,0x46,0x4C,0xA9,
+    0x04,0xA8,0x00,0xF0,0x23,0xF8,0x4C,0xA8,0x00,0x90,0x50,0xAB,0x01,0x97,0x28,0x46,
+    0x54,0x9A,0x53,0x99,0x05,0xF0,0x80,0xF9,0x28,0x46,0x00,0xF0,0x01,0xFB,0x39,0x46,
+    0x28,0x46,0x04,0xF0,0x5D,0xFB,0x39,0x46,0x28,0x46,0x02,0xF0,0xD1,0xFD,0x57,0xB0,
+    0xF0,0xBD,0x68,0x46,0x00,0x8A,0x04,0x49,0x88,0x42,0xE4,0xD0,0x00,0x20,0x48,0xA9,
+    0x08,0x74,0xE0,0xE7,0x38,0x00,0x00,0x20,0xFF,0x7F,0x00,0x00,0xFF,0xB5,0x0E,0x46,
+    0x04,0x46,0x15,0x46,0x00,0x20,0x11,0x46,0x9A,0xB0,0x69,0x43,0x8C,0x46,0x23,0x9F,
+    0x05,0xE0,0x41,0x00,0x63,0x5A,0x18,0x4A,0xD2,0x1A,0x62,0x52,0x40,0x1C,0x84,0x45,
+    0xF7,0xDC,0x16,0x48,0x0F,0xA9,0x05,0x70,0x44,0x60,0x0A,0xA8,0x01,0x91,0x00,0x90,
+    0x05,0xAB,0x17,0xAA,0x14,0xA9,0x02,0xA8,0x04,0xF0,0xB6,0xFD,0x00,0x20,0xFF,0x21,
+    0x01,0xE0,0x31,0x54,0x40,0x1C,0xB8,0x42,0xFB,0xDB,0x00,0x20,0x02,0xAB,0x0E,0xE0,
+    0x19,0x56,0x00,0x29,0x0A,0xDB,0x1D,0x9A,0x91,0x42,0x07,0xDA,0x69,0x43,0x09,0x18,
+    0x49,0x00,0x61,0x5A,0x00,0x29,0x01,0xD0,0x19,0x5C,0x31,0x54,0x40,0x1C,0xB8,0x42,
+    0xEE,0xDB,0x1E,0xB0,0xF0,0xBD,0x00,0x00,0xFF,0x7F,0x00,0x00,0x3C,0x00,0x00,0x20,
+    0xF0,0xB5,0x91,0xB0,0x0A,0x91,0x6B,0x49,0x17,0x9D,0xC9,0x6B,0x16,0x9C,0x89,0x7B,
+    0x17,0x46,0x00,0x29,0x7E,0xD0,0x0A,0x9A,0x1E,0x46,0x7A,0x43,0x0B,0x90,0x19,0x46,
+    0x0F,0x92,0x01,0xF0,0x93,0xF8,0x00,0x20,0x0A,0xE0,0x41,0x00,0x6A,0x5E,0x02,0x2A,
+    0x01,0xDA,0x02,0x22,0x00,0xE0,0x6A,0x5A,0x05,0xAB,0x40,0x1C,0x5A,0x52,0xC0,0xB2,
+    0x0A,0x99,0x88,0x42,0xF1,0xD3,0x00,0x20,0x02,0x22,0x0B,0xE0,0x41,0x00,0x63,0x5E,
+    0x02,0x2B,0x02,0xDA,0x6B,0x46,0x5A,0x52,0x02,0xE0,0x63,0x5A,0x6D,0x46,0x6B,0x52,
+    0x40,0x1C,0xC0,0xB2,0xB8,0x42,0xF1,0xD3,0x00,0x25,0x97,0xE0,0x18,0x98,0x32,0x28,
+    0x04,0xD2,0x69,0x00,0x05,0xA8,0x40,0x5A,0x14,0x28,0x7D,0xD9,0x28,0x46,0x78,0x43,
+    0x00,0xB2,0x00,0x24,0x09,0x90,0x84,0xE0,0x00,0x20,0x18,0x9A,0x01,0x46,0x84,0x46,
+    0x0D,0x90,0x32,0x2A,0x0A,0xD2,0x63,0x00,0x6A,0x46,0xD2,0x5A,0x14,0x2A,0x76,0xD9,
+    0x09,0x9A,0x12,0x19,0x52,0x00,0xB2,0x5E,0x1E,0x2A,0x70,0xDB,0x6A,0x1E,0x09,0xD4,
+    0x09,0x98,0x6A,0x00,0xC0,0x1B,0x00,0x19,0x40,0x00,0x05,0xA9,0x51,0x18,0x20,0x39,
+    0x30,0x5E,0xC9,0x8B,0x09,0x9A,0x6B,0x00,0x12,0x19,0x52,0x00,0x0C,0x92,0xB2,0x5E,
+    0x10,0x92,0x10,0x18,0x05,0xAA,0xD2,0x5A,0x0E,0x92,0x51,0x18,0x8E,0x46,0x0A,0x9A,
+    0x69,0x1C,0x91,0x42,0x0B,0xD2,0x09,0x99,0xC9,0x19,0x09,0x19,0x49,0x00,0x71,0x5E,
+    0x08,0x18,0x05,0xA9,0x59,0x18,0x4A,0x88,0x71,0x46,0x51,0x18,0x8E,0x46,0x61,0x1E,
+    0x0D,0xD4,0x0C,0x99,0x8A,0x19,0x20,0x3A,0x1E,0x21,0x51,0x5E,0x0D,0x91,0x62,0x00,
+    0x69,0x46,0x00,0xE0,0x4B,0xE0,0x51,0x18,0x20,0x39,0xC9,0x8B,0x8C,0x46,0x0D,0x9A,
+    0x10,0x99,0x6B,0x46,0x89,0x18,0x62,0x00,0x0D,0x92,0x9A,0x5A,0x10,0x92,0x94,0x44,
+    0x62,0x1C,0xBA,0x42,0x09,0xD2,0x0C,0x9A,0x02,0x23,0x92,0x19,0xD3,0x5E,0x0D,0x9A,
+    0x59,0x18,0x6B,0x46,0xD2,0x18,0x52,0x88,0x94,0x44,0x00,0x28,0x00,0xDA,0x00,0x20,
+    0x00,0x29,0x00,0xDA,0x00,0x21,0x62,0x46,0x93,0x08,0x72,0x46,0x92,0x08,0x94,0x46,
+    0x0D,0x93,0x0D,0x9A,0x0E,0x9B,0x50,0x43,0x43,0x43,0x62,0x46,0x10,0x98,0x51,0x43,
+    0x48,0x43,0x18,0x18,0x40,0x08,0x01,0xE0,0x0E,0xE0,0x08,0xE0,0x0D,0x9B,0x5A,0x43,
+    0x91,0x00,0xFD,0xF7,0xB3,0xFE,0x0C,0x9A,0x0B,0x99,0x40,0x1C,0x88,0x52,0x64,0x1C,
+    0xE4,0xB2,0xBC,0x42,0x00,0xD2,0x77,0xE7,0x6D,0x1C,0xED,0xB2,0x0A,0x98,0x85,0x42,
+    0x00,0xD2,0x63,0xE7,0x30,0x46,0x0F,0x9A,0x0B,0x99,0x00,0xF0,0xCF,0xFF,0x11,0xB0,
+    0xF0,0xBD,0x00,0x00,0xC4,0x00,0x00,0x20,0x10,0xB5,0x0A,0x48,0x81,0x78,0x0A,0x48,
+    0x00,0x29,0x81,0x88,0x08,0xD0,0xFF,0x22,0x12,0x01,0x11,0x43,0x81,0x80,0x05,0x48,
+    0x01,0x21,0x40,0x38,0x01,0x70,0x10,0xBD,0x11,0x22,0x11,0x43,0x81,0x80,0x02,0xF0,
+    0xD1,0xFE,0x10,0xBD,0x64,0x01,0x00,0x20,0x00,0x10,0x00,0x40,0xF7,0xB5,0x06,0x46,
+    0x1A,0x48,0x82,0xB0,0xC1,0x8A,0x01,0x91,0xFF,0x21,0xC1,0x82,0x18,0x48,0x00,0x90,
+    0x1D,0xE0,0x04,0x98,0x80,0x47,0x30,0x70,0x00,0x0A,0x16,0x4D,0x70,0x70,0x28,0x7C,
+    0x13,0x4C,0x01,0x27,0x60,0x34,0xE1,0x6B,0x4A,0x7C,0x39,0x46,0x91,0x40,0x88,0x43,
+    0x28,0x74,0x28,0x21,0x03,0x98,0x00,0xF0,0x2D,0xF8,0x28,0x7C,0xE1,0x6B,0x49,0x7C,
+    0x8F,0x40,0x38,0x43,0x28,0x74,0x0C,0x49,0xA0,0x20,0x88,0x80,0x00,0x98,0x40,0x7D,
+    0x0A,0x28,0x05,0xD1,0x06,0x48,0xA0,0x30,0x40,0x68,0x80,0x78,0x0A,0x28,0xD8,0xD0,
+    0x02,0x49,0x01,0x98,0xC8,0x82,0x05,0xB0,0xF0,0xBD,0x00,0x00,0x00,0x10,0x00,0x40,
+    0x64,0x00,0x00,0x20,0x00,0x03,0x00,0x40,0x00,0x02,0x00,0x40,0x04,0x48,0x02,0x69,
+    0x04,0x21,0x0A,0x43,0x02,0x61,0x30,0xBF,0x02,0x69,0x8A,0x43,0x02,0x61,0x70,0x47,
+    0x00,0xED,0x00,0xE0,0x1C,0xB5,0x00,0x23,0x6A,0x46,0x13,0x80,0x0D,0xE0,0x6A,0x46,
+    0x93,0x80,0x02,0xE0,0xA2,0x88,0x52,0x1C,0xA2,0x80,0x6A,0x46,0x92,0x88,0x6C,0x46,
+    0x8A,0x42,0xF7,0xD3,0x22,0x88,0x52,0x1C,0x22,0x80,0x6A,0x46,0x12,0x88,0x82,0x42,
+    0xED,0xD3,0x1C,0xBD,0xF0,0xB5,0x2E,0x4D,0xFF,0x27,0x68,0x7A,0x2D,0x4C,0x85,0xB0,
+    0x01,0x28,0x0E,0xD0,0xFF,0xF7,0xF0,0xFA,0xE0,0x79,0xFF,0x28,0x05,0xD0,0x00,0x28,
+    0x49,0xD0,0x40,0x1E,0x38,0x40,0xE0,0x71,0x45,0xD0,0x68,0x7A,0x00,0x28,0x45,0xD0,
+    0x3D,0xE0,0x23,0x4B,0x01,0x22,0x00,0x20,0x80,0x33,0xDD,0x6B,0x59,0x69,0xEE,0x7A,
+    0x0A,0xE0,0x38,0x23,0x43,0x43,0xCB,0x56,0x00,0x2B,0x03,0xDD,0x38,0x22,0x42,0x43,
+    0x8A,0x5C,0x03,0xE0,0x40,0x1C,0xC0,0xB2,0x86,0x42,0xF2,0xD8,0x01,0x2A,0x06,0xD0,
+    0x02,0x2A,0x04,0xD0,0x00,0xF0,0x94,0xFC,0xF1,0x28,0x15,0xD0,0x21,0xE0,0x00,0x22,
+    0x00,0x92,0x01,0x92,0x02,0x92,0x38,0x22,0x50,0x43,0x20,0x30,0x08,0x18,0x01,0x88,
+    0x6A,0x46,0x91,0x81,0x40,0x88,0xD0,0x81,0x40,0x35,0x6B,0x89,0x2A,0x89,0x14,0x21,
+    0x03,0x98,0x04,0xF0,0x99,0xFE,0x0A,0xE0,0xE1,0x79,0xFF,0x29,0x05,0xD0,0x00,0x29,
+    0x07,0xD0,0xE7,0x71,0xF1,0x20,0x05,0xB0,0xF0,0xBD,0x0A,0x20,0xE0,0x71,0x00,0x20,
+    0xF9,0xE7,0xE7,0x71,0xF7,0xE7,0xE7,0x71,0xF0,0x20,0xF4,0xE7,0xFF,0x20,0xF2,0xE7,
+    0x44,0x00,0x00,0x20,0x84,0x01,0x00,0x20,0xF0,0xB5,0x29,0x4E,0x30,0x46,0x80,0x30,
+    0x32,0x46,0xC0,0x6B,0x14,0x32,0x3C,0xCA,0x84,0x46,0x81,0x7B,0x30,0x46,0x20,0x30,
+    0x00,0x29,0x02,0xD0,0x11,0x46,0x19,0x43,0x03,0xD1,0x00,0x2C,0x01,0xD1,0x00,0x2D,
+    0x02,0xD0,0x03,0x21,0x01,0x71,0x02,0xE0,0x01,0x79,0x00,0x29,0x02,0xD0,0xC9,0xB2,
+    0x49,0x1E,0x01,0x71,0x61,0x46,0x89,0x7B,0x00,0x29,0x2F,0xD0,0x00,0x21,0x1F,0x46,
+    0x2F,0x42,0x15,0xD1,0x2A,0x42,0x01,0xD0,0x01,0x21,0x0B,0xE0,0x15,0x46,0x25,0x42,
+    0x01,0xD0,0x02,0x21,0x06,0xE0,0x00,0x2A,0x01,0xD0,0x0F,0x21,0x02,0xE0,0x23,0x42,
+    0x06,0xD0,0x04,0x21,0x82,0x7D,0x01,0x23,0x8A,0x42,0x04,0xD0,0xF3,0x84,0x07,0xE0,
+    0x00,0x22,0xF2,0x84,0x11,0xE0,0xF2,0x8C,0x19,0x24,0x64,0x01,0xA2,0x42,0x0C,0xD2,
+    0xF2,0x8C,0x64,0x46,0x52,0x1C,0x92,0xB2,0xF2,0x84,0x24,0x7E,0xA2,0x42,0x04,0xD9,
+    0xC2,0x7C,0x1A,0x43,0xC2,0x74,0x73,0x70,0xEA,0xE7,0x81,0x75,0xF0,0xBD,0x00,0x00,
+    0x44,0x00,0x00,0x20,0x10,0xB5,0x04,0x48,0xC0,0x6B,0x20,0x30,0x40,0x7E,0x00,0x28,
+    0x01,0xD0,0x02,0xF0,0x97,0xF9,0x10,0xBD,0xC4,0x00,0x00,0x20,0x70,0xB5,0x85,0x1A,
+    0x00,0x2D,0x00,0xDC,0x15,0x1A,0xC8,0x1A,0x00,0x28,0x00,0xDC,0x58,0x1A,0x85,0x42,
+    0x02,0xDA,0x45,0x40,0x68,0x40,0x45,0x40,0x01,0x2D,0x03,0xDD,0x40,0x43,0x06,0x46,
+    0xA8,0x42,0x01,0xDC,0xA8,0xB2,0x70,0xBD,0x29,0x46,0xFD,0xF7,0x49,0xFD,0x40,0x10,
+    0x44,0x19,0x6D,0x43,0xAE,0x19,0x25,0x46,0x29,0x46,0x30,0x46,0xFD,0xF7,0x40,0xFD,
+    0x01,0x19,0x48,0x10,0xC9,0x07,0xC9,0x0F,0x44,0x18,0xAC,0x42,0x01,0xDD,0x60,0x1B,
+    0x00,0xE0,0x28,0x1B,0x20,0x28,0xEE,0xDC,0xA0,0xB2,0x70,0xBD,0xF0,0xB5,0x08,0x4C,
+    0x05,0x9F,0xA5,0x88,0x10,0x26,0x35,0x43,0xA5,0x80,0xE0,0x80,0x21,0x81,0x62,0x81,
+    0xA3,0x81,0x67,0x80,0x06,0x98,0x20,0x80,0xA0,0x88,0xC0,0x06,0xFC,0xD5,0xF0,0xBD,
+    0x00,0x11,0x00,0x40,0x06,0x4B,0xD8,0x80,0x59,0x81,0x98,0x88,0x10,0x21,0x08,0x43,
+    0x98,0x80,0x5A,0x80,0x21,0x20,0x18,0x80,0x98,0x88,0xC0,0x06,0xFC,0xD5,0x70,0x47,
+    0x00,0x11,0x00,0x40,0x10,0xB5,0x16,0x48,0x16,0x4C,0xC1,0x6B,0x11,0x23,0x88,0x7A,
+    0x63,0x74,0x20,0x31,0x4A,0x7A,0x12,0x01,0xD2,0x1C,0x22,0x74,0x12,0x4A,0x02,0x28,
+    0x04,0xD9,0x04,0x01,0x80,0x1E,0x04,0x43,0x54,0x72,0x01,0xE0,0x20,0x20,0x50,0x72,
+    0xC8,0x7D,0x89,0x7D,0x80,0x00,0x09,0x01,0x08,0x43,0x41,0x21,0x08,0x43,0x10,0x72,
+    0x0A,0x48,0x83,0x80,0x01,0x80,0x00,0x21,0x01,0x20,0x03,0xF0,0xFD,0xFF,0x02,0x20,
+    0x04,0xF0,0xD8,0xF8,0x02,0x48,0x00,0x21,0x60,0x38,0xC1,0x75,0x10,0xBD,0x00,0x00,
+    0xC4,0x00,0x00,0x20,0xE0,0x12,0x00,0x40,0x00,0x03,0x00,0x40,0x00,0x10,0x00,0x40,
+    0xF1,0xB5,0x85,0xB0,0x00,0x27,0x78,0x1C,0xC6,0xB2,0x04,0x90,0x32,0xE0,0x38,0x20,
+    0x05,0x99,0x78,0x43,0x45,0x18,0x68,0x79,0x01,0x28,0x29,0xD9,0x38,0x20,0x70,0x43,
+    0x44,0x18,0x60,0x79,0x01,0x28,0x23,0xD9,0xA1,0x89,0x68,0x46,0x01,0x80,0xE1,0x89,
+    0x41,0x80,0x21,0x8C,0x81,0x80,0x61,0x8C,0xC1,0x80,0xA9,0x89,0x01,0x81,0xE9,0x89,
+    0x41,0x81,0x29,0x8C,0x81,0x81,0x69,0x8C,0xC1,0x81,0x00,0x9B,0x01,0x9A,0x02,0x99,
+    0x03,0x98,0x01,0xF0,0xCD,0xFB,0x00,0x28,0x0A,0xD0,0xA8,0x89,0x6A,0x46,0x10,0x80,
+    0xE9,0x89,0x51,0x80,0xA2,0x89,0xAA,0x81,0xE2,0x89,0xEA,0x81,0xA0,0x81,0xE1,0x81,
+    0x76,0x1C,0xF6,0xB2,0x06,0x2E,0xCA,0xD3,0x04,0x98,0xC7,0xB2,0x05,0x2F,0xC2,0xD3,
+    0x06,0xB0,0xF0,0xBD,0xFF,0xB5,0x07,0x46,0x3D,0x48,0x85,0xB0,0x81,0x6A,0x01,0x91,
+    0x01,0x46,0x80,0x39,0x09,0x7A,0x01,0x29,0x01,0xD1,0x40,0x6B,0x01,0x90,0x39,0x49,
+    0x00,0x20,0xC8,0x81,0x65,0xE0,0x00,0x20,0x04,0x90,0x02,0x98,0x04,0x25,0x80,0x00,
+    0x00,0x90,0x02,0x98,0x01,0x24,0x46,0x00,0x01,0x9A,0x00,0x99,0x03,0x94,0x80,0x20,
+    0x51,0x58,0x20,0x43,0x20,0x39,0xC8,0x77,0x01,0x22,0x80,0x21,0x38,0x46,0x02,0xF0,
+    0xDF,0xFE,0xB9,0x5F,0x19,0x20,0x40,0x01,0x81,0x42,0x09,0xDA,0xAC,0x42,0x0F,0xDD,
+    0x00,0x2D,0x00,0xDD,0x6D,0x10,0x00,0x2D,0x0A,0xD0,0x60,0x1B,0xC4,0xB2,0xE3,0xE7,
+    0x60,0x19,0xC4,0xB2,0x0E,0x98,0x84,0x42,0xDE,0xD3,0x04,0x98,0x00,0x28,0x22,0xD0,
+    0x03,0x98,0x80,0x21,0x08,0x43,0x01,0x9A,0x00,0x99,0x51,0x58,0x20,0x39,0xC8,0x77,
+    0x01,0x22,0x80,0x21,0x38,0x46,0x02,0xF0,0xBB,0xFE,0xBD,0x5F,0x01,0x22,0x80,0x21,
+    0x38,0x46,0x02,0xF0,0xB5,0xFE,0xBC,0x5F,0x01,0x22,0x80,0x21,0x38,0x46,0x02,0xF0,
+    0xAF,0xFE,0xAC,0x42,0x02,0xDD,0x28,0x46,0x25,0x46,0x04,0x46,0xB8,0x5F,0xA0,0x42,
+    0x05,0xDC,0xBC,0x53,0x06,0xE0,0x01,0x20,0x0E,0x9C,0x04,0x90,0xB4,0xE7,0xA8,0x42,
+    0x00,0xDB,0xBD,0x53,0x03,0x98,0x28,0x21,0x80,0x06,0x80,0x0E,0x48,0x43,0xB9,0x5B,
+    0x40,0x18,0x06,0x99,0x08,0x80,0x06,0x98,0x80,0x1C,0x06,0x90,0x02,0x98,0x40,0x1C,
+    0xC0,0xB2,0x02,0x90,0x07,0x99,0x88,0x42,0x95,0xD3,0x09,0xB0,0xF0,0xBD,0x00,0x00,
+    0xC4,0x00,0x00,0x20,0x00,0x10,0x00,0x40,0x14,0x49,0xCA,0x6B,0x40,0x32,0x12,0x7B,
+    0x02,0x70,0xCA,0x6B,0x20,0x32,0x52,0x7A,0x42,0x70,0xC9,0x6B,0x89,0x7A,0x81,0x70,
+    0x0F,0x49,0x8A,0x7C,0x92,0x06,0x92,0x0E,0xC2,0x70,0x89,0x7C,0x00,0x21,0x01,0x71,
+    0x0C,0x49,0xCA,0x88,0x52,0x05,0x52,0x0E,0x42,0x71,0xCA,0x88,0x12,0x07,0x12,0x0F,
+    0x82,0x71,0xCA,0x89,0xC2,0x71,0x4A,0x89,0x52,0x06,0x52,0x0E,0x02,0x72,0x0A,0x89,
+    0x12,0x0A,0x42,0x72,0x09,0x89,0x81,0x72,0x70,0x47,0x00,0x00,0xC4,0x00,0x00,0x20,
+    0xE0,0x12,0x00,0x40,0x00,0x10,0x00,0x40,0x07,0x49,0x09,0x7A,0x01,0x70,0x06,0x49,
+    0x80,0x39,0x49,0x7E,0x41,0x70,0x04,0x49,0x60,0x39,0x09,0x79,0x81,0x70,0x03,0x49,
+    0x09,0x78,0xC1,0x70,0x70,0x47,0x00,0x00,0x84,0x01,0x00,0x20,0x44,0x00,0x00,0x20,
+    0x10,0xB5,0x06,0x48,0x05,0x4B,0xC0,0x6B,0x80,0x3B,0x82,0x79,0x40,0x79,0x59,0x6D,
+    0x42,0x43,0x98,0x6C,0x00,0xF0,0xEA,0xFC,0x10,0xBD,0x00,0x00,0xC4,0x00,0x00,0x20,
+    0xF8,0xB5,0x0F,0x46,0x06,0x46,0x00,0x92,0x00,0xF0,0x58,0xF9,0x05,0x1E,0x00,0xDC,
+    0x68,0x42,0x80,0xB2,0x01,0xF0,0xC8,0xFF,0x04,0x46,0x00,0x2D,0x02,0xDA,0xB4,0x20,
+    0x00,0x1B,0x84,0xB2,0x39,0x46,0x30,0x46,0x00,0x9A,0x01,0xF0,0xAB,0xF8,0x00,0x28,
+    0x05,0xD0,0x00,0x2C,0x03,0xD0,0xFF,0x20,0x69,0x30,0x00,0x1B,0x84,0xB2,0x20,0x46,
+    0xF8,0xBD,0x00,0x00,0xFF,0xB5,0x8F,0xB0,0x9E,0x46,0x68,0x46,0x01,0x70,0x00,0x23,
+    0x70,0x46,0x03,0x70,0x14,0x20,0x41,0x43,0x37,0x48,0x01,0x22,0x09,0x18,0x52,0x1E,
+    0xD2,0xB2,0x68,0x46,0x80,0x5C,0x14,0x23,0x84,0x46,0x58,0x43,0x32,0x4B,0xC0,0x18,
+    0xC3,0x7C,0x1C,0x07,0x24,0x0F,0x02,0x2C,0x0D,0xD0,0x1B,0x09,0x1B,0x01,0x9B,0x1C,
+    0xC3,0x74,0x73,0x46,0x1C,0x78,0x11,0x9B,0x60,0x46,0x18,0x55,0x70,0x46,0x00,0x78,
+    0x73,0x46,0x40,0x1C,0x18,0x70,0x29,0x48,0x00,0x25,0x40,0x78,0x0E,0x90,0x44,0xE0,
+    0x0E,0x20,0x2E,0x46,0x46,0x43,0x24,0x48,0xC8,0x30,0x37,0x18,0xB8,0x7A,0x04,0x07,
+    0x24,0x0F,0x64,0x45,0x01,0xD1,0x04,0x09,0x02,0xE0,0x00,0x09,0x60,0x45,0x31,0xD1,
+    0x00,0x2C,0x2F,0xDB,0x38,0x7B,0x01,0x28,0x2C,0xD1,0x20,0x46,0x14,0x23,0x58,0x43,
+    0x19,0x4B,0xC0,0x18,0xC3,0x7C,0x1B,0x07,0x24,0xD1,0x17,0x4F,0xC3,0x89,0xC8,0x37,
+    0xBE,0x5B,0x0C,0x27,0x9B,0x19,0xC3,0x81,0x0C,0x26,0xCF,0x5F,0x86,0x5F,0xB7,0x42,
+    0x0F,0xDA,0x8E,0x81,0x0B,0x7C,0x07,0x7C,0x1E,0x07,0x3F,0x09,0x36,0x0F,0x3F,0x01,
+    0x3E,0x43,0x0E,0x74,0x07,0x7C,0x36,0x09,0x36,0x01,0x3F,0x07,0x3F,0x0F,0x3E,0x43,
+    0x0E,0x74,0x6B,0x46,0x9C,0x54,0xC3,0x7C,0x52,0x1C,0x1B,0x09,0x1B,0x01,0x5B,0x1C,
+    0xD2,0xB2,0xC3,0x74,0x6D,0x1C,0x0E,0x98,0xED,0xB2,0x85,0x42,0xB8,0xD3,0x00,0x2A,
+    0x95,0xD1,0x13,0xB0,0xF0,0xBD,0x00,0x00,0xE0,0x0A,0x00,0x20,0x30,0x00,0x00,0x20,
+    0xFF,0xB5,0x83,0xB0,0x05,0x46,0x01,0x20,0x05,0x99,0x0E,0x9E,0x1F,0x46,0x48,0x55,
+    0x00,0x24,0x16,0xE0,0x38,0x5D,0x00,0x28,0x12,0xD1,0x0C,0x98,0x6A,0x00,0x83,0x5E,
+    0x0D,0x9A,0x60,0x00,0x12,0x5E,0x69,0x43,0x9A,0x18,0x14,0x4B,0x09,0x19,0x5B,0x68,
+    0x49,0x00,0x59,0x5A,0x51,0x1A,0x0B,0xD0,0x32,0x5E,0x8A,0x42,0x00,0xDD,0x31,0x52,
+    0x64,0x1C,0x0E,0x48,0x01,0x78,0x8C,0x42,0xE4,0xDB,0x00,0x20,0x07,0xB0,0xF0,0xBD,
+    0x01,0x20,0x38,0x55,0x04,0x98,0x00,0x57,0x41,0x1C,0x0B,0xD0,0x0C,0x99,0x0D,0x9A,
+    0x00,0x91,0x01,0x92,0x3B,0x46,0x02,0x96,0x05,0x9A,0x04,0x99,0xFF,0xF7,0xC8,0xFF,
+    0x00,0x28,0xE5,0xD0,0x04,0x98,0x05,0x55,0x01,0x20,0xE7,0xE7,0x3C,0x00,0x00,0x20,
+    0xFF,0xB5,0xA3,0xB0,0x98,0x00,0x2D,0x9F,0x2C,0x9D,0x91,0x00,0xAB,0x00,0x00,0x90,
+    0xBA,0x00,0x01,0xA8,0x0E,0xC0,0x2B,0x4D,0x00,0x26,0x68,0x68,0x34,0x46,0xC3,0x7F,
+    0x1E,0x22,0x04,0xA9,0x13,0xA8,0x00,0xF0,0x8C,0xFB,0x01,0x90,0x68,0x68,0x01,0x7A,
+    0x01,0x98,0x81,0x42,0x44,0xD8,0x68,0x46,0x00,0x8A,0x00,0x90,0x10,0xA8,0x83,0x89,
+    0x08,0x22,0x21,0x49,0x24,0x98,0x00,0xF0,0xC9,0xF8,0x07,0x46,0x01,0x25,0x34,0xE0,
+    0x68,0x00,0x04,0xA9,0x09,0x5A,0x00,0x91,0x13,0xA9,0x0B,0x5A,0x08,0x22,0x1A,0x49,
+    0x24,0x98,0x00,0xF0,0xBB,0xF8,0x00,0x2C,0x0B,0xD0,0x7D,0x23,0x2E,0x9A,0x7D,0x21,
+    0xDB,0x00,0xC9,0x00,0xD2,0x18,0x41,0x43,0x7A,0x43,0x91,0x42,0x01,0xD9,0x76,0x1C,
+    0xF6,0xB2,0x7D,0x23,0x2E,0x9A,0x7D,0x21,0xDB,0x00,0xC9,0x00,0x9A,0x1A,0x41,0x43,
+    0x7A,0x43,0x91,0x42,0x01,0xD2,0x64,0x1C,0xE4,0xB2,0x07,0x46,0x09,0x48,0x31,0x19,
+    0x40,0x68,0x00,0x7A,0x81,0x42,0x06,0xD3,0x01,0x2E,0x04,0xD9,0x01,0x2C,0x02,0xD9,
+    0x00,0x20,0x27,0xB0,0xF0,0xBD,0x6D,0x1C,0xED,0xB2,0x01,0x98,0x85,0x42,0xC7,0xD3,
+    0x01,0x20,0xF6,0xE7,0x30,0x00,0x00,0x20,0xF4,0x7B,0x00,0x00,0x10,0xB5,0x09,0x49,
+    0x00,0x20,0x49,0x7C,0x00,0x29,0x01,0xD0,0xFF,0xF7,0x4C,0xFC,0x06,0x49,0x0A,0x46,
+    0x08,0x72,0x40,0x3A,0x92,0x7F,0x05,0x2A,0x02,0xD9,0x80,0x22,0x10,0x43,0x08,0x72,
+    0x10,0xBD,0x00,0x00,0x64,0x00,0x00,0x20,0x84,0x01,0x00,0x20,0xF7,0xB5,0x84,0xB0,
+    0x68,0x46,0x40,0x8B,0x00,0x90,0x68,0x46,0x00,0x8B,0x01,0x90,0x68,0x46,0xC7,0x8A,
+    0x84,0x8A,0x39,0x46,0x20,0x46,0x00,0x9B,0x01,0x9A,0xFF,0xF7,0xEF,0xFC,0x02,0x90,
+    0x68,0x46,0x46,0x8A,0x05,0x8A,0x3B,0x46,0x22,0x46,0x31,0x46,0x28,0x46,0xFF,0xF7,
+    0xE5,0xFC,0x04,0x46,0x31,0x46,0x28,0x46,0x00,0x9B,0x01,0x9A,0xFF,0xF7,0xDE,0xFC,
+    0x00,0x2C,0x12,0xD0,0x00,0x28,0x10,0xD0,0x21,0x46,0x02,0x46,0x61,0x43,0x42,0x43,
+    0x8A,0x18,0x02,0x99,0x49,0x43,0x51,0x1A,0x8A,0x02,0x21,0x46,0x41,0x43,0x10,0x46,
+    0xFD,0xF7,0x2E,0xFA,0x00,0xB2,0x07,0xB0,0xF0,0xBD,0x00,0x20,0xC0,0x43,0xFA,0xE7,
+    0x01,0x46,0xFF,0x22,0x0A,0x39,0x56,0x32,0x91,0x42,0x01,0xD3,0x01,0x20,0x70,0x47,
+    0x50,0x28,0x01,0xD8,0x02,0x20,0x70,0x47,0x64,0x28,0x01,0xD2,0x03,0x20,0x70,0x47,
+    0xAA,0x28,0x01,0xD8,0x04,0x20,0x70,0x47,0xBE,0x28,0x01,0xD2,0x05,0x20,0x70,0x47,
+    0xFF,0x21,0x05,0x31,0x88,0x42,0x01,0xD8,0x06,0x20,0x70,0x47,0xFF,0x21,0x19,0x31,
+    0x88,0x42,0x01,0xD2,0x07,0x20,0x70,0x47,0x08,0x20,0x70,0x47,0x06,0x49,0x49,0x68,
+    0xCA,0x78,0x80,0x1A,0x0A,0x79,0x89,0x78,0x10,0x41,0x00,0xB2,0x4A,0x1E,0x82,0x42,
+    0x00,0xDA,0x10,0x46,0x40,0xB2,0x70,0x47,0x30,0x00,0x00,0x20,0xFF,0xB5,0x47,0x48,
+    0x8B,0xB0,0x40,0x68,0x8E,0x46,0xC4,0x7F,0x08,0x94,0xA4,0x00,0x0A,0x94,0x80,0x7F,
+    0x80,0x00,0x09,0x90,0x00,0x20,0x84,0x46,0x00,0x90,0x50,0x42,0x42,0xB2,0x18,0xB2,
+    0x06,0x90,0x14,0x98,0x07,0x92,0x00,0xB2,0x05,0x90,0x68,0xE0,0x07,0x99,0x62,0xE0,
+    0x04,0x25,0x10,0x46,0x08,0x43,0x14,0xD0,0x00,0x2A,0x19,0xD0,0x14,0x98,0x00,0x29,
+    0x1F,0xD0,0x80,0x18,0x6E,0x46,0xB0,0x80,0x5F,0x18,0xB7,0x81,0xF0,0x80,0x5C,0x1A,
+    0xF4,0x81,0x14,0x98,0x80,0x1A,0x30,0x81,0x37,0x82,0x70,0x81,0x74,0x82,0x00,0x24,
+    0x42,0xE0,0x6C,0x46,0x05,0x98,0xA0,0x80,0x06,0x98,0xA0,0x81,0x01,0x25,0xF6,0xE7,
+    0x6C,0x46,0x05,0x98,0xA0,0x80,0x58,0x18,0xA0,0x81,0x05,0x98,0xE0,0x80,0x58,0x1A,
+    0x08,0xE0,0x80,0x18,0x6C,0x46,0xA0,0x80,0x06,0x98,0xA0,0x81,0x14,0x98,0x80,0x1A,
+    0xE0,0x80,0x06,0x98,0xE0,0x81,0x02,0x25,0xE1,0xE7,0x67,0x00,0x03,0xA8,0xC6,0x5F,
+    0x00,0x2E,0x1F,0xDB,0x0A,0x98,0x86,0x42,0x1C,0xDA,0x01,0xA8,0xC7,0x5F,0x00,0x2F,
+    0x18,0xDB,0x09,0x98,0x87,0x42,0x15,0xDA,0xB0,0x07,0x13,0xD1,0xB8,0x07,0x11,0xD1,
+    0x08,0x98,0x47,0x43,0xB8,0x19,0x80,0x10,0x76,0x46,0x00,0xB2,0x37,0x88,0x46,0x00,
+    0x0B,0x98,0x80,0x5F,0x00,0x28,0x00,0xDA,0x00,0x20,0x78,0x43,0x84,0x44,0x00,0x98,
+    0xC0,0x19,0x00,0x90,0x64,0x1C,0x24,0xB2,0xAC,0x42,0xD6,0xDB,0x70,0x46,0x80,0x1C,
+    0x49,0x1C,0x86,0x46,0x49,0xB2,0x00,0x29,0x9A,0xDD,0x52,0x1C,0x52,0xB2,0x00,0x2A,
+    0x94,0xDD,0x00,0x98,0x00,0x28,0x04,0xD0,0x01,0x46,0x60,0x46,0xFD,0xF7,0x5E,0xF9,
+    0x84,0x46,0x60,0x46,0x00,0xB2,0x0F,0xB0,0xF0,0xBD,0x00,0x00,0x30,0x00,0x00,0x20,
+    0xF0,0xB5,0x00,0x24,0xE5,0xB0,0x25,0x46,0xFE,0x49,0x6A,0x46,0x88,0x88,0x10,0x84,
+    0x1C,0x90,0xC8,0x88,0x50,0x84,0x1B,0x90,0x08,0x46,0x7C,0x30,0x1E,0x90,0x03,0x88,
+    0x93,0x84,0x40,0x88,0xD0,0x84,0x48,0x78,0x03,0x28,0x2F,0xD3,0x00,0x26,0x28,0xE0,
+    0xB1,0x00,0x0F,0x18,0xB9,0x89,0x10,0xA8,0x01,0x85,0xF9,0x89,0x41,0x85,0x39,0x89,
+    0x81,0x84,0x79,0x89,0xC1,0x84,0x1A,0x99,0x19,0x98,0xFE,0xF7,0x7B,0xF8,0x1D,0x90,
+    0x39,0x89,0x10,0xA8,0x01,0x85,0x79,0x89,0x41,0x85,0xB9,0x88,0x81,0x84,0xF9,0x88,
+    0xC1,0x84,0x1A,0x99,0x19,0x98,0xFE,0xF7,0x6D,0xF8,0x1D,0x99,0xFE,0xF7,0x75,0xF8,
+    0x73,0x00,0x27,0xA9,0xC8,0x52,0xFF,0xF7,0xFB,0xFE,0x4D,0xA9,0x76,0x1C,0xC8,0x52,
+    0xB6,0xB2,0xE0,0x48,0x41,0x78,0x89,0x1E,0xB1,0x42,0xD1,0xDC,0xDD,0x4A,0x00,0x20,
+    0x52,0x78,0x19,0x92,0x69,0x46,0x92,0x1E,0x12,0xE0,0x00,0x23,0xDB,0x43,0x0B,0x54,
+    0x00,0x26,0x43,0x00,0x0A,0xAF,0xFE,0x52,0x1F,0xAF,0x3E,0x54,0x76,0x1E,0x5C,0xAF,
+    0x3E,0x54,0x00,0x26,0x36,0xAF,0xFE,0x52,0x45,0xAB,0x1E,0x54,0x40,0x1C,0x80,0xB2,
+    0x82,0x42,0xEA,0xDC,0x00,0x20,0x5D,0xE0,0x46,0x00,0x4D,0xAB,0x9B,0x5B,0x9C,0x46,
+    0x05,0x2B,0x7B,0xD0,0x27,0xAF,0xBB,0x5B,0xB4,0x2B,0x22,0xD2,0x66,0x46,0xB6,0x1E,
+    0x02,0x2E,0x18,0xD8,0x00,0x2C,0x04,0xD0,0x0E,0x19,0x20,0x3E,0xF6,0x7F,0x01,0x2E,
+    0x0B,0xD1,0x64,0x1C,0xE4,0xB2,0x0F,0x19,0x02,0x26,0x20,0x3F,0xFE,0x77,0x1F,0xAE,
+    0x36,0x19,0x20,0x3E,0xF7,0x7F,0x7F,0x1C,0xF7,0x77,0x1F,0xAE,0x36,0x19,0x20,0x3E,
+    0xF7,0x7F,0x7F,0x1C,0xF7,0x77,0x0E,0x19,0x20,0x3E,0xF6,0x7F,0x02,0x2E,0x28,0xD0,
+    0x2E,0xE0,0xFF,0x27,0x69,0x37,0xFB,0x1A,0x9B,0xB2,0x27,0xAF,0xBB,0x53,0x66,0x46,
+    0xB6,0x1F,0x02,0x2E,0x18,0xD8,0x00,0x2C,0x04,0xD0,0x0E,0x19,0x20,0x3E,0xF6,0x7F,
+    0x02,0x2E,0x0B,0xD1,0x64,0x1C,0xE4,0xB2,0x0F,0x19,0x01,0x26,0x20,0x3F,0xFE,0x77,
+    0x1F,0xAE,0x36,0x19,0x20,0x3E,0xF7,0x7F,0x7F,0x1C,0xF7,0x77,0x1F,0xAE,0x36,0x19,
+    0x20,0x3E,0xF7,0x7F,0x7F,0x1C,0xF7,0x77,0x0E,0x19,0x20,0x3E,0xF6,0x7F,0x01,0x2E,
+    0x06,0xD1,0x67,0x00,0x0A,0xAE,0xBE,0x19,0x40,0x3E,0xF7,0x8F,0xFB,0x18,0xF3,0x87,
+    0x40,0x1C,0x80,0xB2,0x82,0x42,0x9F,0xDC,0x00,0x20,0x19,0xE0,0x1F,0xA9,0x0B,0x5C,
+    0x04,0x2B,0x04,0xD8,0x46,0x00,0x0A,0xAB,0x9B,0x5B,0x3C,0x2B,0x0E,0xD3,0x0B,0x5C,
+    0x45,0xA9,0x4B,0x55,0x43,0x00,0x0A,0xA9,0xCB,0x5A,0x6E,0x00,0x36,0xA9,0x8B,0x53,
+    0x69,0x46,0x0B,0x5C,0x5C,0xA9,0x4B,0x55,0x6D,0x1C,0xED,0xB2,0x40,0x1C,0x80,0xB2,
+    0xA0,0x42,0xE3,0xD3,0x00,0x23,0x18,0x46,0x19,0x46,0x2C,0xE0,0x44,0xE0,0x5C,0xAE,
+    0x74,0x56,0xA4,0x46,0x9C,0x42,0x10,0xD0,0x73,0x5C,0x45,0xAC,0x66,0x5C,0x1F,0xAC,
+    0x26,0x54,0x4E,0x00,0x36,0xAC,0xA6,0x5B,0x47,0x00,0x0A,0xAC,0xE6,0x53,0x64,0x46,
+    0x6E,0x46,0x34,0x54,0x40,0x1C,0xC0,0xB2,0x13,0xE0,0x1F,0xAC,0x24,0x18,0x20,0x3C,
+    0x45,0xAE,0xE7,0x7F,0x76,0x5C,0xBE,0x19,0xE6,0x77,0x46,0x00,0x0A,0xAC,0x34,0x19,
+    0x40,0x3C,0xA4,0x46,0xE6,0x8F,0x4F,0x00,0x36,0xAC,0xE4,0x5B,0x36,0x19,0x64,0x46,
+    0xE6,0x87,0x49,0x1C,0x89,0xB2,0xA9,0x42,0xD1,0xD3,0x19,0x99,0x75,0x4F,0x02,0x29,
+    0x06,0xD8,0xB8,0x78,0x00,0x1F,0x4C,0x28,0x0E,0xD2,0xF1,0x20,0x65,0xB0,0xF0,0xBD,
+    0x00,0x28,0x0A,0xD0,0xFF,0x21,0x0F,0x31,0x01,0x28,0x2D,0xD0,0x02,0x28,0x74,0xD0,
+    0x03,0x28,0x73,0xD0,0x04,0x28,0x72,0xD0,0xF1,0xE0,0x1E,0x98,0x6A,0x46,0x01,0x88,
+    0x91,0x84,0x40,0x88,0xD0,0x84,0xB8,0x88,0x10,0x84,0xF8,0x88,0x50,0x84,0x09,0x99,
+    0x08,0x98,0xFD,0xF7,0x67,0xFF,0x01,0x46,0xFF,0x22,0x2D,0x39,0x10,0x32,0x91,0x42,
+    0x01,0xD3,0xA0,0x20,0xDA,0xE7,0x01,0x46,0x2E,0x39,0x59,0x29,0x01,0xD2,0xA1,0x20,
+    0xD4,0xE7,0x01,0x46,0x88,0x39,0x59,0x29,0x01,0xD2,0xA2,0x20,0xCE,0xE7,0xE2,0x38,
+    0x59,0x28,0x72,0xD2,0xA3,0x20,0xC9,0xE7,0x56,0x4C,0x80,0x34,0xA0,0x88,0xE3,0x88,
+    0xC0,0x18,0x40,0x08,0x10,0xAB,0x98,0x84,0x20,0x88,0x63,0x88,0xC0,0x18,0x40,0x08,
+    0x10,0xAB,0xD8,0x84,0x6B,0x46,0x18,0x8D,0xFF,0x23,0xC3,0x33,0x98,0x42,0x5C,0xD8,
+    0x88,0x42,0x29,0xD9,0x09,0x9A,0x08,0x99,0x19,0x98,0xFF,0xF7,0x31,0xFC,0x05,0x46,
+    0x68,0x46,0xC3,0x8C,0x82,0x8C,0x41,0x8C,0x00,0x8C,0xFF,0xF7,0x87,0xFA,0x1E,0x28,
+    0x18,0xD3,0x28,0x46,0xFF,0x21,0x1E,0x38,0x2E,0x31,0x88,0x42,0x12,0xD2,0xB4,0x2D,
+    0x2E,0xD8,0xE1,0x88,0xA0,0x88,0x09,0x1A,0x89,0x10,0x09,0x18,0x1C,0x98,0x81,0x42,
+    0x08,0xDD,0x21,0x88,0x1B,0x98,0x88,0x42,0x04,0xD9,0x61,0x88,0x88,0x42,0x01,0xD2,
+    0x65,0x20,0x8B,0xE7,0x6F,0x20,0x89,0xE7,0x3C,0x28,0x2E,0xD9,0x00,0x21,0xFF,0x26,
+    0x0C,0x46,0x08,0x46,0x69,0x36,0x27,0xAD,0x0E,0xE0,0x38,0xE0,0x51,0xE0,0x70,0xE0,
+    0x43,0x00,0xEB,0x5A,0xB4,0x2B,0x00,0xD9,0xF3,0x1A,0x9B,0xB2,0x8B,0x42,0x01,0xD9,
+    0x04,0x46,0x19,0x46,0x40,0x1C,0x80,0xB2,0x82,0x42,0xF1,0xDC,0x5A,0x29,0x01,0xD2,
+    0x63,0x20,0x6B,0xE7,0xA0,0x00,0xC0,0x19,0x01,0x89,0x6A,0x46,0x11,0x84,0x40,0x89,
+    0x50,0x84,0x19,0x99,0x08,0x98,0xFD,0xF7,0xE5,0xFE,0x01,0x46,0xFF,0x22,0x2D,0x39,
+    0x10,0x32,0x91,0x42,0x02,0xD3,0x3C,0x20,0x58,0xE7,0x58,0xE0,0x01,0x46,0x2E,0x39,
+    0x59,0x29,0x01,0xD2,0x76,0x20,0x51,0xE7,0x01,0x46,0x88,0x39,0x59,0x29,0x01,0xD2,
+    0x3E,0x20,0x4B,0xE7,0xE2,0x38,0x59,0x28,0x49,0xD2,0x5E,0x20,0x46,0xE7,0x6A,0x46,
+    0x00,0x20,0x10,0x56,0x01,0x28,0x08,0xD1,0x12,0x8D,0x8A,0x42,0x05,0xD2,0x6A,0x46,
+    0x52,0x8D,0x8A,0x42,0x01,0xD2,0x73,0x20,0x38,0xE7,0x02,0x28,0x37,0xD1,0x68,0x46,
+    0x00,0x8D,0x88,0x42,0x33,0xD2,0x68,0x46,0x40,0x8D,0x88,0x42,0x2F,0xD2,0x7A,0x20,
+    0x2C,0xE7,0x69,0x46,0x00,0x20,0x08,0x56,0x01,0x28,0x0F,0xD1,0x09,0x8D,0xDC,0x29,
+    0x0C,0xD2,0x69,0x46,0x49,0x8D,0xDC,0x29,0x08,0xD2,0x69,0x46,0x89,0x8D,0xDC,0x29,
+    0x04,0xD2,0x01,0xE0,0xC0,0x0C,0x00,0x20,0x77,0x20,0x17,0xE7,0x02,0x28,0x16,0xD1,
+    0x68,0x46,0x00,0x8D,0x0D,0xE0,0x68,0x46,0x80,0x8D,0xDC,0x28,0x0F,0xD2,0x6D,0x20,
+    0x0C,0xE7,0x68,0x46,0x00,0x78,0x01,0x28,0x09,0xD1,0x68,0x46,0x00,0x8D,0x5A,0x28,
+    0x05,0xD9,0xDC,0x28,0x03,0xD2,0x68,0x46,0x40,0x8D,0xDC,0x28,0xEB,0xD3,0x00,0x20,
+    0xFC,0xE6,0xFF,0xB5,0x83,0xB0,0x0C,0xAC,0x0F,0xCC,0x00,0x25,0xFF,0xF7,0xD6,0xF9,
+    0x00,0x90,0x00,0x20,0x07,0x46,0x04,0x46,0x01,0x90,0x00,0x98,0x00,0x28,0x2E,0xD0,
+    0x26,0xE0,0x0C,0x99,0x0E,0x98,0x40,0x1A,0x68,0x43,0x00,0x99,0xFC,0xF7,0x28,0xFF,
+    0x0C,0x99,0x40,0x18,0x06,0xB2,0x0D,0x99,0x0F,0x98,0x40,0x1A,0x68,0x43,0x00,0x99,
+    0xFC,0xF7,0x1E,0xFF,0x0D,0x99,0x40,0x18,0x00,0xB2,0x00,0x2C,0x04,0xD0,0x01,0x99,
+    0xB1,0x42,0x01,0xD1,0x87,0x42,0x09,0xD0,0x61,0x00,0x03,0x9A,0x64,0x1C,0x56,0x52,
+    0x04,0x9A,0x87,0xB2,0x50,0x52,0xB1,0xB2,0xA4,0xB2,0x01,0x91,0x6D,0x1C,0xAD,0xB2,
+    0x00,0x98,0x85,0x42,0x02,0xD8,0x05,0x98,0x84,0x42,0xD2,0xD3,0xE0,0xB2,0x07,0xB0,
+    0xF0,0xBD,0x00,0x00,0x06,0x49,0x8A,0x7D,0x06,0x48,0xC0,0x6B,0x43,0x7A,0x9A,0x43,
+    0x8A,0x75,0x40,0x7A,0x48,0x76,0x03,0x48,0x01,0x21,0x60,0x38,0x81,0x74,0x70,0x47,
+    0x00,0x03,0x00,0x40,0xC4,0x00,0x00,0x20,0x03,0x49,0x02,0x48,0xC8,0x60,0xBF,0xF3,
+    0x40,0x8F,0xFE,0xE7,0x04,0x00,0xFA,0x05,0x00,0xED,0x00,0xE0,0x03,0xE0,0x0B,0x78,
+    0x49,0x1C,0x03,0x70,0x40,0x1C,0x52,0x1E,0xF9,0xD2,0x70,0x47,0x03,0xE0,0x0B,0x88,
+    0x89,0x1C,0x03,0x80,0x80,0x1C,0x52,0x1E,0xF9,0xD2,0x70,0x47,0x01,0xE0,0x01,0x70,
+    0x40,0x1C,0x52,0x1E,0xFB,0xD2,0x70,0x47,0xF8,0xB5,0x45,0x4C,0xE0,0x79,0xC0,0x07,
+    0x1E,0xD0,0x44,0x4D,0x01,0x20,0xA8,0x70,0xE0,0x79,0x00,0x06,0x14,0xD5,0x60,0x88,
+    0xD1,0x21,0x09,0x02,0x41,0x1A,0x20,0x29,0x04,0xD8,0xC0,0xB2,0x03,0xF0,0x10,0xFC,
+    0x02,0x20,0x06,0xE0,0x3C,0x49,0x88,0x42,0x04,0xD1,0x3C,0x49,0x03,0xF0,0x20,0xF9,
+    0x03,0x20,0xA8,0x70,0x10,0x20,0xE0,0x71,0x39,0x49,0xA0,0x20,0x88,0x80,0xF8,0xBD,
+    0xA3,0x79,0x34,0x4F,0xCF,0x20,0xE0,0x3F,0x3E,0x46,0x03,0x40,0x39,0x46,0xC0,0x36,
+    0x20,0x31,0x34,0x4A,0x35,0x68,0xF8,0x68,0x01,0x2B,0x21,0xD0,0x05,0x2B,0x08,0xD0,
+    0x00,0x26,0x09,0x2B,0x01,0xD0,0xA6,0x71,0xF8,0xBD,0xBE,0x72,0x63,0x88,0xDB,0x07,
+    0x04,0xD0,0x90,0x42,0x04,0xD1,0xA5,0x20,0x60,0x80,0x0E,0xE0,0x10,0x20,0x0D,0xE0,
+    0x4B,0x7D,0x24,0x49,0x28,0x5C,0xE0,0x39,0xC9,0x68,0x49,0x1C,0x00,0x2B,0x60,0x80,
+    0xF9,0x60,0x02,0xD1,0x37,0x29,0x00,0xD3,0xFA,0x60,0x14,0x20,0xA0,0x71,0xF8,0xBD,
+    0xBB,0x7A,0x02,0x2B,0x29,0xD2,0x00,0x2B,0x0C,0xD0,0x63,0x88,0x00,0x02,0xC0,0x18,
+    0x85,0xB2,0xD1,0x20,0x00,0x02,0x28,0x1A,0x20,0x28,0x05,0xD8,0xE8,0xB2,0x03,0xF0,
+    0xBF,0xFB,0x21,0xE0,0x60,0x88,0x14,0xE0,0x48,0x7D,0x00,0x28,0x0C,0xD0,0x13,0x49,
+    0x28,0x46,0x03,0xF0,0xCD,0xF8,0x41,0x20,0x40,0x02,0x28,0x1A,0xFF,0x28,0x13,0xD8,
+    0x71,0x68,0x0A,0x31,0x31,0x60,0x04,0xE0,0x0D,0x20,0x00,0x03,0x28,0x1A,0x50,0x28,
+    0x01,0xD8,0xF8,0x60,0x08,0xE0,0xFA,0x60,0x06,0xE0,0x90,0x42,0x04,0xD0,0x61,0x88,
+    0x29,0x54,0xF8,0x68,0x40,0x1C,0xF4,0xE7,0xB8,0x7A,0x40,0x1C,0xB8,0x72,0xB5,0xE7,
+    0x00,0x20,0x00,0x40,0x24,0x01,0x00,0x20,0xF4,0xD1,0x00,0x00,0xEB,0x08,0x00,0x20,
+    0x00,0x02,0x00,0x40,0xFF,0xFF,0x00,0x00,0x30,0xB5,0x0D,0x49,0x0D,0x4A,0x00,0x20,
+    0x43,0x00,0x40,0x1C,0x80,0xB2,0xD1,0x52,0x1E,0x28,0xF9,0xD3,0x00,0x23,0x0A,0x4C,
+    0x08,0x4D,0x23,0x70,0x18,0x46,0x3C,0x35,0x14,0x21,0x41,0x43,0x49,0x19,0x00,0x22,
+    0x40,0x1C,0x8B,0x81,0x80,0xB2,0xCA,0x74,0x0A,0x28,0xF5,0xD3,0x63,0x70,0x30,0xBD,
+    0xFF,0x3F,0x00,0x00,0xA4,0x0A,0x00,0x20,0x30,0x00,0x00,0x20,0x00,0x23,0x02,0xE0,
+    0xC1,0x54,0x5B,0x1C,0x9B,0xB2,0x93,0x42,0xFA,0xD3,0x70,0x47,0x01,0x20,0x80,0x07,
+    0x01,0x89,0x04,0x22,0x11,0x43,0x01,0x81,0x02,0x89,0x08,0x21,0x0A,0x43,0x02,0x81,
+    0x42,0x89,0x80,0x23,0x1A,0x43,0x42,0x81,0x42,0x89,0x8A,0x43,0x42,0x81,0x41,0x89,
+    0x71,0x22,0x11,0x43,0x41,0x81,0x81,0x89,0x09,0x09,0x09,0x01,0x81,0x81,0x70,0x47,
+    0x10,0xB5,0x12,0x4A,0x10,0x48,0x50,0x80,0x11,0x48,0x00,0x78,0x03,0x02,0x11,0x48,
+    0xC1,0x6B,0x08,0x46,0x20,0x30,0x84,0x78,0x23,0x43,0x13,0x81,0x40,0x31,0x89,0x8A,
+    0xD1,0x80,0xC1,0x78,0xFF,0x31,0xFF,0x31,0x02,0x31,0x51,0x81,0x42,0x79,0x01,0x79,
+    0x12,0x01,0x80,0x79,0x11,0x43,0xC0,0x00,0x80,0x22,0x10,0x43,0x01,0x43,0x06,0x48,
+    0x81,0x74,0x03,0xF0,0x17,0xF8,0x10,0xBD,0x82,0x10,0x00,0x00,0x00,0x10,0x00,0x40,
+    0xDC,0x7B,0x00,0x00,0xC4,0x00,0x00,0x20,0xE0,0x12,0x00,0x40,0x70,0xB5,0x01,0x21,
+    0x89,0x07,0x88,0x89,0x00,0x07,0x00,0x0F,0x88,0x81,0x20,0x48,0xC2,0x6B,0x90,0x7F,
+    0x00,0x28,0x34,0xD0,0x02,0x28,0x88,0x89,0x34,0xD0,0x30,0x23,0x18,0x43,0x88,0x81,
+    0x1B,0x4D,0xC1,0x20,0x68,0x70,0x13,0x46,0x20,0x33,0x1C,0x78,0xD2,0x7F,0x20,0x01,
+    0x18,0x4E,0x10,0x43,0x30,0x83,0x01,0x26,0x30,0x46,0xA0,0x40,0x96,0x40,0x16,0x4A,
+    0x30,0x43,0x94,0x7C,0x04,0x43,0x94,0x74,0x54,0x7C,0x04,0x43,0x54,0x74,0x5C,0x78,
+    0x01,0x2C,0x54,0x7D,0x18,0xD0,0x84,0x43,0x54,0x75,0x14,0x7D,0x04,0x43,0x14,0x75,
+    0xD4,0x7C,0x20,0x43,0xD0,0x74,0x48,0x89,0x40,0x22,0x10,0x43,0x48,0x81,0x00,0x20,
+    0x68,0x71,0x59,0x7C,0x80,0x22,0x11,0x43,0x29,0x70,0xE8,0x71,0x70,0xBD,0x88,0x89,
+    0xE0,0x23,0xCB,0xE7,0x10,0x23,0xC9,0xE7,0x04,0x43,0xE5,0xE7,0xC4,0x00,0x00,0x20,
+    0x00,0x20,0x00,0x40,0x20,0x11,0x00,0x40,0x00,0x03,0x00,0x40,0x10,0xB5,0x01,0x21,
+    0x03,0x20,0xFC,0xF7,0x83,0xFE,0x02,0x21,0x05,0x20,0xFC,0xF7,0x7F,0xFE,0x03,0x21,
+    0x04,0x20,0xFC,0xF7,0x7B,0xFE,0x05,0x20,0xFC,0xF7,0x6C,0xFE,0x03,0x20,0xFC,0xF7,
+    0x69,0xFE,0x04,0x20,0xFC,0xF7,0x66,0xFE,0x62,0xB6,0x10,0xBD,0x30,0xB5,0x0E,0x48,
+    0x03,0x7C,0x0E,0x49,0x01,0x22,0xC9,0x6B,0x14,0x46,0x4D,0x7C,0xAC,0x40,0x23,0x43,
+    0x03,0x74,0x43,0x7D,0x4D,0x7C,0x14,0x46,0xAC,0x40,0xA3,0x43,0x43,0x75,0x03,0x7D,
+    0x4D,0x7C,0x14,0x46,0xAC,0x40,0x23,0x43,0x03,0x75,0xC3,0x7C,0x49,0x7C,0x8A,0x40,
+    0x13,0x43,0xC3,0x74,0x30,0xBD,0x00,0x00,0x00,0x03,0x00,0x40,0xC4,0x00,0x00,0x20,
+    0x10,0xB5,0x0C,0x48,0x04,0x21,0x01,0x74,0x01,0x46,0x08,0x31,0x04,0x20,0x01,0xF0,
+    0xA1,0xF9,0x08,0x4A,0x04,0x20,0x0C,0x32,0x51,0x1D,0x01,0xF0,0xB1,0xF9,0x05,0x4C,
+    0x10,0x22,0x20,0x3C,0x04,0x48,0xE1,0x6A,0xFF,0xF7,0x40,0xFE,0x02,0x48,0xE0,0x63,
+    0x10,0xBD,0x00,0x00,0x64,0x01,0x00,0x20,0x9C,0x09,0x00,0x20,0x10,0xB5,0x16,0x48,
+    0xC1,0x7C,0x49,0x08,0x49,0x00,0xC1,0x74,0x01,0x7D,0x49,0x08,0x49,0x00,0x01,0x75,
+    0x01,0x7D,0xFD,0x22,0x11,0x40,0x01,0x75,0x01,0x7D,0xFB,0x22,0x11,0x40,0x01,0x75,
+    0x02,0x46,0x00,0x21,0x20,0x3A,0x11,0x72,0xD1,0x71,0x51,0x72,0x01,0x71,0xD1,0x84,
+    0x81,0x75,0x41,0x71,0x01,0x23,0x83,0x74,0xD1,0x70,0x60,0x30,0xC0,0x6B,0x28,0x24,
+    0x24,0x5C,0x94,0x71,0x53,0x70,0x00,0x78,0x10,0x70,0xD0,0x1D,0xF9,0x30,0x81,0x77,
+    0xFF,0x21,0xC1,0x77,0x10,0xBD,0x00,0x00,0x64,0x00,0x00,0x20,0xF0,0xB5,0x84,0x4C,
+    0x85,0xB0,0x82,0x48,0xE0,0x63,0x25,0x46,0x82,0x48,0x40,0x35,0x00,0x26,0x28,0x60,
+    0x20,0x30,0x06,0x70,0x06,0x71,0x80,0x48,0x06,0x80,0x20,0x46,0x7F,0x49,0x80,0x38,
+    0x81,0x63,0x0A,0x31,0xC1,0x63,0x0A,0x31,0x8C,0x46,0x01,0x64,0x64,0x31,0x41,0x64,
+    0xC8,0x31,0x81,0x64,0xC8,0x31,0xC1,0x64,0xC8,0x31,0x04,0x91,0x01,0x65,0xC8,0x31,
+    0x41,0x65,0xC8,0x31,0x81,0x65,0x8C,0x31,0xC1,0x65,0x0E,0x31,0x03,0x91,0x01,0x66,
+    0x14,0x31,0x41,0x66,0x14,0x31,0x02,0x91,0x81,0x66,0x14,0x31,0xC1,0x66,0x14,0x31,
+    0x01,0x67,0x0A,0x31,0x41,0x67,0x2E,0x77,0x0A,0x31,0x01,0x91,0x81,0x67,0x14,0x31,
+    0xC1,0x67,0x08,0x46,0x14,0x30,0x00,0x90,0x20,0x60,0x14,0x30,0x60,0x60,0x14,0x30,
+    0xA0,0x60,0x0A,0x30,0xE0,0x60,0x0A,0x30,0x20,0x61,0x40,0x30,0x60,0x61,0x64,0x48,
+    0x60,0x62,0x08,0x38,0x20,0x62,0x14,0x30,0xA0,0x62,0x24,0x30,0xE0,0x62,0x5C,0x38,
+    0xE0,0x61,0x20,0x38,0xA0,0x61,0x5F,0x48,0xA0,0x63,0x00,0x1F,0x60,0x63,0x00,0x1F,
+    0x00,0x21,0x20,0x63,0x11,0xE0,0x38,0x23,0x0A,0x46,0x5A,0x43,0x67,0x69,0x93,0x1C,
+    0xFE,0x54,0x00,0x23,0x67,0x69,0xDB,0x43,0xBB,0x54,0x53,0x1C,0x67,0x69,0x52,0x1D,
+    0xFE,0x54,0x60,0x69,0x49,0x1C,0x86,0x54,0xC9,0xB2,0xE0,0x6B,0xC0,0x7A,0x88,0x42,
+    0xE9,0xD8,0x64,0x22,0x00,0x21,0x60,0x46,0xFF,0xF7,0xA0,0xFD,0xC8,0x22,0x00,0x21,
+    0x04,0x98,0xFF,0xF7,0x9B,0xFD,0x14,0x22,0x00,0x21,0x02,0x98,0xFF,0xF7,0x96,0xFD,
+    0x14,0x22,0x00,0x21,0x03,0x98,0xFF,0xF7,0x91,0xFD,0x14,0x22,0x00,0x21,0x00,0x98,
+    0xFF,0xF7,0x8C,0xFD,0x14,0x22,0x00,0x21,0x01,0x98,0xFF,0xF7,0x87,0xFD,0x3C,0x4F,
+    0x08,0x22,0x80,0x3F,0x01,0x21,0xF8,0x6D,0xFF,0xF7,0x80,0xFD,0x48,0x22,0x00,0x21,
+    0xB8,0x6D,0xFF,0xF7,0x7B,0xFD,0x09,0x22,0x00,0x21,0xF8,0x6B,0xFF,0xF7,0x76,0xFD,
+    0x09,0x22,0x00,0x21,0xB8,0x6B,0xFF,0xF7,0x71,0xFD,0x38,0x46,0x20,0x30,0x46,0x75,
+    0x86,0x73,0x06,0x72,0x46,0x74,0x3E,0x74,0x01,0x20,0x78,0x74,0xF8,0x1D,0x32,0x49,
+    0xF9,0x30,0xC1,0x60,0x31,0x49,0x01,0x61,0x31,0x49,0x41,0x61,0x31,0x49,0x81,0x61,
+    0x01,0x46,0x20,0x31,0x00,0x91,0x8E,0x70,0x46,0x62,0x00,0x99,0x4E,0x70,0x46,0x77,
+    0x06,0x77,0x6E,0x77,0xAE,0x77,0xEE,0x77,0xE0,0x37,0x3E,0x70,0x7E,0x70,0xBE,0x70,
+    0x20,0x49,0x09,0x39,0xA9,0x60,0x20,0x49,0x89,0x1C,0xE9,0x60,0x26,0x49,0x29,0x61,
+    0x1D,0x49,0x0A,0x31,0x69,0x61,0x08,0x31,0x81,0x63,0xE0,0x6B,0x23,0x49,0xC2,0x78,
+    0x19,0x48,0x80,0x1C,0xFF,0xF7,0x2A,0xFD,0xE0,0x6B,0x21,0x49,0x02,0x79,0x15,0x48,
+    0x09,0x38,0xFF,0xF7,0x23,0xFD,0xFF,0x20,0x3C,0x46,0x60,0x34,0xE0,0x71,0xFE,0x70,
+    0x0F,0x20,0xA0,0x71,0x19,0x20,0x20,0x71,0x01,0x20,0x60,0x71,0x0D,0x48,0x18,0x22,
+    0x00,0x21,0x51,0x30,0xFF,0xF7,0x22,0xFD,0x01,0xF0,0x94,0xF8,0x09,0x48,0x51,0x30,
+    0x20,0x60,0x00,0x99,0x0E,0x74,0xFF,0xF7,0xB3,0xFE,0xFD,0xF7,0xFB,0xF8,0xFD,0xF7,
+    0xC1,0xFA,0x02,0xF0,0x23,0xFE,0x05,0xB0,0xF0,0xBD,0x00,0x00,0xB8,0x7A,0x00,0x00,
+    0xC4,0x00,0x00,0x20,0xEB,0x08,0x00,0x20,0x02,0x00,0x00,0x20,0x90,0x01,0x00,0x20,
+    0x8C,0x7B,0x00,0x00,0x3C,0x7B,0x00,0x00,0x25,0x66,0x00,0x00,0xD5,0x4A,0x00,0x00,
+    0x69,0x76,0x00,0x00,0x89,0x56,0x00,0x00,0x00,0x00,0x00,0x20,0x19,0x7B,0x00,0x00,
+    0x10,0x7B,0x00,0x00,0xF0,0xB5,0x61,0x49,0x97,0xB0,0x08,0x78,0x00,0x25,0x13,0x90,
+    0x40,0x1E,0x15,0x90,0xA5,0xE0,0x00,0x24,0xFF,0x20,0x86,0x46,0x12,0x90,0xA4,0x46,
+    0x11,0x94,0x20,0x46,0x23,0x46,0x03,0xE0,0x0E,0xA9,0x0B,0x54,0x40,0x1C,0xC0,0xB2,
+    0x13,0x99,0x88,0x42,0xF8,0xD3,0x14,0x21,0x55,0x4B,0x68,0x46,0x69,0x43,0x05,0x70,
+    0xC9,0x18,0xC9,0x7C,0x01,0x20,0x09,0x07,0x7E,0xD1,0x50,0x49,0x49,0x78,0x14,0x91,
+    0x40,0x1E,0xC0,0xB2,0x69,0x46,0x0B,0x5C,0x14,0x21,0x4D,0x4A,0x59,0x43,0x89,0x18,
+    0xCF,0x7C,0x3A,0x07,0x12,0x0F,0x02,0x2A,0x26,0xD0,0xCA,0x89,0x01,0x26,0x12,0x19,
+    0x94,0xB2,0x0E,0xAA,0xD6,0x54,0x3A,0x09,0x12,0x01,0x92,0x1C,0xCA,0x74,0x8A,0x7C,
+    0x12,0x9E,0x17,0x46,0x12,0x07,0x12,0x0F,0xB2,0x42,0x00,0xD9,0x32,0x46,0x12,0x92,
+    0x11,0x9E,0x3A,0x09,0xB2,0x42,0x00,0xD2,0x32,0x46,0x11,0x92,0x4E,0x7C,0x72,0x46,
+    0x31,0x07,0x09,0x0F,0x71,0x45,0x00,0xD9,0x11,0x46,0x8E,0x46,0x31,0x09,0x62,0x46,
+    0x61,0x45,0x00,0xD2,0x11,0x46,0x8C,0x46,0x00,0x22,0x25,0xE0,0x11,0x46,0x0E,0x26,
+    0x71,0x43,0x33,0x4E,0xC8,0x36,0x89,0x19,0x8E,0x7A,0x31,0x07,0x09,0x0F,0x99,0x42,
+    0x01,0xD1,0x31,0x09,0x02,0xE0,0x36,0x09,0x9E,0x42,0x13,0xD1,0x00,0x29,0x11,0xDB,
+    0x14,0x27,0x0E,0x46,0x7E,0x43,0x2A,0x4F,0xF6,0x19,0x16,0x96,0xF6,0x7C,0x37,0x07,
+    0x08,0xD1,0x6F,0x46,0x39,0x54,0x31,0x09,0x40,0x1C,0x09,0x01,0x16,0x9E,0x49,0x1C,
+    0xC0,0xB2,0xF1,0x74,0x52,0x1C,0xD2,0xB2,0x14,0x99,0x8A,0x42,0xD6,0xD3,0x37,0x28,
+    0x21,0xD2,0x00,0x28,0x9C,0xD1,0x1E,0x4F,0x0E,0xAB,0xC8,0x37,0x11,0xE0,0x0E,0x21,
+    0x41,0x43,0xCA,0x19,0x92,0x7A,0x16,0x07,0x36,0x0F,0x9E,0x5D,0x01,0x2E,0x06,0xD1,
+    0x12,0x09,0x9A,0x5C,0x01,0x2A,0x02,0xD1,0x79,0x5A,0x09,0x19,0x8C,0xB2,0x40,0x1C,
+    0xC0,0xB2,0x14,0x99,0x88,0x42,0x00,0xE0,0x08,0xE0,0xE8,0xD3,0x0F,0x48,0x40,0x68,
+    0x00,0x88,0xA0,0x42,0x02,0xD8,0x01,0x20,0x17,0xB0,0xF0,0xBD,0x6D,0x1C,0x15,0x98,
+    0xED,0xB2,0x85,0x42,0x00,0xDA,0x56,0xE7,0x00,0x20,0x09,0x4A,0x08,0xE0,0x14,0x21,
+    0x41,0x43,0x89,0x18,0xCB,0x7C,0x1B,0x09,0x1B,0x01,0x40,0x1C,0xCB,0x74,0xC0,0xB2,
+    0x13,0x99,0x88,0x42,0xF3,0xD3,0x00,0x20,0xE6,0xE7,0x00,0x00,0x30,0x00,0x00,0x20,
+    0xE0,0x0A,0x00,0x20,0x17,0xB5,0x6C,0x46,0xA1,0x88,0x20,0x88,0x63,0x89,0x0A,0x1A,
+    0x61,0x88,0x5B,0x1A,0x5A,0x43,0xE3,0x88,0x59,0x1A,0x23,0x89,0x18,0x1A,0x41,0x43,
+    0x50,0x1A,0x00,0x28,0x01,0xDD,0x01,0x20,0x1E,0xBD,0x00,0x20,0x1E,0xBD,0x00,0x00,
+    0xF3,0xB5,0x1D,0x4D,0x85,0xB0,0x68,0x68,0x0E,0x46,0xC4,0x6A,0x00,0x2C,0x27,0xD0,
+    0x03,0xAB,0x02,0xAA,0x01,0xA9,0x68,0x46,0xA0,0x47,0x00,0x28,0x21,0xD0,0x17,0x49,
+    0x70,0x00,0x08,0x5A,0x69,0x46,0x0D,0x7B,0x0C,0x78,0x0B,0x79,0x0E,0x7A,0x5B,0x1C,
+    0x64,0x1E,0x6D,0x1C,0x76,0x1E,0x19,0xE0,0x0F,0x4A,0x81,0x04,0x52,0x68,0x49,0x0E,
+    0xD2,0x7F,0x40,0x06,0x40,0x0E,0x4A,0x43,0x12,0x18,0x57,0x00,0x05,0x9A,0xBA,0x18,
+    0xB1,0x42,0x05,0xDB,0xA9,0x42,0x03,0xDC,0xA0,0x42,0x01,0xDB,0x98,0x42,0x02,0xDD,
+    0x00,0x20,0x07,0xB0,0xF0,0xBD,0x10,0x88,0x80,0x04,0x80,0x0C,0x04,0x49,0x88,0x42,
+    0xE2,0xD1,0x01,0x20,0xF5,0xE7,0x00,0x00,0x30,0x00,0x00,0x20,0xA4,0x0A,0x00,0x20,
+    0xFF,0x3F,0x00,0x00,0xFF,0xB5,0x91,0xB0,0x00,0x20,0xBF,0x4B,0x05,0x90,0x5C,0x78,
+    0xA0,0x42,0x7D,0xD2,0x0E,0x21,0x48,0x43,0xBC,0x4A,0x0D,0x90,0x80,0x18,0x03,0x90,
+    0x80,0x7A,0x14,0x24,0x01,0x07,0x09,0x0F,0x0C,0x91,0x61,0x43,0x14,0x46,0xC8,0x3C,
+    0x09,0x19,0x04,0x91,0x89,0x89,0x00,0x09,0x07,0x91,0x0B,0x90,0x14,0x21,0x48,0x43,
+    0x05,0x19,0x0C,0x20,0x28,0x5E,0x07,0x99,0x88,0x42,0x01,0xDA,0xA8,0x89,0x07,0x90,
+    0x5C,0x68,0xE0,0x7A,0x40,0x09,0x7D,0xD1,0x03,0x99,0x08,0x73,0x0A,0x90,0xE0,0x7A,
+    0x06,0x90,0x00,0x07,0x52,0xD5,0x13,0x98,0x00,0x28,0x4F,0xD0,0x00,0x20,0x07,0x46,
+    0x00,0x90,0x06,0x46,0x08,0x90,0x43,0xE0,0x38,0x20,0x13,0x99,0x70,0x43,0x40,0x18,
+    0x01,0x90,0x40,0x78,0x00,0x28,0x39,0xD0,0x01,0x98,0xE1,0x7F,0x80,0x8C,0x48,0x43,
+    0x21,0x8C,0xFC,0xF7,0x53,0xFA,0xC0,0xB2,0x02,0x90,0x01,0x98,0xA1,0x7F,0xC0,0x8C,
+    0x48,0x43,0x61,0x8C,0xFC,0xF7,0x4A,0xFA,0x00,0x99,0xC0,0xB2,0x00,0x29,0x10,0xD1,
+    0x04,0x99,0x02,0x9A,0x09,0x7C,0x0B,0x09,0xD2,0x1A,0x52,0x1C,0x02,0x2A,0x08,0xD8,
+    0x09,0x07,0x09,0x0F,0x41,0x1A,0x49,0x1C,0x02,0x29,0x02,0xD8,0x01,0x20,0x00,0x90,
+    0x12,0xE0,0x00,0x2F,0x0D,0xD1,0x29,0x7C,0x02,0x9A,0x0B,0x09,0xD2,0x1A,0x52,0x1C,
+    0x02,0x2A,0x06,0xD8,0x09,0x07,0x09,0x0F,0x40,0x1A,0x40,0x1C,0x02,0x28,0x00,0xD8,
+    0x01,0x27,0x00,0x98,0x00,0x28,0x01,0xD0,0x00,0x2F,0x7D,0xD1,0x76,0x1C,0xF6,0xB2,
+    0x14,0x98,0x86,0x42,0xB8,0xD3,0x08,0x98,0x00,0x28,0xF6,0xD1,0x06,0x98,0x00,0xE0,
+    0xC9,0xE0,0xC0,0x06,0x71,0xD5,0x13,0x98,0x00,0x28,0x6E,0xD0,0x04,0x98,0x6B,0x7C,
+    0x46,0x7C,0x19,0x07,0x30,0x07,0x00,0x0F,0x09,0x0F,0x88,0x42,0x00,0xD3,0x08,0x46,
+    0x09,0x90,0x30,0x09,0x19,0x09,0x88,0x42,0x00,0xD8,0x08,0x46,0x08,0x90,0x04,0x98,
+    0xAB,0x7C,0x86,0x7C,0x19,0x07,0x30,0x07,0x00,0x0F,0x09,0x0F,0x88,0x42,0x00,0xD3,
+    0x08,0x46,0x00,0xE0,0x86,0xE0,0x02,0x90,0x30,0x09,0x19,0x09,0x88,0x42,0x00,0xD8,
+    0x08,0x46,0x00,0x90,0x00,0x20,0x67,0xE0,0x60,0x46,0x38,0x21,0x48,0x43,0x13,0x99,
+    0x00,0x22,0x40,0x18,0x41,0x78,0x00,0x29,0x5B,0xD0,0x20,0x30,0x41,0x7A,0x80,0x7A,
+    0x0F,0x09,0x06,0x09,0x09,0x07,0x00,0x07,0x09,0x0F,0x00,0x0F,0x01,0x96,0x7B,0x1A,
+    0x36,0x1A,0x5B,0x1C,0x76,0x1C,0x73,0x43,0xE6,0x79,0x9B,0xB2,0x9E,0x42,0x48,0xD8,
+    0x09,0x9B,0x99,0x42,0x00,0xD2,0x19,0x46,0x08,0x9E,0x3B,0x46,0xB7,0x42,0x00,0xD9,
+    0x33,0x46,0x0E,0x93,0x02,0x9B,0x98,0x42,0x00,0xD2,0x18,0x46,0x0F,0x90,0x01,0x9B,
+    0x00,0x98,0x83,0x42,0x00,0xD8,0x18,0x46,0x01,0x90,0x1F,0xE0,0x0F,0x98,0x18,0xE0,
+    0xE3,0x7F,0x4B,0x43,0x1B,0x18,0x5E,0x00,0x11,0x9B,0x9B,0x5B,0x9E,0x0B,0x0E,0xD0,
+    0x9E,0x04,0x77,0x0E,0x0C,0x9E,0xB7,0x42,0x04,0xD0,0x5E,0x06,0x0B,0x9B,0x76,0x0E,
+    0x9E,0x42,0x04,0xD1,0x52,0x1C,0x01,0xE0,0x37,0xE0,0x24,0xE0,0x92,0xB2,0x40,0x1C,
+    0xC0,0xB2,0x01,0x9B,0x98,0x42,0xE3,0xD9,0x49,0x1C,0xC9,0xB2,0x0E,0x98,0x81,0x42,
+    0xDC,0xD9,0x00,0x2A,0x0D,0xD0,0x04,0x99,0xEB,0x89,0xC9,0x89,0x3B,0x48,0xCB,0x18,
+    0x0D,0x99,0x40,0x5A,0x18,0x18,0x80,0xB2,0x41,0x00,0x40,0x18,0x80,0x08,0x90,0x42,
+    0x32,0xD3,0x60,0x46,0x40,0x1C,0xC0,0xB2,0x84,0x46,0x14,0x98,0x84,0x45,0x93,0xD3,
+    0x0A,0x98,0x00,0x28,0x2B,0xD1,0x06,0x98,0x40,0x07,0x0F,0xD5,0xA0,0x7A,0x21,0x79,
+    0x88,0x40,0x03,0x99,0x49,0x88,0x4A,0x00,0x12,0x99,0x8A,0x5E,0x07,0x99,0x89,0x1A,
+    0x88,0x42,0x03,0xDD,0x03,0x99,0x01,0x20,0x08,0x73,0x18,0xE0,0x06,0x98,0x80,0x07,
+    0x15,0xD5,0x28,0x7C,0x21,0x7C,0x02,0x09,0x00,0x07,0x00,0x0F,0x00,0x90,0x04,0x98,
+    0x01,0x92,0x02,0x91,0x00,0x7C,0x12,0x99,0x02,0x07,0x03,0x09,0x12,0x0F,0x11,0x98,
+    0xFE,0xF7,0x7E,0xFE,0x00,0x28,0x02,0xD0,0x03,0x98,0x01,0x21,0x01,0x73,0x05,0x98,
+    0x40,0x1C,0xC0,0xB2,0xB1,0xE6,0x00,0x20,0x29,0xE0,0x0E,0x21,0x02,0x46,0x4A,0x43,
+    0x16,0x49,0x51,0x18,0x0A,0x7B,0x00,0x2A,0x1F,0xD0,0x8D,0x7A,0x13,0x4F,0x2A,0x07,
+    0xC8,0x3F,0x12,0x0F,0x14,0x23,0x2D,0x09,0x14,0x26,0x5A,0x43,0x75,0x43,0xD3,0x19,
+    0xEE,0x19,0x0C,0x22,0x0C,0x25,0x9A,0x5E,0x75,0x5F,0x49,0x88,0xAA,0x42,0x06,0xDD,
+    0x4A,0x00,0x12,0x99,0x89,0x5E,0xA9,0x42,0x07,0xDD,0xB1,0x81,0x05,0xE0,0x4D,0x00,
+    0x12,0x99,0x49,0x5F,0x91,0x42,0x00,0xDD,0x99,0x81,0x40,0x1C,0xC0,0xB2,0xA0,0x42,
+    0xD3,0xD3,0x15,0xB0,0xF0,0xBD,0x00,0x00,0x30,0x00,0x00,0x20,0xA8,0x0B,0x00,0x20,
+    0xF0,0xB5,0x1E,0x4E,0x34,0x46,0x80,0x34,0xE3,0x6B,0x70,0x6C,0x1A,0x79,0x99,0x79,
+    0x40,0x33,0x51,0x43,0x9A,0x8A,0x9B,0x89,0xDB,0x08,0x5A,0x43,0x23,0x46,0xA0,0x33,
+    0x1B,0x7C,0x00,0x2B,0x04,0xD0,0xDB,0x07,0x00,0xD1,0x52,0x08,0x55,0x08,0x00,0xE0,
+    0x00,0x25,0x53,0x08,0x9A,0x18,0x93,0xB2,0xAA,0xB2,0xFD,0xF7,0xDF,0xFD,0xE1,0x6B,
+    0x88,0x7B,0x00,0x28,0x19,0xD0,0x0A,0x46,0x40,0x32,0x10,0x8A,0xD2,0x89,0x09,0x79,
+    0x12,0x09,0x50,0x43,0x42,0x08,0x15,0x18,0x87,0x08,0xAB,0xB2,0xBA,0xB2,0xF0,0x6E,
+    0xFD,0xF7,0xCC,0xFD,0xE1,0x6B,0x39,0x20,0x40,0x5C,0x00,0x28,0x05,0xD0,0xAB,0xB2,
+    0xBA,0xB2,0xC9,0x78,0x60,0x68,0xFD,0xF7,0xC1,0xFD,0xF0,0xBD,0x44,0x00,0x00,0x20,
+    0xFF,0xB5,0x83,0xB0,0x68,0x46,0x81,0x89,0x00,0x8A,0x86,0x46,0x71,0x45,0x01,0xD9,
+    0x0A,0x46,0x00,0xE0,0x02,0x46,0x6B,0x46,0x98,0x8A,0x1B,0x8B,0x9C,0x46,0x60,0x45,
+    0x00,0xD2,0x03,0x46,0x9A,0x42,0x4D,0xD3,0x6A,0x46,0xD3,0x89,0x52,0x8A,0x00,0x92,
+    0x93,0x42,0x01,0xD9,0x1C,0x46,0x00,0xE0,0x14,0x46,0x6D,0x46,0xEA,0x8A,0x6D,0x8B,
+    0x01,0x95,0xAA,0x42,0x00,0xD2,0x15,0x46,0xAC,0x42,0x3B,0xD3,0x74,0x46,0x71,0x45,
+    0x00,0xD2,0x0C,0x46,0x65,0x46,0x60,0x45,0x00,0xD9,0x05,0x46,0xAC,0x42,0x31,0xD8,
+    0x00,0x9C,0xA3,0x42,0x00,0xD2,0x1C,0x46,0x01,0x9D,0xAA,0x42,0x00,0xD9,0x15,0x46,
+    0xAC,0x42,0x27,0xD8,0x01,0x9C,0x9E,0x1A,0xA7,0x1A,0x64,0x46,0x24,0x1A,0x0D,0x1A,
+    0x66,0x43,0x7D,0x43,0x02,0x94,0xAD,0x1B,0x74,0x46,0x26,0x1A,0x00,0x9C,0x7E,0x43,
+    0xA7,0x1A,0x02,0x9C,0x67,0x43,0xF4,0x1B,0x65,0x43,0x00,0x2D,0x12,0xDC,0x44,0x1A,
+    0x00,0x98,0xD5,0x1A,0x72,0x46,0xC0,0x1A,0x52,0x1A,0x44,0x43,0x55,0x43,0x64,0x1B,
+    0x65,0x46,0x69,0x1A,0x41,0x43,0x01,0x98,0xC0,0x1A,0x50,0x43,0x08,0x1A,0x44,0x43,
+    0x00,0x2C,0x02,0xDD,0x00,0x20,0x07,0xB0,0xF0,0xBD,0x01,0x20,0xFB,0xE7,0x70,0xB5,
+    0x1E,0x46,0x14,0x46,0x05,0x00,0x04,0xD0,0x00,0x2C,0x02,0xD0,0xE8,0x00,0xA0,0x42,
+    0x05,0xDA,0x9A,0x42,0x01,0xDA,0x01,0x20,0x70,0xBD,0x00,0x20,0x70,0xBD,0x28,0x46,
+    0x49,0x43,0x68,0x43,0x09,0x1A,0x10,0x46,0x60,0x43,0x08,0x1A,0x29,0x46,0xC0,0x01,
+    0x61,0x43,0xFC,0xF7,0x5D,0xF8,0x80,0x38,0x42,0x00,0x01,0xD5,0x00,0x22,0x04,0xE0,
+    0xFF,0x20,0x01,0x30,0x82,0x42,0x00,0xDD,0x02,0x46,0x70,0x19,0x50,0x43,0x00,0x12,
+    0x80,0x19,0x84,0x42,0xE1,0xDC,0xDE,0xE7,0xF0,0xB5,0x18,0x4A,0xBC,0x23,0x9D,0x58,
+    0x20,0x32,0x94,0x7B,0x00,0x29,0x12,0xD0,0x14,0x4E,0x00,0x23,0xB6,0x8D,0x0B,0xE0,
+    0xC7,0x5C,0xB7,0x42,0x06,0xD1,0x28,0x7D,0x50,0x72,0x7F,0x2C,0x01,0xD2,0x64,0x1C,
+    0x94,0x73,0xF0,0xBD,0x5B,0x1C,0xDB,0xB2,0x8B,0x42,0xF1,0xD3,0xF0,0xBD,0xE8,0x7C,
+    0x00,0x21,0x84,0x42,0x01,0xD2,0x11,0x72,0xF0,0xBD,0x50,0x7A,0x01,0x28,0xFA,0xD9,
+    0x80,0x21,0x0C,0x43,0x40,0x1E,0xC0,0xB2,0x94,0x73,0x50,0x72,0x01,0x28,0xF3,0xD1,
+    0x10,0x7A,0x80,0x08,0x80,0x00,0x10,0x72,0xF0,0xBD,0x00,0x00,0x44,0x00,0x00,0x20,
+    0xF1,0xB5,0x84,0xB0,0x00,0x25,0x92,0xE0,0x00,0x20,0x69,0x46,0x08,0x73,0x14,0x20,
+    0x2E,0x46,0x4A,0x4F,0x46,0x43,0xF4,0x19,0xE0,0x7C,0x01,0x07,0x7E,0xD1,0x00,0x07,
+    0x00,0x0F,0x10,0x30,0xE0,0x74,0x03,0xAB,0x6A,0x46,0x29,0x46,0x04,0x98,0xFE,0xF7,
+    0x61,0xFC,0x01,0x21,0x63,0xE0,0x68,0x46,0x43,0x5C,0x14,0x20,0x3F,0x4A,0x43,0x43,
+    0x9C,0x46,0x98,0x18,0xE7,0x89,0xC3,0x89,0xFF,0x18,0xE7,0x81,0x67,0x68,0x43,0x68,
+    0xFF,0x18,0x67,0x60,0xA7,0x68,0x83,0x68,0xFF,0x18,0xA7,0x60,0x63,0x46,0x97,0x59,
+    0xD3,0x58,0xFB,0x18,0x93,0x51,0x67,0x7C,0x43,0x7C,0x3A,0x07,0x1B,0x07,0x12,0x0F,
+    0x1B,0x0F,0x9A,0x42,0x00,0xD2,0x13,0x46,0x3A,0x09,0x12,0x01,0x13,0x43,0x63,0x74,
+    0x47,0x7C,0x1A,0x09,0x3F,0x09,0xBA,0x42,0x00,0xD8,0x3A,0x46,0x1B,0x07,0x12,0x01,
+    0x1B,0x0F,0x1A,0x43,0x62,0x74,0xA3,0x7C,0x82,0x7C,0x1F,0x07,0x12,0x07,0x3F,0x0F,
+    0x12,0x0F,0x97,0x42,0x00,0xD3,0x17,0x46,0x1A,0x09,0x12,0x01,0x17,0x43,0xA7,0x74,
+    0x83,0x7C,0x3A,0x09,0x1B,0x09,0x9A,0x42,0x00,0xD8,0x1A,0x46,0x3B,0x07,0x12,0x01,
+    0x1B,0x0F,0x1A,0x43,0xA2,0x74,0x0C,0x23,0x0C,0x22,0xE3,0x5E,0x82,0x5E,0x93,0x42,
+    0x0F,0xDA,0xA2,0x81,0x22,0x7C,0x03,0x7C,0x12,0x07,0x1B,0x09,0x12,0x0F,0x1B,0x01,
+    0x1A,0x43,0x22,0x74,0x03,0x7C,0x12,0x09,0x12,0x01,0x1B,0x07,0x1B,0x0F,0x1A,0x43,
+    0x22,0x74,0xC2,0x7C,0x12,0x07,0x12,0x0F,0x49,0x1C,0xC2,0x74,0xC9,0xB2,0x68,0x46,
+    0x00,0x7B,0x81,0x42,0x97,0xD3,0x0E,0x48,0x0C,0x21,0x40,0x68,0x61,0x5E,0x82,0x8B,
+    0x91,0x42,0x06,0xDB,0x0E,0x21,0x61,0x5E,0x40,0x79,0x00,0xE0,0x05,0xE0,0x81,0x42,
+    0x03,0xDA,0xE0,0x7C,0x00,0x07,0x00,0x0F,0xE0,0x74,0x6D,0x1C,0xED,0xB2,0x04,0x48,
+    0x00,0x78,0x85,0x42,0x00,0xD2,0x67,0xE7,0x05,0xB0,0xF0,0xBD,0xE0,0x0A,0x00,0x20,
+    0x30,0x00,0x00,0x20,0xF0,0xB5,0x99,0xB0,0xFC,0x48,0x16,0x90,0xC0,0x6B,0xFB,0x4C,
+    0x05,0x79,0xC1,0x78,0x80,0x3C,0x0B,0x94,0x14,0x91,0xE0,0x34,0xE1,0x79,0x04,0x91,
+    0x40,0x7B,0x00,0x26,0x00,0x28,0x34,0xD0,0x20,0x46,0x40,0x30,0x13,0x90,0x00,0x7C,
+    0x00,0x28,0x3C,0xD0,0x13,0x98,0x00,0x7D,0x80,0x1C,0xC0,0xB2,0x02,0xF0,0x7E,0xF9,
+    0x01,0x21,0x00,0x20,0x02,0xF0,0x98,0xFB,0xED,0x48,0x81,0x8A,0x6B,0x46,0x99,0x82,
+    0xEC,0x49,0x8A,0x7C,0xDA,0x82,0xC2,0x88,0x1A,0x83,0xC2,0x89,0x5A,0x83,0x4A,0x7C,
+    0xDA,0x83,0x0A,0x7C,0x1A,0x84,0x11,0x22,0x4A,0x74,0x13,0x22,0x0A,0x74,0xE6,0x4A,
+    0x42,0x80,0x08,0x22,0xC2,0x80,0x00,0x22,0xC2,0x81,0xA3,0x20,0x88,0x74,0xDF,0x48,
+    0x22,0x79,0x80,0x38,0xC6,0x1D,0xC0,0x30,0xF9,0x36,0x15,0x90,0x00,0x2A,0x11,0xD0,
+    0x2A,0xE0,0x14,0x98,0x00,0x21,0x45,0x43,0xD8,0x48,0x6A,0x00,0x80,0x38,0x40,0x6D,
+    0xFF,0xF7,0x54,0xF8,0x26,0x71,0x26,0x72,0x66,0x72,0x19,0xB0,0xF0,0xBD,0x14,0x98,
+    0x40,0x1C,0xC2,0xE7,0x07,0x46,0x00,0x6B,0x00,0x78,0x01,0x90,0xCF,0x48,0x80,0x38,
+    0x41,0x6D,0xA8,0x00,0x0B,0x18,0x68,0x00,0x0A,0x18,0xF0,0x68,0x00,0x90,0x01,0x98,
+    0x01,0xF0,0x14,0xF9,0xB9,0x6B,0x1E,0x28,0x08,0x80,0x05,0xD2,0x00,0x20,0x20,0x72,
+    0x60,0x72,0x70,0x60,0x01,0x98,0x55,0xE1,0x00,0x20,0x0D,0x90,0x0A,0x90,0x09,0x90,
+    0xC2,0x48,0xA9,0x00,0x80,0x38,0x40,0x6D,0x10,0x90,0x41,0x18,0x0E,0x91,0x69,0x00,
+    0x41,0x18,0x00,0x20,0x0F,0x91,0x0C,0x90,0x60,0x79,0xC0,0x4F,0x00,0x28,0x07,0xD0,
+    0xA1,0x79,0x00,0x29,0x04,0xD0,0x70,0x68,0xFB,0xF7,0xE0,0xFE,0xC8,0xB2,0x0C,0x90,
+    0x04,0x99,0x0C,0x98,0x15,0x9E,0x48,0x43,0x17,0x90,0x31,0x6B,0x08,0x18,0x00,0x25,
+    0x11,0x90,0x6E,0xE0,0x0B,0x99,0x11,0x98,0xFF,0x31,0x01,0x31,0x40,0x5D,0xC9,0x68,
+    0x00,0x91,0x0E,0x9B,0x0F,0x9A,0x10,0x99,0x01,0xF0,0xD8,0xF8,0x6B,0x00,0x01,0xA9,
+    0xC8,0x52,0x17,0x98,0xF1,0x6B,0x40,0x00,0xC0,0x18,0x8E,0x46,0x09,0x5E,0x00,0x91,
+    0x01,0xA9,0xCA,0x5A,0x71,0x46,0x0A,0x52,0x84,0x46,0x01,0xA8,0xC0,0x5E,0x00,0x99,
+    0x41,0x1A,0x00,0xD5,0x49,0x42,0x40,0x18,0x00,0xB2,0x01,0xA9,0xC8,0x52,0xB2,0x6B,
+    0x61,0x46,0x51,0x5A,0x42,0x1A,0x19,0x2A,0x05,0xDD,0x42,0x00,0x80,0x18,0x08,0x18,
+    0x80,0x10,0x01,0xA9,0x04,0xE0,0x4A,0x00,0x8A,0x18,0x10,0x18,0x01,0xA9,0x80,0x10,
+    0xC8,0x52,0xB2,0x6B,0xC9,0x5A,0x60,0x46,0x11,0x52,0x01,0xA8,0xC0,0x5E,0xB8,0x42,
+    0x01,0xDA,0x07,0x46,0x0D,0x95,0x09,0x99,0x88,0x42,0x01,0xDD,0x0A,0x95,0x09,0x90,
+    0x28,0x2F,0x1C,0xDA,0x20,0x79,0x00,0x28,0x19,0xD1,0x20,0x7A,0xA8,0x42,0x16,0xD1,
+    0x61,0x7A,0x0C,0x98,0x81,0x42,0x12,0xD1,0x0B,0x98,0xFF,0x30,0x01,0x30,0x41,0x68,
+    0x49,0x1E,0x41,0x60,0x25,0x72,0x0C,0x98,0x60,0x72,0x69,0x46,0x04,0x20,0x08,0x5E,
+    0x1E,0x28,0x03,0xDA,0x20,0x79,0x00,0x28,0x00,0xD1,0x20,0x72,0x9B,0xE0,0x15,0x98,
+    0x40,0x68,0x80,0x7A,0xCA,0x28,0x0D,0xD0,0x60,0x79,0x00,0x28,0x07,0xD0,0x6D,0x1C,
+    0xED,0xB2,0x04,0x98,0x85,0x42,0x8D,0xD3,0x04,0x28,0x04,0xD0,0x1F,0xE0,0x25,0x72,
+    0x00,0x20,0x60,0x72,0x87,0xE0,0x0A,0x98,0x03,0x28,0x02,0xD0,0x00,0x28,0x0B,0xD0,
+    0x15,0xE0,0x6A,0x46,0x06,0x20,0x04,0x21,0x10,0x5E,0x51,0x5E,0x88,0x42,0x01,0xDA,
+    0x01,0x20,0x0B,0xE0,0x00,0x20,0x09,0xE0,0x6A,0x46,0x08,0x20,0x0A,0x21,0x10,0x5E,
+    0x51,0x5E,0x88,0x42,0x01,0xDA,0x02,0x20,0x00,0xE0,0x03,0x20,0x0D,0x90,0xF2,0x6A,
+    0x0C,0x99,0x0D,0x98,0x50,0x54,0x65,0x7A,0x0A,0x95,0x20,0x7A,0x00,0x90,0x0D,0x90,
+    0xA2,0x79,0x0C,0x99,0x65,0x4F,0x00,0x20,0x0C,0x92,0x13,0xE0,0xF2,0x6A,0x12,0x5C,
+    0xFF,0x2A,0x0C,0xD0,0x04,0x9B,0x52,0x00,0x43,0x43,0x5B,0x00,0x9A,0x18,0xB3,0x6B,
+    0x94,0x46,0x9A,0x5A,0xBA,0x42,0x02,0xDA,0x61,0x46,0x5F,0x5E,0x01,0x46,0x40,0x1C,
+    0x0C,0x9A,0xC0,0xB2,0x82,0x42,0xE9,0xD8,0x58,0x48,0x87,0x42,0x03,0xD0,0xF0,0x6A,
+    0x0D,0x46,0x40,0x5C,0x0D,0x90,0x0B,0x98,0xFF,0x30,0x01,0x30,0x84,0x46,0x80,0x68,
+    0x0C,0x90,0x00,0x28,0x24,0xD0,0x0D,0x99,0x00,0x98,0x88,0x42,0x02,0xD1,0x0A,0x98,
+    0xA8,0x42,0x1B,0xD0,0x04,0x99,0x0A,0x98,0xB3,0x6B,0x48,0x43,0x41,0x00,0x00,0x98,
+    0x40,0x00,0x08,0x18,0x19,0x5A,0x04,0x98,0x68,0x43,0x42,0x00,0x0D,0x98,0x40,0x00,
+    0x10,0x18,0x18,0x5A,0x1E,0x30,0x81,0x42,0x0C,0x98,0x14,0xD9,0x40,0x1C,0x61,0x46,
+    0x88,0x60,0x06,0x28,0x14,0xD3,0x0D,0x98,0x20,0x72,0x65,0x72,0x01,0x20,0x0D,0xE0,
+    0xA1,0x72,0xF0,0x6A,0x43,0x5C,0xE3,0x72,0x61,0x72,0x41,0x5C,0x21,0x72,0x01,0x20,
+    0x61,0x46,0x88,0x60,0x07,0xE0,0x01,0x28,0x02,0xD9,0x40,0x1E,0x61,0x46,0x88,0x60,
+    0x0D,0x98,0xE0,0x72,0xA5,0x72,0x09,0x98,0x50,0x28,0x0C,0xDD,0x1E,0x20,0x20,0x71,
+    0x09,0x99,0xFF,0x22,0xC9,0x19,0x5F,0x32,0x91,0x42,0x19,0xDD,0x0B,0x99,0xFF,0x31,
+    0x01,0x31,0x48,0x80,0x14,0xE0,0x0B,0x98,0xFF,0x30,0x01,0x30,0x41,0x88,0x00,0x29,
+    0x01,0xD0,0x49,0x1E,0x41,0x80,0x09,0x99,0x1E,0x29,0x09,0xDA,0x21,0x79,0x00,0x29,
+    0x06,0xD0,0x49,0x1E,0x09,0x06,0x09,0x0E,0x21,0x71,0x01,0xD1,0x00,0x69,0x80,0x47,
+    0xA7,0x82,0x09,0x98,0xE0,0x82,0x60,0x7A,0x04,0x99,0x32,0x6B,0x48,0x43,0x21,0x7A,
+    0x10,0x18,0x40,0x5C,0x16,0x99,0x00,0x02,0xC9,0x6B,0x20,0x31,0x89,0x78,0x08,0x43,
+    0x17,0x49,0x08,0x81,0x6A,0x46,0x90,0x8A,0x88,0x82,0x16,0x48,0xD2,0x8A,0x82,0x74,
+    0x6A,0x46,0x12,0x8B,0xCA,0x80,0x6A,0x46,0x52,0x8B,0xCA,0x81,0x6A,0x46,0xD2,0x8B,
+    0x42,0x74,0x6A,0x46,0x12,0x8C,0x02,0x74,0x11,0x4A,0x4A,0x80,0x81,0x7C,0x49,0x06,
+    0x49,0x0E,0x81,0x74,0x0B,0x9C,0xFF,0x34,0x01,0x34,0xE0,0x68,0x80,0x47,0x13,0x98,
+    0x00,0x7C,0x00,0x28,0x16,0xD0,0x13,0x98,0x00,0x7D,0x40,0x1C,0xC0,0xB2,0x01,0xF0,
+    0xA5,0xFF,0x60,0x68,0x40,0x1C,0x60,0x60,0x57,0xE6,0x00,0x00,0xC4,0x00,0x00,0x20,
+    0x00,0x10,0x00,0x40,0xE0,0x12,0x00,0x40,0x82,0x11,0x00,0x00,0xFF,0x7F,0x00,0x00,
+    0x82,0x10,0x00,0x00,0x14,0x98,0xEA,0xE7,0xFE,0xB5,0x07,0x46,0x01,0xF0,0xA6,0xFF,
+    0x00,0x20,0x02,0xF0,0x57,0xF9,0x02,0xF0,0xC1,0xFB,0x44,0x49,0x38,0x46,0xFC,0xF7,
+    0x25,0xFE,0x0A,0x20,0x02,0xF0,0x1A,0xFA,0x00,0x25,0x2C,0x46,0x00,0xF0,0x8C,0xF8,
+    0x40,0x19,0x64,0x1C,0xA4,0xB2,0x85,0xB2,0x08,0x2C,0xF7,0xD3,0xED,0x08,0xBD,0x71,
+    0x28,0x0A,0xF8,0x71,0x28,0x46,0x23,0x30,0xC0,0x08,0x38,0x72,0x28,0x46,0x23,0x38,
+    0xC0,0x10,0x78,0x72,0x7D,0x21,0x35,0x4A,0xC9,0x00,0x38,0x1D,0xFD,0xF7,0xB6,0xFE,
+    0x14,0x20,0x02,0xF0,0xFB,0xF9,0x32,0x48,0x00,0x24,0x01,0x46,0xE0,0x31,0xFF,0x30,
+    0x21,0x30,0x26,0x46,0x01,0x91,0x00,0x90,0x01,0x99,0x00,0x20,0x88,0x70,0x2D,0x49,
+    0x01,0x20,0xC8,0x71,0xFD,0xF7,0xE2,0xFE,0x2B,0x49,0x45,0x20,0x08,0x80,0x29,0x49,
+    0x10,0x20,0xC8,0x71,0x00,0xF0,0x58,0xF8,0x01,0x46,0x40,0x1B,0x00,0xB2,0x76,0x1C,
+    0x02,0x46,0x18,0x32,0xB6,0xB2,0x30,0x2A,0x11,0xD8,0x22,0x18,0x14,0xB2,0xB2,0x07,
+    0x0D,0xD1,0x78,0x2C,0x03,0xDD,0x6D,0x1C,0xAD,0xB2,0x78,0x3C,0x06,0xE0,0x95,0x22,
+    0xD2,0x43,0x94,0x42,0x03,0xDA,0x6D,0x1E,0xAD,0xB2,0x96,0x34,0x24,0xB2,0x23,0x30,
+    0x46,0x28,0x09,0xD8,0x19,0x48,0x86,0x42,0x0A,0xD3,0x00,0x98,0x02,0x22,0x42,0x70,
+    0x17,0x4A,0x01,0x20,0x50,0x77,0x0D,0xE0,0x00,0x9A,0x01,0x20,0x50,0x70,0x09,0xE0,
+    0x01,0x98,0x80,0x78,0x00,0x28,0xBF,0xD0,0x00,0x98,0x03,0x22,0x42,0x70,0x01,0x9A,
+    0x00,0x20,0x90,0x70,0xB9,0x72,0x08,0x0A,0xF8,0x72,0x00,0x98,0x0D,0x49,0x40,0x78,
+    0x38,0x73,0x00,0x20,0x88,0x72,0x00,0x99,0x88,0x70,0x0A,0x20,0x02,0xF0,0x9E,0xF9,
+    0xFE,0xF7,0xEE,0xFE,0x01,0x20,0x01,0xF0,0xED,0xFE,0xFE,0xBD,0xF9,0x47,0x00,0x00,
+    0x44,0x00,0x00,0x20,0x00,0x20,0x00,0x40,0x00,0x10,0x00,0x40,0xC4,0x09,0x00,0x00,
+    0x44,0x01,0x00,0x20,0x00,0x03,0x00,0x40,0x0B,0x48,0x0C,0x49,0x82,0x6A,0x01,0x20,
+    0x88,0x72,0x09,0x48,0x00,0x21,0x60,0x30,0x01,0x70,0x09,0x49,0x11,0x23,0x8B,0x80,
+    0x43,0x23,0x0B,0x80,0x00,0xE0,0x30,0xBF,0x01,0x78,0x00,0x29,0xFB,0xD0,0x10,0x68,
+    0x40,0x1C,0x00,0x88,0x70,0x47,0x00,0x00,0xC4,0x00,0x00,0x20,0x00,0x03,0x00,0x40,
+    0x00,0x10,0x00,0x40,0x70,0xB5,0x28,0x48,0x80,0x23,0x03,0x72,0xD8,0x05,0x41,0x88,
+    0x04,0x22,0x91,0x43,0x41,0x80,0x26,0x49,0x24,0x48,0x48,0x80,0x25,0x4A,0xD0,0x6B,
+    0x04,0x46,0x41,0x30,0x45,0x78,0x06,0x78,0x28,0x02,0x30,0x43,0x40,0xBA,0x08,0x81,
+    0x20,0x46,0x40,0x30,0x04,0x78,0xFF,0x34,0xFF,0x34,0x02,0x34,0x4C,0x81,0xC5,0x78,
+    0x04,0x79,0x2D,0x01,0x1D,0x43,0x1C,0x4B,0x2C,0x43,0x9C,0x74,0x23,0x24,0x1C,0x74,
+    0x18,0x24,0x5C,0x74,0xFF,0x23,0x02,0x33,0xCB,0x81,0x40,0x79,0xC8,0x80,0x10,0x46,
+    0x00,0x21,0x60,0x38,0x14,0x4B,0xC1,0x75,0x08,0x46,0xE0,0x3B,0x84,0x00,0xE4,0x18,
+    0x21,0x70,0x40,0x1C,0xC0,0xB2,0x0A,0x28,0xF8,0xD3,0x00,0x20,0x20,0x23,0x91,0x6A,
+    0x03,0xE0,0x10,0xC9,0x23,0x70,0x40,0x1C,0xC0,0xB2,0xD4,0x6B,0x24,0x79,0x84,0x42,
+    0xF7,0xD8,0x02,0x20,0x02,0xF0,0x56,0xF8,0x02,0x20,0x01,0xF0,0x73,0xFE,0x05,0x48,
+    0x01,0x21,0xA0,0x30,0x81,0x70,0x70,0xBD,0x00,0x03,0x00,0x40,0x83,0x10,0x00,0x00,
+    0x00,0x10,0x00,0x40,0xC4,0x00,0x00,0x20,0xE0,0x12,0x00,0x40,0x02,0xF0,0xBA,0xFA,
+    0x05,0x4C,0x60,0x7D,0x00,0x28,0x04,0xD0,0x06,0x28,0xFA,0xD1,0x02,0xF0,0xD2,0xFF,
+    0xF7,0xE7,0x03,0xF0,0x8D,0xF8,0xF4,0xE7,0x64,0x00,0x00,0x20,0xF7,0xB5,0x0C,0x46,
+    0x27,0x49,0x00,0x27,0x49,0x68,0x03,0x46,0x8D,0x7F,0xC9,0x7F,0x23,0x4A,0x4D,0x43,
+    0x39,0x46,0x03,0xE0,0x49,0x1C,0x02,0x80,0x89,0xB2,0x80,0x1C,0xA9,0x42,0xF9,0xD3,
+    0x00,0x26,0x33,0xE0,0x02,0x9A,0x00,0x2A,0x02,0xD0,0x92,0x5D,0x00,0x2A,0x01,0xD0,
+    0x00,0x25,0x24,0xE0,0xC0,0x7F,0x40,0x00,0xC3,0x18,0x04,0x19,0x24,0xE0,0x00,0x20,
+    0x20,0x5E,0xC9,0x78,0x88,0x42,0x16,0xDB,0xFE,0xF7,0x18,0xFA,0xC0,0xB2,0xB8,0x42,
+    0x00,0xD9,0x07,0x46,0x13,0x49,0x40,0x00,0x09,0x5A,0x10,0x4A,0x91,0x42,0x06,0xD0,
+    0x1A,0x88,0x89,0x04,0x92,0x0B,0x92,0x03,0x89,0x0C,0x0A,0x43,0x1A,0x80,0xF1,0x01,
+    0x0C,0x4A,0x29,0x43,0x11,0x52,0x6D,0x1C,0x9B,0x1C,0xED,0xB2,0xA4,0x1C,0x08,0x48,
+    0x41,0x68,0xC8,0x7F,0xA8,0x42,0xDA,0xD8,0x76,0x1C,0xF6,0xB2,0x04,0x49,0x48,0x68,
+    0x82,0x7F,0xB2,0x42,0xC6,0xD8,0x38,0x46,0xFE,0xBD,0x00,0x00,0xFF,0x3F,0x00,0x00,
+    0x30,0x00,0x00,0x20,0xA4,0x0A,0x00,0x20,0x70,0xB5,0x01,0x22,0xD2,0x02,0x11,0x1A,
+    0x00,0x29,0x00,0xDC,0x81,0x1A,0x8D,0xB2,0x09,0x4E,0x01,0x21,0x4A,0x00,0xB4,0x5A,
+    0x23,0x1A,0x00,0x2B,0x00,0xDC,0x03,0x1B,0x9A,0xB2,0xAA,0x42,0x04,0xD2,0x49,0x1C,
+    0xC9,0xB2,0x15,0x46,0x5A,0x29,0xF1,0xD9,0x49,0x1E,0xC8,0xB2,0x70,0xBD,0x00,0x00,
+    0x96,0x7C,0x00,0x00,0x10,0xB5,0x03,0x48,0x40,0x88,0x00,0x28,0x01,0xD0,0x00,0xF0,
+    0x03,0xFF,0x10,0xBD,0x44,0x01,0x00,0x20,0x70,0x47,0x00,0x00,0x70,0xB5,0x17,0x49,
+    0x08,0x7D,0x0C,0x46,0x83,0x07,0x20,0x3C,0xBC,0x20,0x00,0x59,0x00,0x25,0xA2,0x79,
+    0x20,0x30,0x00,0x2B,0x02,0xDB,0x0B,0x7A,0xDB,0x09,0x0B,0xD0,0xA5,0x80,0xE5,0x70,
+    0xC3,0x79,0x9A,0x42,0x05,0xD1,0x00,0x7A,0x98,0x42,0x02,0xD0,0xA0,0x71,0x01,0x20,
+    0x88,0x74,0x70,0xBD,0xE1,0x78,0x0A,0x4E,0x49,0x1C,0xCB,0xB2,0xE3,0x70,0xA1,0x88,
+    0xB1,0x42,0x01,0xD2,0x49,0x1C,0xA1,0x80,0x01,0x7B,0x8B,0x42,0xF1,0xD1,0x01,0x7A,
+    0x8A,0x42,0xEE,0xD1,0xC0,0x79,0xA0,0x71,0xE5,0x70,0x70,0xBD,0x64,0x00,0x00,0x20,
+    0x60,0xEA,0x00,0x00,0x01,0x22,0x03,0x28,0x05,0xD0,0x04,0x28,0x05,0xD0,0x08,0x28,
+    0x06,0xD0,0x00,0x22,0x07,0xE0,0x05,0x48,0x04,0xE0,0x04,0x48,0x09,0x30,0x01,0xE0,
+    0x02,0x48,0x19,0x30,0x08,0x60,0x10,0x46,0x70,0x47,0x00,0x00,0x4C,0x7D,0x00,0x00,
+    0x10,0xB5,0x01,0x24,0x03,0x28,0x05,0xD0,0x04,0x28,0x06,0xD0,0x08,0x28,0x08,0xD0,
+    0x00,0x24,0x0B,0xE0,0x06,0x4B,0x02,0x20,0x06,0xE0,0x05,0x4B,0x09,0x33,0x04,0x20,
+    0x02,0xE0,0x03,0x4B,0x19,0x33,0x08,0x20,0x08,0x70,0x13,0x60,0x20,0x46,0x10,0xBD,
+    0xA5,0x7D,0x00,0x00,0x10,0xB5,0x19,0x4C,0x00,0x20,0x20,0x71,0x01,0x21,0x61,0x71,
+    0xA0,0x82,0x21,0x46,0xE0,0x82,0x20,0x31,0x48,0x80,0x48,0x60,0x88,0x60,0xA0,0x72,
+    0xE0,0x72,0x20,0x72,0x60,0x72,0x02,0x22,0xFF,0x21,0x11,0x48,0xFE,0xF7,0x76,0xFC,
+    0x08,0x22,0x00,0x21,0x0F,0x48,0xFE,0xF7,0x71,0xFC,0x08,0x22,0x00,0x21,0x0E,0x48,
+    0xFE,0xF7,0x6C,0xFC,0x08,0x22,0x01,0x21,0x0C,0x48,0xFE,0xF7,0x67,0xFC,0x20,0x46,
+    0x07,0x49,0x20,0x38,0xC1,0x62,0x07,0x49,0x81,0x63,0x07,0x49,0xC1,0x63,0x08,0x49,
+    0x01,0x63,0x02,0x20,0xA0,0x71,0xE0,0x71,0x10,0xBD,0x00,0x00,0x24,0x01,0x00,0x20,
+    0x1C,0x00,0x00,0x20,0x1E,0x00,0x00,0x20,0x26,0x00,0x00,0x20,0x0C,0x00,0x00,0x20,
+    0xDC,0x7B,0x00,0x00,0xFE,0xB5,0x75,0x48,0x04,0x46,0x41,0x78,0x20,0x46,0xFF,0x30,
+    0x25,0x46,0x41,0x30,0xE0,0x35,0x20,0x34,0x01,0x90,0x05,0x29,0x1A,0xD9,0x80,0x79,
+    0x00,0x28,0x17,0xD1,0x6E,0x48,0x00,0x88,0x00,0x28,0x13,0xD1,0xA8,0x70,0x6D,0x4E,
+    0x01,0x27,0x07,0xE0,0xF7,0x71,0xFD,0xF7,0xB9,0xFC,0x10,0x20,0xF0,0x71,0xA8,0x78,
+    0x00,0x28,0x02,0xD1,0xA0,0x7C,0x00,0x28,0xF4,0xD0,0x67,0x49,0x45,0x20,0x08,0x80,
+    0x00,0xE0,0x30,0xBF,0xA0,0x7C,0x00,0x28,0xFB,0xD0,0x61,0x48,0x01,0x88,0x00,0x29,
+    0x02,0xD0,0x01,0x88,0x49,0x1E,0x01,0x80,0x5C,0x4F,0xC0,0x37,0x78,0x7F,0x01,0x28,
+    0x0D,0xD0,0x00,0x20,0x3E,0x46,0x40,0x36,0x70,0x77,0x78,0x7F,0x79,0x68,0x88,0x74,
+    0x79,0x7F,0x30,0x46,0x80,0x38,0x02,0x90,0x02,0x29,0x11,0xD0,0x3F,0xE0,0x57,0x48,
+    0x01,0x78,0x10,0x22,0x11,0x43,0x01,0x70,0x00,0x21,0xC1,0x71,0xFF,0x22,0x42,0x75,
+    0x02,0x75,0xC1,0x74,0x01,0x74,0x81,0x74,0x41,0x74,0xFD,0xF7,0x7F,0xFC,0xFC,0xE7,
+    0x4A,0x4B,0x64,0x20,0x9A,0x88,0x4E,0x49,0x00,0x91,0x00,0x2A,0x02,0xD0,0xD9,0x8C,
+    0x00,0x29,0x03,0xD0,0x00,0x9A,0x00,0x21,0x51,0x70,0x10,0xE0,0x00,0x99,0x49,0x78,
+    0x02,0x29,0x00,0xD1,0x02,0x20,0x71,0x6A,0x05,0x29,0x01,0xD8,0x02,0x28,0x04,0xD1,
+    0x02,0x99,0xC9,0x6B,0x20,0x31,0xC9,0x79,0x99,0x71,0x71,0x6A,0x49,0x1C,0x71,0x62,
+    0x71,0x6A,0x81,0x42,0x02,0xD2,0x60,0x7D,0x0A,0x28,0x08,0xD1,0x01,0x98,0x80,0x79,
+    0x00,0x28,0x15,0xD0,0x00,0x99,0x00,0x20,0x48,0x70,0x00,0x20,0x70,0x62,0x78,0x7F,
+    0xFB,0x21,0x00,0x28,0x31,0xD0,0xE8,0x78,0x01,0x28,0x18,0xD0,0xE8,0x78,0x02,0x28,
+    0x24,0xD0,0xE8,0x78,0x08,0x28,0x28,0xD2,0xE8,0x78,0x40,0x1C,0xE8,0x70,0x21,0xE0,
+    0x2A,0x48,0x40,0x6D,0xFF,0xF7,0x18,0xFD,0x00,0x98,0x40,0x78,0x01,0x28,0xE4,0xD1,
+    0x02,0x98,0xC0,0x6B,0x20,0x30,0x01,0x7A,0x24,0x48,0x81,0x71,0xDD,0xE7,0x23,0x48,
+    0x42,0x7A,0x00,0x2A,0x02,0xD1,0x80,0x88,0x04,0x28,0x04,0xD2,0x20,0x7D,0x08,0x40,
+    0x20,0x75,0x02,0x20,0x00,0xE0,0x08,0x20,0xE8,0x70,0x06,0xE0,0x1B,0x48,0x40,0x7A,
+    0x00,0x28,0x07,0xD0,0x20,0x7D,0x08,0x40,0x20,0x75,0x78,0x68,0x82,0x7A,0xCA,0x2A,
+    0x02,0xD0,0x0A,0xE0,0x03,0x20,0xD1,0xE7,0x02,0x7C,0x01,0x2A,0x05,0xD1,0x00,0x22,
+    0x02,0x74,0xE0,0x7C,0x01,0x22,0x10,0x43,0xE0,0x74,0x01,0x98,0x80,0x79,0x00,0x28,
+    0x02,0xD0,0x01,0x9A,0x40,0x1E,0x90,0x71,0x20,0x7D,0x40,0x07,0x08,0xD5,0x0F,0x48,
+    0x03,0x7C,0x02,0x9A,0xD2,0x6B,0x55,0x7C,0x01,0x22,0xAA,0x40,0x93,0x43,0x03,0x74,
+    0x20,0x7D,0x22,0x7D,0x40,0x07,0xC0,0x0F,0xC0,0x00,0xF7,0x23,0x1A,0x40,0x02,0x43,
+    0x22,0x75,0x20,0x7D,0x08,0x40,0x20,0x75,0xFE,0xBD,0x00,0x00,0x44,0x00,0x00,0x20,
+    0x02,0x00,0x00,0x20,0x00,0x20,0x00,0x40,0x00,0x10,0x00,0x40,0x00,0x03,0x00,0x40,
+    0x64,0x01,0x00,0x20,0x00,0xB5,0x01,0x20,0x80,0x07,0x42,0x88,0x04,0x21,0x8A,0x43,
+    0x42,0x80,0x0C,0x48,0x02,0x88,0x0A,0x43,0x02,0x80,0x0B,0x48,0x01,0x7A,0xC9,0x08,
+    0xC9,0x00,0x01,0x72,0x00,0x21,0x81,0x72,0x08,0x48,0x01,0x74,0x81,0x7C,0x49,0x06,
+    0x49,0x0E,0x81,0x74,0x01,0x20,0x01,0xF0,0x1D,0xFC,0x00,0x21,0x08,0x46,0x01,0xF0,
+    0x1B,0xFD,0x00,0xBD,0x00,0x10,0x00,0x40,0x00,0x03,0x00,0x40,0xE0,0x12,0x00,0x40,
+    0xF3,0xB5,0x87,0xB0,0x00,0x26,0x9B,0xE0,0x38,0x20,0x07,0x99,0x70,0x43,0x44,0x18,
+    0xA0,0x78,0x00,0x28,0x7E,0xD0,0x01,0x28,0x12,0xD0,0x03,0x28,0x04,0xD3,0x4B,0x48,
+    0x00,0x68,0xC0,0x79,0x00,0x28,0x10,0xD0,0xA0,0x89,0x21,0x8A,0x40,0x18,0xA1,0x8A,
+    0x40,0x1A,0x05,0xB2,0xE0,0x89,0x61,0x8A,0x40,0x18,0xE1,0x8A,0x40,0x1A,0x19,0xE0,
+    0x0C,0x25,0x0E,0x20,0x65,0x5F,0x20,0x5E,0x15,0xE0,0x21,0x8A,0xA0,0x89,0x49,0x00,
+    0x41,0x18,0xA0,0x8A,0x42,0x00,0x80,0x18,0x08,0x1A,0x21,0x8B,0x40,0x18,0x05,0xB2,
+    0x61,0x8A,0xE0,0x89,0x49,0x00,0x41,0x18,0xE0,0x8A,0x42,0x00,0x80,0x18,0x08,0x1A,
+    0x61,0x8B,0x40,0x18,0x00,0xB2,0x00,0x2D,0x01,0xDA,0x00,0x25,0x06,0xE0,0x33,0x49,
+    0x09,0x68,0x09,0x8A,0x49,0x1E,0xA9,0x42,0x00,0xDA,0x0D,0xB2,0x00,0x28,0x01,0xDA,
+    0x00,0x20,0x06,0xE0,0x2D,0x49,0x09,0x68,0x49,0x8A,0x49,0x1E,0x81,0x42,0x00,0xDA,
+    0x08,0xB2,0xA5,0x84,0xE0,0x84,0xE1,0x89,0x40,0x1A,0x28,0x49,0x09,0x68,0x02,0x91,
+    0x49,0x78,0x05,0x91,0x48,0x43,0x02,0x99,0x49,0x8A,0xFB,0xF7,0xA1,0xF9,0x21,0x46,
+    0x20,0x31,0x00,0x91,0x01,0x91,0x49,0x7A,0x04,0x91,0x0A,0x07,0x12,0x0F,0x82,0x18,
+    0x09,0x09,0x40,0x18,0x40,0xB2,0x03,0x90,0xA0,0x89,0x02,0x99,0x28,0x1A,0x8D,0x78,
+    0x57,0xB2,0x68,0x43,0x09,0x8A,0xFB,0xF7,0x8B,0xF9,0x01,0x99,0x8A,0x7A,0x11,0x07,
+    0x09,0x0F,0x41,0x18,0x13,0x09,0xC0,0x18,0x49,0xB2,0x40,0xB2,0x00,0x2F,0x00,0xDA,
+    0x00,0x27,0x05,0x9B,0x03,0x9C,0x5B,0x1E,0xA3,0x42,0x01,0xDA,0x5B,0xB2,0x03,0x93,
+    0x00,0x29,0x00,0xE0,0x12,0xE0,0x00,0xDA,0x00,0x21,0x6D,0x1E,0x85,0x42,0x00,0xDA,
+    0x68,0xB2,0x03,0x9C,0x3B,0x07,0x1B,0x0F,0x24,0x01,0x23,0x43,0x09,0x07,0x00,0x9C,
+    0x09,0x0F,0x00,0x01,0x63,0x72,0x01,0x43,0x00,0x98,0x81,0x72,0x76,0x1C,0xF6,0xB2,
+    0x08,0x98,0x86,0x42,0x00,0xD2,0x5F,0xE7,0x09,0xB0,0xF0,0xBD,0x38,0x00,0x00,0x20,
+    0x03,0x48,0x02,0x49,0x81,0x60,0xC0,0x68,0x70,0x47,0x00,0x00,0xC0,0x7F,0x00,0x00,
+    0x00,0x01,0x00,0x40,0x01,0x46,0x09,0x48,0x30,0xB5,0x03,0x46,0x40,0x33,0x1D,0x46,
+    0xC4,0x6B,0xC0,0x3D,0x18,0x89,0x2D,0x7A,0x22,0x79,0x80,0xB2,0x01,0x2D,0x02,0xD1,
+    0x18,0x8A,0xE2,0x79,0x80,0xB2,0xFD,0xF7,0x1D,0xFC,0x30,0xBD,0xC4,0x00,0x00,0x20,
+    0xFE,0xB5,0x49,0x48,0x48,0x49,0x40,0x7A,0x80,0x31,0x00,0x25,0x00,0x91,0x00,0x28,
+    0x12,0xD0,0xC9,0x6B,0x00,0x9A,0x00,0x20,0xC9,0x7A,0x52,0x69,0x0A,0xE0,0x38,0x23,
+    0x43,0x43,0xD3,0x56,0x00,0x2B,0x03,0xDD,0x6D,0x1C,0xED,0xB2,0xA9,0x42,0x03,0xD0,
+    0x40,0x1C,0xC0,0xB2,0x81,0x42,0xF2,0xD8,0x00,0x20,0x3B,0x4F,0x3B,0x4C,0x06,0x46,
+    0x20,0x37,0x01,0x90,0x1D,0xE0,0x00,0x98,0x41,0x69,0x38,0x20,0x70,0x43,0x08,0x56,
+    0x00,0x28,0x14,0xDD,0x02,0xAA,0x21,0x46,0x30,0x46,0x01,0xF0,0xDF,0xFD,0x01,0x98,
+    0x64,0x1D,0x00,0x28,0x07,0xD1,0x38,0x7A,0xC0,0x09,0xC0,0x01,0x28,0x43,0x20,0x70,
+    0xAB,0x20,0x60,0x70,0xA4,0x1C,0x01,0x98,0x40,0x1C,0xC0,0xB2,0x01,0x90,0x76,0x1C,
+    0xF6,0xB2,0x00,0x98,0xC0,0x6B,0xC0,0x7A,0xB0,0x42,0xDC,0xD8,0x38,0x7A,0xC1,0x09,
+    0x0A,0xD0,0x20,0x70,0xB8,0x7A,0x00,0x2D,0x60,0x70,0x01,0xD0,0xA4,0x1C,0x05,0xE0,
+    0x80,0x20,0x60,0x71,0xA4,0x1D,0x01,0xE0,0x01,0x2D,0x02,0xD9,0xAB,0x20,0x20,0x70,
+    0x64,0x1C,0x20,0x46,0xFD,0xF7,0xF8,0xFC,0x1C,0x48,0x01,0x79,0x49,0x06,0x49,0x0E,
+    0x01,0x71,0x01,0x79,0x1A,0x4A,0x12,0x7A,0xD2,0x09,0xD2,0x01,0x11,0x43,0x01,0x71,
+    0x03,0x46,0x20,0x33,0x05,0x2D,0x23,0xD2,0x39,0x7A,0x00,0x20,0xC9,0x09,0x01,0xD0,
+    0x03,0x20,0x03,0xE0,0x01,0x2D,0x01,0xD9,0x01,0x20,0x03,0xE0,0x00,0x2D,0x01,0xD1,
+    0x01,0x25,0x00,0x20,0x6D,0x1E,0xA9,0x00,0x69,0x18,0x08,0x18,0xC0,0x1D,0xC4,0xB2,
+    0x68,0x46,0x04,0x72,0x55,0x22,0x09,0x49,0x00,0x20,0x05,0xE0,0x0D,0x78,0x49,0x1C,
+    0xAA,0x18,0x40,0x1C,0xD2,0xB2,0x80,0xB2,0xA0,0x42,0xF7,0xD3,0x1A,0x70,0xFE,0xBD,
+    0x00,0x20,0x18,0x70,0xFE,0xBD,0x00,0x00,0x44,0x00,0x00,0x20,0xEB,0x08,0x00,0x20,
+    0x84,0x01,0x00,0x20,0x0A,0x46,0x10,0xB5,0x0F,0x49,0x03,0x46,0x4C,0x7D,0x00,0x20,
+    0x01,0x2C,0x10,0xD0,0x4C,0x7D,0x05,0x2C,0x0D,0xD0,0x4C,0x7D,0x08,0x2C,0x0A,0xD0,
+    0x4C,0x7D,0x04,0x2C,0x0A,0xD0,0x4A,0x7D,0x03,0x2A,0x02,0xD0,0x49,0x7D,0x06,0x29,
+    0x00,0xD1,0x01,0x20,0x10,0xBD,0x48,0x7D,0x19,0x46,0x01,0xE0,0x19,0x46,0x04,0x20,
+    0x00,0xF0,0x04,0xF8,0xF5,0xE7,0x00,0x00,0x64,0x00,0x00,0x20,0xF7,0xB5,0x24,0x4D,
+    0x86,0xB0,0xE9,0x6B,0x04,0x91,0xA9,0x6B,0x13,0x46,0x03,0x91,0x04,0x28,0x0C,0xD0,
+    0x68,0x46,0xFD,0xF7,0x89,0xFC,0x0B,0x22,0x69,0x46,0x18,0x46,0xFE,0xF7,0x86,0xF9,
+    0x07,0x98,0x01,0xF0,0xCD,0xFB,0x09,0xB0,0xF0,0xBD,0x19,0x4C,0x6F,0x6D,0x80,0x34,
+    0xE0,0x6B,0xAB,0x6D,0xC6,0x78,0x00,0x79,0x46,0x43,0x68,0x46,0xFD,0xF7,0x44,0xFC,
+    0x32,0x46,0x19,0x46,0x38,0x46,0xFE,0xF7,0x71,0xF9,0xBE,0x19,0x0B,0x22,0x69,0x46,
+    0x30,0x46,0xFE,0xF7,0x6B,0xF9,0xE0,0x6B,0x0B,0x36,0x02,0x79,0x30,0x46,0x69,0x6F,
+    0xFE,0xF7,0x64,0xF9,0xE0,0x6B,0x01,0x79,0xC2,0x78,0x8E,0x19,0x30,0x46,0xE9,0x6D,
+    0xFE,0xF7,0x5C,0xF9,0xE0,0x6B,0xC1,0x78,0x02,0x79,0x8D,0x19,0x28,0x46,0x04,0x99,
+    0xFE,0xF7,0x54,0xF9,0xE0,0x6B,0x03,0x99,0x02,0x79,0x50,0x19,0xC6,0xE7,0x00,0x00,
+    0x44,0x00,0x00,0x20,0x10,0xB5,0x0C,0x46,0x01,0x46,0x0B,0x48,0xC0,0x6B,0xC2,0x78,
+    0x03,0x79,0xC0,0x79,0xD2,0x18,0x05,0x28,0x01,0xD2,0x04,0x20,0x00,0xE0,0x08,0x20,
+    0x10,0x18,0x42,0x00,0x04,0x48,0x80,0x38,0x80,0x6D,0xFE,0xF7,0x37,0xF9,0x20,0x46,
+    0x01,0xF0,0x7E,0xFB,0x10,0xBD,0x00,0x00,0xC4,0x00,0x00,0x20,0xF8,0xB5,0x1E,0x4E,
+    0x30,0x7C,0x1E,0x4D,0x01,0x27,0xE9,0x6B,0x4A,0x7C,0x39,0x46,0x91,0x40,0x08,0x43,
+    0x30,0x74,0x2C,0x46,0x60,0x3C,0x60,0x7D,0x00,0x28,0x05,0xD0,0x18,0x49,0x14,0x20,
+    0xFF,0xF7,0x60,0xFF,0x00,0x28,0x25,0xD1,0x20,0x7D,0x00,0x07,0x02,0xD5,0x01,0x20,
+    0x02,0xF0,0x6E,0xFA,0x11,0x48,0x80,0x38,0x40,0x7A,0x00,0x28,0x07,0xD1,0xE9,0x6B,
+    0xA0,0x7B,0xC9,0x7C,0x88,0x42,0x15,0xD3,0x20,0x7A,0x00,0x06,0x12,0xD5,0x60,0x7C,
+    0x00,0x28,0x0F,0xD1,0x30,0x7C,0xE9,0x6B,0x49,0x7C,0x8F,0x40,0x38,0x43,0x30,0x74,
+    0x06,0x48,0x07,0x49,0x40,0x30,0x01,0x60,0xFF,0xF7,0xA2,0xFE,0x20,0x7D,0x04,0x21,
+    0x08,0x43,0x20,0x75,0xF8,0xBD,0x00,0x00,0x00,0x03,0x00,0x40,0xC4,0x00,0x00,0x20,
+    0xEB,0x08,0x00,0x20,0x00,0xB5,0x05,0x49,0xAA,0x20,0x88,0x80,0x04,0x48,0x00,0x21,
+    0x81,0x74,0x20,0x38,0x80,0x79,0x01,0xF0,0x81,0xFC,0x00,0xBD,0x00,0x02,0x00,0x40,
+    0x64,0x00,0x00,0x20,0xF0,0xB5,0x88,0x49,0x8D,0xB0,0x08,0x46,0x8E,0x78,0x80,0x30,
+    0x09,0x90,0xC0,0x6B,0x01,0x23,0x87,0x79,0x42,0x79,0x0A,0x92,0x02,0x79,0x09,0x6D,
+    0x72,0x43,0x52,0x00,0x8D,0x18,0x80,0x4A,0xE0,0x32,0x08,0x92,0x13,0x70,0xC0,0x3A,
+    0xD2,0x7D,0x00,0x2A,0x7E,0xD0,0x7D,0x4C,0xBE,0x42,0x7C,0xD2,0x22,0x46,0xA1,0x7C,
+    0x20,0x7C,0x20,0x3A,0xD2,0x6B,0x41,0x43,0x02,0x90,0x89,0x18,0x78,0x48,0x01,0x91,
+    0x81,0x7C,0x49,0x06,0x49,0x0E,0x81,0x74,0x00,0x21,0x03,0xA8,0xFF,0xF7,0x42,0xFE,
+    0xA0,0x7C,0x79,0x1E,0x82,0x19,0x8A,0x42,0x43,0xD2,0x00,0x2E,0x08,0xD1,0x00,0x28,
+    0x06,0xD1,0x00,0x21,0x01,0x20,0x01,0xF0,0xC7,0xFB,0x01,0x20,0x01,0xF0,0xA6,0xF9,
+    0x6B,0x48,0x81,0x7C,0x80,0x22,0x11,0x43,0x81,0x74,0xD0,0x05,0x41,0x88,0x08,0x22,
+    0x11,0x43,0x41,0x80,0x67,0x49,0x0A,0x88,0x02,0x23,0x1A,0x43,0x0A,0x80,0x41,0x88,
+    0x04,0x22,0x11,0x43,0x41,0x80,0x20,0x7C,0xA1,0x7C,0x82,0x1E,0x91,0x42,0x05,0xD0,
+    0x02,0x9A,0x01,0x2A,0x12,0xD1,0xBA,0x1E,0x96,0x42,0x0F,0xD1,0x42,0x00,0x92,0x19,
+    0xBA,0x42,0x01,0xD9,0x38,0x1A,0x01,0xE0,0xB6,0x1C,0x88,0x19,0x56,0x49,0xC0,0xB2,
+    0xC9,0x6D,0x08,0x5C,0x01,0x02,0x01,0x43,0x56,0x48,0xC1,0x81,0xE0,0x7C,0x00,0x21,
+    0x40,0x1C,0xC0,0xB2,0x01,0xF0,0x90,0xFB,0xE0,0x7C,0x40,0x1C,0xC0,0xB2,0x01,0xF0,
+    0x6D,0xF9,0x22,0x7C,0x0B,0xA8,0x01,0x99,0xFE,0xF7,0x60,0xF8,0x02,0x98,0x0A,0x9A,
+    0x00,0x02,0x10,0x43,0x11,0x21,0x00,0x90,0x01,0x91,0x03,0xA8,0x81,0xB2,0x0B,0xA8,
+    0xAB,0xB2,0xAA,0xB2,0x80,0xB2,0xFD,0xF7,0x01,0xFA,0x02,0x99,0xA0,0x7C,0x49,0x1E,
+    0x88,0x42,0x2A,0xD1,0x40,0x49,0x02,0x9A,0x8B,0x78,0x00,0x20,0x9A,0x18,0x8A,0x70,
+    0xA0,0x74,0x01,0xE0,0x64,0xE0,0x3C,0xE0,0x61,0x7C,0x02,0x29,0x04,0xD0,0x04,0x29,
+    0x04,0xD0,0x08,0x29,0x04,0xD0,0x04,0xE0,0x01,0x20,0x02,0xE0,0x02,0x20,0x00,0xE0,
+    0x03,0x20,0x02,0x99,0x01,0x29,0x12,0xD0,0x00,0x28,0x10,0xD0,0x22,0x7C,0x0A,0x99,
+    0x4A,0x43,0x00,0x21,0x06,0xE0,0x00,0x23,0xEB,0x5E,0x03,0x41,0x2B,0x80,0xAD,0x1C,
+    0x49,0x1C,0x89,0xB2,0x91,0x42,0xF6,0xD3,0x01,0xE0,0x40,0x1C,0xA0,0x74,0x2A,0x4A,
+    0x90,0x78,0x39,0x1A,0x20,0x7C,0x81,0x42,0x3C,0xDA,0x00,0x29,0x3A,0xDD,0x41,0x1A,
+    0x38,0x1A,0xC0,0xB2,0xCB,0xB2,0x90,0x70,0x09,0x99,0x12,0x6D,0xC9,0x6B,0x09,0x79,
+    0x48,0x43,0x40,0x00,0x80,0x18,0x59,0x43,0x4A,0x00,0x00,0x21,0xFE,0xF7,0x16,0xF8,
+    0x28,0xE0,0xBE,0x42,0x26,0xD1,0x01,0x22,0x92,0x07,0x54,0x88,0x04,0x23,0x9C,0x43,
+    0x54,0x80,0x00,0x79,0x18,0x4C,0x70,0x43,0x40,0x00,0x08,0x18,0x00,0x21,0xFF,0xF7,
+    0x89,0xFD,0x00,0x20,0x01,0xF0,0xC6,0xFA,0x00,0x21,0x08,0x46,0x01,0xF0,0xE4,0xF9,
+    0x01,0x21,0x32,0x46,0x08,0x46,0x01,0xF0,0xD9,0xFB,0x00,0x20,0x20,0x72,0x09,0x98,
+    0xC0,0x6B,0x40,0x30,0x81,0x8A,0x0F,0x48,0xC1,0x80,0x08,0x99,0x01,0x20,0x48,0x70,
+    0x0D,0xB0,0xF0,0xBD,0x08,0x48,0x80,0x78,0xB8,0x42,0x03,0xD0,0xE0,0x7C,0x40,0x1C,
+    0xE0,0x74,0xF5,0xE7,0x00,0x20,0x01,0xF0,0xA5,0xFA,0x08,0x99,0x01,0x20,0x48,0x70,
+    0xFF,0xF7,0x88,0xFC,0xEC,0xE7,0x00,0x00,0x44,0x00,0x00,0x20,0x64,0x01,0x00,0x20,
+    0xE0,0x12,0x00,0x40,0x00,0x10,0x00,0x40,0xFF,0xB5,0x01,0x20,0x81,0xB0,0x00,0x90,
+    0x01,0x2A,0x01,0xD1,0x00,0x20,0x00,0x90,0x3A,0x49,0x39,0x48,0x48,0x82,0x00,0x27,
+    0x62,0xE0,0x04,0x98,0xB9,0x00,0x0E,0x18,0x31,0x68,0x0F,0x20,0x08,0x70,0x30,0x68,
+    0xBF,0x21,0x20,0x38,0xC1,0x77,0x33,0x4C,0x33,0x48,0x20,0x81,0x33,0x48,0x60,0x81,
+    0x3A,0x46,0x03,0x21,0x00,0x98,0x01,0xF0,0x91,0xFB,0xA5,0x04,0x68,0x89,0x80,0x21,
+    0x08,0x43,0x68,0x81,0x2E,0x48,0x20,0x80,0x2D,0x48,0x42,0x38,0x20,0x80,0x01,0x21,
+    0x08,0x20,0xFD,0xF7,0x37,0xF8,0x69,0x89,0x80,0x20,0x81,0x43,0x69,0x81,0x00,0x24,
+    0x20,0x25,0x2C,0x43,0xE0,0xB2,0x01,0xF0,0x6B,0xF8,0x21,0x48,0x21,0x49,0x40,0x38,
+    0x48,0x82,0x01,0x21,0x64,0x20,0xFD,0xF7,0x25,0xF8,0x1E,0x49,0x21,0x48,0x48,0x82,
+    0x01,0x21,0x64,0x20,0xFD,0xF7,0x1E,0xF8,0x30,0x68,0x00,0x78,0x00,0x06,0x00,0xD4,
+    0xAC,0x43,0x6D,0x08,0xE5,0xD1,0x17,0x49,0x15,0x48,0x48,0x82,0x80,0x06,0x41,0x89,
+    0x80,0x22,0x11,0x43,0x41,0x81,0x3A,0x46,0x01,0x21,0x00,0x98,0x01,0xF0,0x56,0xFB,
+    0x31,0x68,0x30,0x20,0x08,0x70,0x30,0x68,0x00,0x21,0x20,0x38,0xC1,0x77,0x00,0x2C,
+    0x00,0xD1,0x01,0x24,0x02,0x98,0x10,0x49,0x04,0x80,0x02,0x98,0x80,0x1C,0x02,0x90,
+    0xAA,0x20,0x88,0x80,0x7F,0x1C,0xFF,0xB2,0x01,0x98,0x87,0x42,0x99,0xD3,0x01,0x20,
+    0x80,0x07,0x41,0x89,0x80,0x22,0x11,0x43,0x41,0x81,0x05,0xB0,0xF0,0xBD,0x00,0x00,
+    0xD0,0x82,0x00,0x00,0x00,0x10,0x00,0x40,0xE0,0xE8,0x00,0x00,0xFF,0x02,0x00,0x00,
+    0x45,0x08,0x00,0x00,0x90,0x80,0x00,0x00,0x00,0x02,0x00,0x40,0x70,0xB5,0x0E,0x4A,
+    0x0D,0x4C,0xD2,0x6B,0x80,0x3C,0x95,0x78,0x13,0x79,0xD6,0x79,0x92,0x79,0x64,0x6D,
+    0x5A,0x43,0x52,0x00,0xA3,0x18,0x00,0x22,0x0B,0xE0,0x00,0x24,0x1C,0x5F,0xAC,0x42,
+    0x04,0xDB,0x0C,0x78,0x02,0x55,0x0C,0x78,0x64,0x1C,0x0C,0x70,0x9B,0x1C,0x52,0x1C,
+    0xD2,0xB2,0xB2,0x42,0xF1,0xD3,0x70,0xBD,0xC4,0x00,0x00,0x20,0xFF,0xB5,0x30,0x49,
+    0x1C,0x46,0xC9,0x6B,0x83,0xB0,0x0E,0x79,0x0B,0x7B,0x00,0x02,0x20,0x31,0x01,0x93,
+    0x89,0x78,0x15,0x46,0x08,0x43,0x2B,0x49,0x0C,0x9A,0x08,0x81,0x00,0x2A,0x00,0xD0,
+    0x90,0x47,0x00,0x20,0x28,0x4A,0x05,0xE0,0x41,0x00,0x00,0x23,0x6A,0x52,0x40,0x1C,
+    0x63,0x52,0xC0,0xB2,0xB0,0x42,0xF7,0xD3,0x21,0x48,0x00,0x27,0x60,0x30,0x00,0x90,
+    0x2B,0xE0,0x22,0x49,0xA3,0x20,0x88,0x74,0x00,0x9A,0x00,0x20,0x10,0x70,0x1D,0x48,
+    0x11,0x22,0x82,0x80,0x45,0x22,0x02,0x80,0x43,0x22,0x02,0x80,0x00,0xE0,0x30,0xBF,
+    0x00,0x98,0x00,0x78,0x00,0x28,0xFA,0xD0,0x23,0x20,0x88,0x74,0x00,0x21,0x04,0x98,
+    0xFF,0xF7,0x70,0xFC,0x00,0x21,0x0C,0xE0,0x4A,0x00,0x04,0x98,0xAB,0x5E,0x80,0x5A,
+    0x83,0x42,0x00,0xDD,0xA8,0x52,0xA3,0x5E,0x83,0x42,0x00,0xDA,0xA0,0x52,0x49,0x1C,
+    0xC9,0xB2,0xB1,0x42,0xF0,0xD3,0x78,0x1C,0xC7,0xB2,0x01,0x99,0x8F,0x42,0xD0,0xD3,
+    0x00,0x21,0x08,0x46,0x07,0xE0,0x42,0x00,0xA3,0x5A,0xAA,0x5A,0x9A,0x1A,0x51,0x18,
+    0x40,0x1C,0x89,0xB2,0xC0,0xB2,0xB0,0x42,0xF5,0xD3,0x88,0x08,0x07,0xB0,0xF0,0xBD,
+    0xC4,0x00,0x00,0x20,0x00,0x10,0x00,0x40,0xFF,0x7F,0x00,0x00,0xE0,0x12,0x00,0x40,
+    0x30,0xB5,0x05,0x46,0x0C,0x46,0x10,0x46,0x01,0xF0,0xC0,0xFD,0x21,0x46,0x28,0x46,
+    0xFF,0xF7,0x38,0xFC,0x30,0xBD,0x00,0x00,0xF8,0xB5,0x26,0x4C,0xE0,0x6B,0x81,0x79,
+    0x42,0x79,0x20,0x46,0x51,0x43,0x80,0x38,0x4A,0x00,0x00,0x6D,0x00,0x21,0xFD,0xF7,
+    0xA5,0xFE,0x21,0x48,0x81,0x7C,0x80,0x22,0x11,0x43,0x81,0x74,0xE0,0x6B,0x54,0x21,
+    0x1E,0x4D,0x09,0x5A,0xE9,0x80,0x00,0x26,0x21,0x46,0x60,0x31,0x4E,0x70,0x0E,0x70,
+    0x20,0x30,0xC1,0x7D,0x80,0x7D,0x89,0x00,0x00,0x01,0x01,0x43,0x43,0x20,0x01,0x43,
+    0x17,0x48,0x01,0x72,0xA0,0x34,0xE6,0x74,0xD7,0x05,0x78,0x88,0x04,0x21,0x08,0x43,
+    0x78,0x80,0x10,0x48,0x80,0x38,0xC0,0x6D,0x00,0x78,0x01,0x02,0x01,0x43,0xE9,0x81,
+    0x00,0x21,0x02,0x20,0x01,0xF0,0x60,0xF8,0x00,0x20,0x00,0xF0,0x6F,0xFF,0x78,0x88,
+    0x08,0x21,0x08,0x43,0x78,0x80,0x11,0x20,0xA8,0x80,0x45,0x20,0x28,0x80,0x43,0x20,
+    0x28,0x80,0x04,0x48,0x80,0x38,0x86,0x70,0xA6,0x74,0xE0,0x7C,0x40,0x1C,0xE0,0x74,
+    0xF8,0xBD,0x00,0x00,0xC4,0x00,0x00,0x20,0xE0,0x12,0x00,0x40,0x00,0x10,0x00,0x40,
+    0x00,0x03,0x00,0x40,0x10,0xB5,0xFA,0xF7,0x9D,0xFF,0xFC,0xF7,0x9F,0xFC,0x11,0x4C,
+    0x00,0x20,0x20,0x72,0x20,0x46,0x02,0x21,0x20,0x30,0xC1,0x75,0xFF,0xF7,0x9C,0xFF,
+    0x60,0x78,0x05,0x28,0x04,0xD9,0xE0,0x1D,0xF9,0x30,0x40,0x7F,0x00,0x28,0x06,0xD0,
+    0x08,0x48,0xE0,0x30,0x41,0x78,0x00,0x29,0x09,0xD0,0xFC,0xF7,0x87,0xFC,0xFD,0xF7,
+    0x3F,0xF9,0x60,0x78,0xC8,0x28,0x01,0xD2,0x40,0x1C,0x60,0x70,0x10,0xBD,0x30,0xBF,
+    0xF0,0xE7,0x00,0x00,0x44,0x00,0x00,0x20,0x70,0xB5,0x1D,0x4E,0x3C,0x25,0x00,0x20,
+    0x33,0x6E,0x02,0x46,0x01,0x46,0x00,0x24,0x1C,0x5F,0xAC,0x42,0x01,0xDD,0x52,0x1C,
+    0x20,0x18,0x9B,0x1C,0x49,0x1C,0x09,0x29,0xF5,0xD3,0x00,0x21,0xB4,0x6F,0x0B,0x46,
+    0x00,0x26,0xA6,0x5F,0xAE,0x42,0x01,0xDD,0x49,0x1C,0x30,0x18,0xA4,0x1C,0x5B,0x1C,
+    0x08,0x2B,0xF5,0xD3,0x0F,0x4C,0x06,0x2A,0xA3,0x7F,0x01,0xD9,0x05,0x29,0x02,0xD8,
+    0x51,0x18,0x0B,0x29,0x07,0xD9,0xAF,0x21,0xC9,0x00,0x88,0x42,0x03,0xD9,0x0A,0x2B,
+    0x05,0xD2,0x5B,0x1C,0x02,0xE0,0x00,0x2B,0x01,0xD0,0x5B,0x1E,0xA3,0x77,0x05,0x48,
+    0x40,0x38,0x40,0x7E,0x00,0x28,0x01,0xD0,0x00,0x20,0xA0,0x77,0x70,0xBD,0x00,0x00,
+    0x44,0x00,0x00,0x20,0x44,0x01,0x00,0x20,0xF0,0xB5,0x60,0x48,0x8B,0xB0,0x81,0x6F,
+    0x80,0x30,0xC0,0x6B,0x0E,0x46,0xC7,0x78,0x00,0x79,0x09,0x90,0x5B,0x48,0xE0,0x30,
+    0xC0,0x8A,0x64,0x28,0x01,0xD2,0x00,0x20,0x06,0xE0,0x64,0x38,0xFF,0x22,0x80,0xB2,
+    0x91,0x32,0x90,0x42,0x00,0xD9,0x10,0x46,0x80,0x08,0xFA,0x30,0x07,0x90,0x00,0x20,
+    0x05,0x46,0x04,0x46,0x08,0x90,0x0B,0xE0,0x00,0x22,0x8A,0x5E,0x3C,0x2A,0x01,0xDD,
+    0x6D,0x1C,0xED,0xB2,0xA2,0x42,0x00,0xDD,0x14,0x46,0x89,0x1C,0x40,0x1C,0x80,0xB2,
+    0xB8,0x42,0xF1,0xD3,0xB8,0x00,0x05,0x21,0xFA,0xF7,0x88,0xFC,0xA8,0x42,0x07,0xD2,
+    0xFF,0x20,0x2D,0x30,0x84,0x42,0x03,0xDD,0xA0,0xB2,0x07,0x90,0x01,0x20,0x08,0x90,
+    0x07,0x98,0x84,0x42,0x00,0xDD,0x04,0xB2,0x00,0x25,0x58,0xE0,0x00,0x22,0x31,0x46,
+    0x20,0x39,0xB2,0x5E,0xC9,0x8B,0x6B,0x46,0x99,0x82,0xDA,0x82,0x71,0x88,0x10,0x46,
+    0x19,0x83,0x00,0x2D,0x08,0xD0,0x79,0x1E,0x8D,0x42,0x01,0xD1,0x00,0x21,0x19,0x83,
+    0x00,0x2A,0x04,0xDC,0x01,0x20,0x06,0xE0,0x00,0x21,0x99,0x82,0xF8,0xE7,0x07,0x9B,
+    0x9A,0x42,0x00,0xDD,0x18,0x46,0x6B,0x46,0x14,0x21,0x59,0x5E,0x8C,0x46,0x62,0x45,
+    0x14,0xDA,0x18,0x21,0x59,0x5E,0x8A,0x42,0x10,0xDA,0x1E,0x29,0x02,0xDC,0x62,0x46,
+    0x1E,0x2A,0x0B,0xDD,0x60,0x46,0x40,0x18,0x40,0x10,0x02,0xB2,0x32,0x80,0x00,0x2A,
+    0x04,0xDC,0x60,0x46,0x61,0x45,0x00,0xDC,0x01,0x46,0x48,0x10,0x08,0x99,0x00,0x29,
+    0x06,0xD0,0x3C,0x28,0x01,0xD9,0x3C,0x38,0x00,0xE0,0x01,0x20,0x3C,0x3C,0x24,0xB2,
+    0x1E,0x2C,0x0A,0xDD,0x00,0x02,0x21,0x46,0xFA,0xF7,0x30,0xFC,0x80,0xB2,0x69,0x00,
+    0x6A,0x46,0x50,0x52,0x00,0x28,0x05,0xD0,0x06,0xE0,0xFF,0x21,0x01,0x31,0x6A,0x00,
+    0x99,0x52,0x01,0xE0,0x01,0x20,0x50,0x52,0xB6,0x1C,0x6D,0x1C,0xAD,0xB2,0xBD,0x42,
+    0xA4,0xD3,0x00,0x22,0x1C,0xE0,0x11,0x48,0x51,0x00,0x40,0x6D,0x09,0x9B,0x41,0x18,
+    0x00,0x20,0x5E,0x00,0x10,0xE0,0x00,0x23,0xCB,0x5E,0x0F,0x2B,0x09,0xDB,0x45,0x00,
+    0x6C,0x46,0x65,0x5B,0x5D,0x43,0x2D,0x0A,0xEC,0x00,0x64,0x1B,0xE3,0x18,0xDB,0x10,
+    0x0B,0x80,0x71,0x18,0x40,0x1C,0xC0,0xB2,0xB8,0x42,0xEC,0xD3,0x52,0x1C,0xD2,0xB2,
+    0x09,0x98,0x82,0x42,0xDF,0xD3,0x0B,0xB0,0xF0,0xBD,0x00,0x00,0x44,0x00,0x00,0x20,
+    0xF7,0xB5,0x4E,0x48,0x86,0xB0,0x80,0x6F,0x05,0x90,0x4C,0x48,0x06,0x99,0x80,0x30,
+    0x47,0x68,0xC0,0x6B,0x80,0x79,0x04,0x90,0x00,0x20,0x08,0x80,0x03,0x46,0x05,0x46,
+    0x00,0x90,0x01,0x90,0x46,0x48,0x1C,0x46,0x2E,0x46,0x00,0x22,0x03,0x90,0x20,0xE0,
+    0x05,0x99,0x50,0x00,0x09,0x5A,0x38,0x5A,0x08,0x1A,0x00,0xB2,0x14,0x28,0x01,0xDB,
+    0x2D,0x18,0x04,0xE0,0x09,0x21,0xC9,0x43,0x88,0x42,0x00,0xDA,0x36,0x18,0x19,0x18,
+    0x0B,0xB2,0x00,0x99,0x81,0x42,0x00,0xDA,0x00,0x90,0x01,0x1B,0x04,0x46,0x01,0x98,
+    0x09,0xB2,0x88,0x42,0x00,0xDA,0x01,0x91,0x03,0x98,0x88,0x42,0x00,0xDD,0x03,0x91,
+    0x52,0x1C,0x04,0x98,0x82,0x42,0xDB,0xD3,0x01,0x46,0x18,0x46,0xFA,0xF7,0xC0,0xFB,
+    0x00,0x24,0x00,0xB2,0x86,0x46,0x20,0x46,0x84,0x46,0x21,0x46,0x02,0x94,0x17,0xE0,
+    0x05,0x9B,0x4A,0x00,0x9B,0x5A,0xBA,0x5A,0x9A,0x1A,0x12,0xB2,0x72,0x45,0x06,0xDB,
+    0x08,0x9B,0x9A,0x42,0x03,0xDD,0x40,0x1C,0x94,0x44,0xC0,0xB2,0x07,0xE0,0x00,0x2A,
+    0x00,0xDA,0x52,0x42,0x02,0x9B,0xD2,0x18,0x64,0x1C,0xE4,0xB2,0x02,0x92,0x49,0x1C,
+    0x04,0x9A,0x91,0x42,0xE4,0xD3,0x00,0x21,0x06,0x9A,0x0F,0x46,0x11,0x80,0x00,0x28,
+    0x15,0xD0,0x00,0x2C,0x16,0xD0,0x01,0x46,0x60,0x46,0xFA,0xF7,0x91,0xFB,0x04,0x90,
+    0x21,0x46,0x02,0x98,0xFA,0xF7,0x8C,0xFB,0x41,0x1C,0x04,0x98,0xFA,0xF7,0x88,0xFB,
+    0x06,0x99,0x80,0xB2,0x08,0x80,0x07,0x99,0x88,0x42,0x02,0xD3,0x02,0xE0,0x02,0x2C,
+    0x00,0xD3,0x01,0x27,0x64,0x2D,0x03,0xD8,0x63,0x20,0xC0,0x43,0x86,0x42,0x11,0xDA,
+    0x01,0x98,0x32,0x28,0x0D,0xDD,0x31,0x21,0x03,0x98,0xC9,0x43,0x88,0x42,0x08,0xDA,
+    0x96,0x2D,0x06,0xD9,0x00,0x98,0x3C,0x28,0x03,0xDD,0x77,0x20,0xC0,0x43,0x86,0x42,
+    0x00,0xDC,0x01,0x27,0x38,0x46,0x09,0xB0,0xF0,0xBD,0x00,0x00,0x44,0x00,0x00,0x20,
+    0xFF,0x7F,0x00,0x00,0xF1,0xB5,0x54,0x48,0x82,0xB0,0xC1,0x6B,0x02,0x46,0x86,0x46,
+    0x80,0x3A,0x90,0x6E,0x0E,0x79,0x84,0x46,0x13,0x6F,0xD0,0x6E,0x00,0x93,0x14,0x6E,
+    0x02,0x9A,0x00,0x2A,0x08,0xD0,0x4C,0x49,0x00,0x22,0x80,0x39,0x4A,0x61,0x8A,0x61,
+    0x00,0x21,0x0B,0x46,0x01,0x91,0x4B,0xE0,0x70,0x46,0x00,0x68,0xCE,0x78,0x84,0x46,
+    0x70,0x46,0x71,0x46,0x40,0x68,0x89,0x68,0x00,0x91,0x43,0x49,0x80,0x39,0x8C,0x6F,
+    0xEE,0xE7,0x59,0x00,0x62,0x46,0x52,0x5A,0x45,0x5A,0x1A,0x27,0x52,0x1B,0x15,0xB2,
+    0x65,0x52,0x72,0x46,0xD2,0x6B,0xD7,0x57,0xAF,0x42,0x09,0xDD,0x02,0x99,0x01,0x29,
+    0x2C,0xD1,0x39,0x4D,0x80,0x3D,0x6A,0x69,0x99,0x40,0x0A,0x43,0x6A,0x61,0x25,0xE0,
+    0x92,0x7D,0xAA,0x42,0x0E,0xDA,0x14,0x32,0xAA,0x42,0x01,0xDA,0x01,0x21,0x01,0x91,
+    0x02,0x99,0x01,0x29,0x1A,0xD1,0x30,0x4D,0x80,0x3D,0xAA,0x69,0x99,0x40,0x0A,0x43,
+    0xAA,0x61,0x13,0xE0,0x2C,0x4A,0x60,0x3A,0x12,0x79,0x00,0x2A,0x0E,0xD1,0x00,0x9D,
+    0x47,0x5E,0xED,0x5C,0x3A,0x02,0xAA,0x18,0x65,0x46,0x6D,0x5E,0xAD,0x00,0xAA,0x18,
+    0xBD,0x00,0x55,0x1B,0x2A,0x12,0x42,0x52,0x00,0x99,0xCD,0x54,0x5B,0x1C,0xDB,0xB2,
+    0xB3,0x42,0xBE,0xD3,0x20,0x49,0x80,0x31,0x49,0x7F,0x00,0x29,0x0B,0xD0,0x01,0x99,
+    0x00,0x29,0x08,0xD1,0x72,0x00,0x61,0x46,0xFD,0xF7,0x08,0xFC,0x32,0x46,0x00,0x21,
+    0x00,0x98,0xFD,0xF7,0x13,0xFC,0x00,0x20,0x13,0x23,0xDB,0x43,0x05,0x46,0x02,0x46,
+    0x47,0x1F,0x10,0xE0,0x51,0x00,0x61,0x5E,0xB9,0x42,0x03,0xDA,0x99,0x42,0x07,0xDA,
+    0x19,0x46,0x05,0xE0,0x05,0x29,0x03,0xDD,0x14,0x29,0x00,0xDD,0x14,0x21,0x6D,0x1C,
+    0x40,0x18,0x52,0x1C,0xD2,0xB2,0xB2,0x42,0xEC,0xD3,0x31,0x46,0xFA,0xF7,0xC8,0xFA,
+    0x03,0x2D,0x10,0xD9,0x00,0x22,0x0C,0xE0,0x53,0x00,0xE1,0x5E,0x00,0x28,0x05,0xDD,
+    0x81,0x42,0x02,0xDD,0x09,0x1A,0x09,0xB2,0x00,0xE0,0x01,0x21,0x52,0x1C,0xE1,0x52,
+    0xD2,0xB2,0xB2,0x42,0xF0,0xD3,0xFE,0xBD,0xC4,0x00,0x00,0x20,0x10,0xB5,0x01,0x46,
+    0x08,0x4A,0x10,0x20,0xD0,0x80,0x08,0x48,0x07,0x4B,0xC0,0x6B,0x01,0x22,0x20,0x30,
+    0xC0,0x7B,0x60,0x3B,0xDA,0x73,0x40,0x1E,0xA0,0x33,0xC0,0xB2,0x1A,0x77,0x00,0xF0,
+    0x05,0xF8,0x10,0xBD,0x00,0x10,0x00,0x40,0xC4,0x00,0x00,0x20,0xF3,0xB5,0x3C,0x4A,
+    0x8F,0xB0,0x10,0x6E,0x11,0x46,0x80,0x31,0x0C,0x90,0xC8,0x6B,0x10,0x9B,0x06,0x79,
+    0x01,0x2B,0x0E,0xD0,0xCD,0x68,0x91,0x6F,0x0C,0x91,0xC6,0x78,0x40,0x30,0xC0,0x89,
+    0x0D,0x90,0x02,0x20,0x0B,0x90,0x00,0x20,0x0A,0x90,0x00,0x20,0x03,0x46,0x31,0x4A,
+    0x07,0xE0,0x55,0x6F,0xF2,0xE7,0x44,0x00,0x69,0x46,0x0A,0x53,0x2B,0x54,0x40,0x1C,
+    0xC0,0xB2,0xB0,0x42,0xF7,0xD3,0x00,0x24,0x27,0x46,0x40,0xE0,0x01,0x21,0x10,0x98,
+    0x00,0xF0,0xF2,0xFA,0x00,0x20,0x1A,0xE0,0x01,0x21,0x81,0x40,0x8C,0x46,0x21,0x42,
+    0x13,0xD1,0x0C,0x9A,0x41,0x00,0x53,0x5E,0x0D,0x9A,0x9A,0x1A,0x00,0xD5,0x52,0x42,
+    0x6B,0x46,0x5B,0x5A,0x92,0xB2,0x93,0x42,0x02,0xD3,0x6B,0x46,0x5A,0x52,0x04,0xE0,
+    0x29,0x5C,0x49,0x1E,0x29,0x54,0x61,0x46,0x0C,0x43,0x40,0x1C,0xC0,0xB2,0xB0,0x42,
+    0xE2,0xD3,0x01,0x21,0x08,0x46,0xB0,0x40,0x40,0x1E,0xA0,0x42,0x02,0xD1,0x01,0x20,
+    0x0A,0x90,0x17,0xE0,0x0F,0x98,0x7F,0x1C,0x87,0x42,0x13,0xD2,0x00,0x20,0x0B,0x46,
+    0x0B,0xE0,0x29,0x5C,0x0F,0x9A,0x91,0x42,0x05,0xD2,0x1A,0x46,0x82,0x40,0x22,0x42,
+    0x01,0xD1,0x49,0x1C,0x29,0x54,0x40,0x1C,0xC0,0xB2,0xB0,0x42,0xF1,0xD3,0x0A,0x98,
+    0x00,0x28,0xBB,0xD0,0x0B,0x98,0x40,0x1E,0x00,0x06,0x00,0x0E,0x0B,0x90,0x02,0xD0,
+    0x0A,0x98,0x00,0x28,0xA1,0xD0,0x0A,0x98,0x11,0xB0,0xC0,0xB2,0xF0,0xBD,0x00,0x00,
+    0x44,0x00,0x00,0x20,0xFF,0xFF,0x00,0x00,0xF0,0xB5,0x8C,0x46,0x3D,0x49,0x00,0x28,
+    0xCE,0x6B,0xCC,0x69,0x35,0x79,0x4B,0x6A,0x02,0xD1,0xF5,0x78,0x8C,0x69,0x0B,0x6A,
+    0x05,0x2A,0x05,0xD0,0x01,0x2A,0x27,0xD0,0x03,0x2A,0x24,0xD1,0x00,0x20,0x66,0xE0,
+    0x00,0x20,0x1E,0xE0,0xC2,0x07,0xD2,0x0F,0x62,0x45,0x16,0xD1,0x22,0x68,0x91,0x1C,
+    0x56,0x1C,0x1F,0x3A,0x97,0x7F,0x8E,0x46,0x19,0x78,0x0F,0x43,0x97,0x77,0xD7,0x7F,
+    0x19,0x78,0x8F,0x43,0xD7,0x77,0x31,0x78,0x1A,0x78,0x91,0x43,0x31,0x70,0x71,0x46,
+    0x0A,0x78,0x19,0x78,0x8A,0x43,0x71,0x46,0x0A,0x70,0x24,0x1D,0x5B,0x1C,0x40,0x1C,
+    0xC0,0xB2,0xA8,0x42,0xDE,0xD3,0xF0,0xBD,0x00,0x20,0x1E,0xE0,0xC2,0x07,0xD2,0x0F,
+    0x62,0x45,0x16,0xD1,0x22,0x68,0x91,0x1C,0x56,0x1C,0x1F,0x3A,0x97,0x7F,0x8E,0x46,
+    0x19,0x78,0x8F,0x43,0x97,0x77,0xD7,0x7F,0x19,0x78,0x8F,0x43,0xD7,0x77,0x31,0x78,
+    0x1A,0x78,0x11,0x43,0x31,0x70,0x71,0x46,0x0A,0x78,0x19,0x78,0x8A,0x43,0x71,0x46,
+    0x0A,0x70,0x24,0x1D,0x5B,0x1C,0x40,0x1C,0xC0,0xB2,0xA8,0x42,0xDE,0xD3,0xF0,0xBD,
+    0xC2,0x07,0xD2,0x0F,0x62,0x45,0x16,0xD1,0x22,0x68,0x91,0x1C,0x56,0x1C,0x1F,0x3A,
+    0x97,0x7F,0x8E,0x46,0x19,0x78,0x8F,0x43,0x97,0x77,0xD7,0x7F,0x19,0x78,0x8F,0x43,
+    0xD7,0x77,0x31,0x78,0x1A,0x78,0x91,0x43,0x31,0x70,0x71,0x46,0x0A,0x78,0x19,0x78,
+    0x0A,0x43,0x71,0x46,0x0A,0x70,0x24,0x1D,0x5B,0x1C,0x40,0x1C,0xC0,0xB2,0xA8,0x42,
+    0xDE,0xD3,0xF0,0xBD,0xC4,0x00,0x00,0x20,0xF0,0xB5,0x36,0x4D,0x00,0x28,0xEE,0x6B,
+    0xEB,0x69,0x34,0x79,0x6A,0x6A,0x02,0xD1,0xF4,0x78,0xAB,0x69,0x2A,0x6A,0x05,0x29,
+    0x05,0xD0,0x01,0x29,0x22,0xD0,0x03,0x29,0x1F,0xD1,0x00,0x25,0x57,0xE0,0x00,0x25,
+    0x19,0xE0,0x01,0xCB,0x81,0x1C,0x8C,0x46,0x41,0x1C,0x1F,0x38,0x86,0x7F,0x17,0x78,
+    0x3E,0x43,0x86,0x77,0xC6,0x7F,0x17,0x78,0xBE,0x43,0xC6,0x77,0x08,0x78,0x16,0x78,
+    0xB0,0x43,0x08,0x70,0x61,0x46,0x08,0x78,0x11,0x78,0x52,0x1C,0x88,0x43,0x61,0x46,
+    0x08,0x70,0x6D,0x1C,0xED,0xB2,0xA5,0x42,0xE3,0xD3,0xF0,0xBD,0x00,0x25,0x19,0xE0,
+    0x01,0xCB,0x81,0x1C,0x8C,0x46,0x41,0x1C,0x1F,0x38,0x86,0x7F,0x17,0x78,0xBE,0x43,
+    0x86,0x77,0xC6,0x7F,0x17,0x78,0xBE,0x43,0xC6,0x77,0x08,0x78,0x16,0x78,0x30,0x43,
+    0x08,0x70,0x61,0x46,0x08,0x78,0x11,0x78,0x52,0x1C,0x88,0x43,0x61,0x46,0x08,0x70,
+    0x6D,0x1C,0xED,0xB2,0xA5,0x42,0xE3,0xD3,0xF0,0xBD,0x01,0xCB,0x81,0x1C,0x8C,0x46,
+    0x41,0x1C,0x1F,0x38,0x86,0x7F,0x17,0x78,0xBE,0x43,0x86,0x77,0xC6,0x7F,0x17,0x78,
+    0xBE,0x43,0xC6,0x77,0x08,0x78,0x16,0x78,0xB0,0x43,0x08,0x70,0x61,0x46,0x08,0x78,
+    0x11,0x78,0x52,0x1C,0x08,0x43,0x61,0x46,0x08,0x70,0x6D,0x1C,0xED,0xB2,0xA5,0x42,
+    0xE3,0xD3,0xF0,0xBD,0xC4,0x00,0x00,0x20,0xF8,0xB5,0x25,0x4A,0xD1,0x6B,0x16,0x46,
+    0x00,0x91,0x80,0x3E,0xF7,0x6E,0x0D,0x79,0xBE,0x46,0x37,0x6F,0x74,0x6E,0xB3,0x6E,
+    0x31,0x6E,0xBC,0x46,0x00,0x28,0x08,0xD1,0x00,0x98,0xB1,0x6F,0xC5,0x78,0x50,0x68,
+    0x13,0x68,0x86,0x46,0x90,0x68,0xF4,0x6F,0x84,0x46,0x19,0x48,0x80,0x38,0x40,0x78,
+    0x02,0x28,0x0A,0xD8,0x00,0x20,0x06,0xE0,0x42,0x00,0x8E,0x5A,0xA6,0x52,0x8E,0x5A,
+    0x40,0x1C,0x9E,0x52,0xC0,0xB2,0xA8,0x42,0xF6,0xD3,0x00,0x22,0x0B,0xE0,0x50,0x00,
+    0x0E,0x5E,0x77,0x00,0xF6,0x19,0x27,0x5E,0xF6,0x19,0xB6,0x10,0x1E,0x52,0x0E,0x5A,
+    0x52,0x1C,0x26,0x52,0xD2,0xB2,0xAA,0x42,0xF1,0xD3,0x09,0x48,0x80,0x38,0x40,0x78,
+    0x05,0x28,0x0C,0xD8,0x00,0x20,0x04,0x46,0x07,0xE0,0x41,0x00,0x5A,0x5A,0x76,0x46,
+    0x72,0x52,0x61,0x46,0x0C,0x54,0x40,0x1C,0xC0,0xB2,0xA8,0x42,0xF5,0xD3,0xF8,0xBD,
+    0xC4,0x00,0x00,0x20,0xF0,0xB5,0x6C,0x48,0x89,0xB0,0x01,0x88,0x08,0x91,0x41,0x88,
+    0x07,0x91,0xC1,0x88,0x06,0x91,0xC1,0x89,0x05,0x91,0x01,0x89,0x04,0x91,0x40,0x89,
+    0x03,0x90,0x66,0x48,0x01,0x7C,0x02,0x91,0x81,0x7C,0x01,0x91,0x40,0x7C,0x64,0x4C,
+    0x00,0x90,0xE2,0x6B,0x0E,0x25,0x90,0x7B,0x00,0x28,0x7D,0xD0,0x10,0x46,0x20,0x30,
+    0x81,0x7B,0xC3,0x7B,0xC6,0x78,0xC9,0x18,0x83,0x78,0x5E,0x4F,0x9B,0x19,0x9B,0x1C,
+    0x26,0x46,0x9C,0x46,0x60,0x36,0x33,0x7A,0x76,0x7A,0x89,0x1C,0x76,0x00,0xF6,0x19,
+    0x9E,0x5D,0x63,0x46,0xF3,0x18,0x4E,0x19,0xB3,0x42,0x02,0xD2,0x5B,0x00,0xB3,0x42,
+    0x01,0xD3,0x59,0x1A,0xCD,0xB2,0x81,0x7A,0x50,0x4B,0x09,0x01,0x49,0x1C,0x19,0x74,
+    0x10,0x21,0x59,0x74,0x86,0x7B,0x29,0x02,0x31,0x43,0x4B,0x4E,0x31,0x81,0x50,0x21,
+    0x89,0x5A,0xF1,0x80,0x11,0x7C,0xD2,0x7B,0x80,0x27,0x12,0x01,0x3A,0x43,0x11,0x43,
+    0x99,0x74,0x49,0x49,0x71,0x80,0x41,0x21,0x31,0x80,0xC0,0x7B,0xFF,0x30,0xFF,0x30,
+    0x02,0x30,0x70,0x81,0x00,0xF0,0xCE,0xFA,0xE0,0x6B,0x01,0x7C,0xC0,0x7B,0x00,0x01,
+    0x38,0x43,0x01,0x43,0x99,0x74,0x3E,0x48,0x3D,0x4F,0x80,0x38,0x40,0x78,0xA0,0x37,
+    0x01,0x28,0x12,0xD8,0x02,0x20,0x00,0xF0,0x85,0xFA,0x01,0x20,0xFF,0xF7,0xBE,0xFD,
+    0xE0,0x6B,0x20,0x30,0x40,0x7E,0x00,0x28,0x02,0xD0,0x00,0x20,0xFF,0xF7,0xB6,0xFD,
+    0x3D,0x70,0xE0,0x6B,0x40,0x30,0x00,0x8A,0xF0,0x80,0xE0,0x6B,0x20,0x30,0x40,0x7E,
+    0x00,0x28,0x1D,0xD0,0x01,0x21,0x08,0x46,0xFF,0xF7,0xBE,0xFE,0x38,0x78,0xFF,0x28,
+    0x07,0xD0,0xE1,0x6B,0x00,0x02,0x20,0x31,0x89,0x7B,0x08,0x43,0x30,0x81,0xFF,0x20,
+    0x38,0x70,0x00,0x21,0x08,0x46,0x00,0xF0,0xCF,0xF8,0x08,0x21,0x28,0x46,0x00,0xF0,
+    0x4D,0xF8,0xE0,0x6B,0x20,0x30,0x00,0xE0,0x3B,0xE0,0x40,0x7E,0x00,0x28,0x02,0xD1,
+    0x02,0x20,0x00,0xF0,0x4F,0xFA,0x00,0x21,0x01,0x20,0x00,0xF0,0xBD,0xF8,0x1B,0x4D,
+    0xA8,0x7C,0x40,0x06,0x40,0x0E,0xA8,0x74,0x01,0x20,0x00,0xF0,0x43,0xFA,0xE0,0x6B,
+    0x20,0x30,0x40,0x7E,0x00,0x28,0x07,0xD0,0x00,0x20,0xFF,0xF7,0xFD,0xFE,0x00,0x20,
+    0xFF,0xF7,0xC8,0xFC,0x00,0xF0,0xC2,0xF9,0x01,0x20,0xFF,0xF7,0xF5,0xFE,0x01,0x20,
+    0xFF,0xF7,0xC0,0xFC,0xFF,0xF7,0x18,0xFB,0x08,0x98,0x30,0x80,0x07,0x98,0x70,0x80,
+    0x06,0x98,0xF0,0x80,0x05,0x98,0xF0,0x81,0x04,0x98,0x30,0x81,0x03,0x98,0x70,0x81,
+    0x02,0x98,0x28,0x74,0x01,0x98,0xA8,0x74,0x00,0x98,0x68,0x74,0x02,0x20,0x00,0xF0,
+    0xF9,0xFB,0x09,0xB0,0xF0,0xBD,0x00,0x00,0x00,0x10,0x00,0x40,0xE0,0x12,0x00,0x40,
+    0xC4,0x00,0x00,0x20,0xDC,0x7B,0x00,0x00,0x83,0x10,0x00,0x00,0xF3,0xB5,0x05,0x46,
+    0x3A,0xA0,0x8F,0xB0,0x00,0x68,0x3A,0x4A,0x0C,0x90,0x90,0x6F,0x02,0x90,0x10,0x46,
+    0x80,0x30,0x0D,0x90,0x43,0x68,0xA0,0x30,0xFF,0x21,0x01,0x90,0x01,0x70,0x50,0x78,
+    0x02,0x28,0x04,0xD8,0x08,0x22,0x18,0x46,0x02,0x99,0xFD,0xF7,0x07,0xF9,0x30,0x48,
+    0xE0,0x30,0x00,0x79,0x00,0x28,0x56,0xD0,0x08,0x22,0x08,0xA8,0x02,0x99,0xFD,0xF7,
+    0xFD,0xF8,0x00,0x26,0x68,0x46,0x00,0x95,0x86,0x81,0x34,0x46,0x37,0x46,0x00,0x21,
+    0x08,0x46,0x00,0xF0,0x51,0xF8,0x32,0x22,0x0A,0x21,0x03,0xA8,0xFF,0xF7,0xC8,0xFB,
+    0x0E,0x90,0x68,0x46,0x80,0x89,0xB0,0x42,0x0C,0xD9,0x0F,0x28,0x0A,0xD3,0x08,0x22,
+    0x04,0xA8,0x02,0x99,0xFD,0xF7,0xE2,0xF8,0x68,0x46,0x86,0x89,0x1D,0x48,0x00,0x89,
+    0x00,0x0A,0x00,0x90,0x0E,0x98,0x00,0x28,0x1C,0xD0,0x68,0x46,0x80,0x89,0x14,0x28,
+    0x18,0xD2,0x04,0x2C,0x06,0xD2,0x0C,0xA8,0x00,0x5D,0x40,0x19,0x64,0x1C,0xC0,0xB2,
+    0xE4,0xB2,0x03,0xE0,0x00,0x24,0x2D,0x1D,0xED,0xB2,0x28,0x46,0x0D,0x99,0x00,0x02,
+    0xC9,0x6B,0x20,0x31,0x89,0x7B,0x08,0x43,0x0E,0x49,0x08,0x81,0x10,0x98,0x7F,0x1C,
+    0x87,0x42,0xC4,0xD3,0x0F,0x2E,0x06,0xD3,0x08,0x22,0x04,0xA9,0x02,0x98,0xFD,0xF7,
+    0xB5,0xF8,0x00,0x98,0x05,0xE0,0x08,0x22,0x08,0xA9,0x02,0x98,0xFD,0xF7,0xAE,0xF8,
+    0xFF,0x20,0x01,0x99,0x08,0x70,0x11,0xB0,0xF0,0xBD,0x00,0x00,0xFF,0x01,0xFE,0x02,
+    0x44,0x00,0x00,0x20,0x00,0x10,0x00,0x40,0xF3,0xB5,0x46,0x4D,0xBC,0x20,0x42,0x59,
+    0x85,0xB0,0x11,0x46,0x28,0x46,0x05,0x9C,0x43,0x4B,0x20,0x31,0xC0,0x30,0x01,0x2C,
+    0x22,0xD0,0xC6,0x68,0x00,0x7F,0xD4,0x78,0x02,0x02,0xAD,0x6F,0x02,0x43,0xDA,0x81,
+    0x08,0x7E,0x01,0x28,0x5E,0xD0,0x03,0x22,0x00,0x21,0x05,0x98,0xFF,0xF7,0x44,0xFD,
+    0x01,0x22,0x11,0x46,0x05,0x98,0xFF,0xF7,0x3F,0xFD,0x00,0x22,0x02,0x21,0x05,0x98,
+    0x00,0xF0,0x6C,0xF8,0x00,0xF0,0xD8,0xF8,0xB0,0xB2,0x22,0x46,0x69,0x46,0xFC,0xF7,
+    0x31,0xFA,0x00,0x20,0x6F,0x46,0x0F,0xE0,0x86,0x68,0x2E,0x48,0x14,0x79,0x20,0x30,
+    0xC0,0x7B,0x2D,0x6E,0x02,0x02,0x02,0x43,0xDA,0x81,0xC8,0x7A,0xD9,0xE7,0x41,0x00,
+    0x7A,0x5A,0x80,0x1C,0x6A,0x52,0xC0,0xB2,0xA0,0x42,0xF8,0xD3,0x00,0x22,0x03,0x21,
+    0x05,0x98,0x00,0xF0,0x4B,0xF8,0x01,0x22,0x00,0x21,0x05,0x98,0xFF,0xF7,0x14,0xFD,
+    0x03,0x22,0x01,0x21,0x05,0x98,0xFF,0xF7,0x0F,0xFD,0x01,0x22,0x02,0x21,0x05,0x98,
+    0x00,0xF0,0x3C,0xF8,0x1B,0x48,0x00,0x21,0xE0,0x30,0x01,0x70,0x00,0xF0,0xA4,0xF8,
+    0xB0,0xB2,0x22,0x46,0x69,0x46,0xFC,0xF7,0xFD,0xF9,0x01,0x20,0x04,0xE0,0x41,0x00,
+    0x7A,0x5A,0x80,0x1C,0x6A,0x52,0xC0,0xB2,0xA0,0x42,0xF8,0xD3,0x01,0x22,0x03,0x21,
+    0x05,0x98,0x00,0xF0,0x23,0xF8,0x01,0x22,0x11,0x46,0x05,0x98,0xFF,0xF7,0xEC,0xFC,
+    0x07,0xB0,0xF0,0xBD,0x03,0x21,0x05,0x98,0xFF,0xF7,0x66,0xFD,0x02,0x21,0x05,0x98,
+    0x00,0xF0,0x50,0xF8,0x00,0xF0,0x80,0xF8,0xB0,0xB2,0x22,0x46,0x29,0x46,0xFC,0xF7,
+    0xD9,0xF9,0x03,0x21,0x05,0x98,0x00,0xF0,0x45,0xF8,0x01,0x21,0x05,0x98,0xFF,0xF7,
+    0x53,0xFD,0xE5,0xE7,0x44,0x00,0x00,0x20,0x00,0x10,0x00,0x40,0xF0,0xB5,0x1C,0x4E,
+    0x97,0x00,0xF3,0x6B,0x34,0x46,0x9C,0x46,0x1D,0x79,0x80,0x3C,0xB3,0x6A,0x64,0x6F,
+    0xDB,0x19,0xA4,0x18,0x00,0x28,0x05,0xD1,0x60,0x46,0xC5,0x78,0xF0,0x6A,0xC3,0x19,
+    0xF0,0x68,0x84,0x18,0x02,0x29,0x03,0xD0,0x03,0x29,0x14,0xD1,0x00,0x20,0x1B,0xE0,
+    0x0F,0x21,0x09,0x02,0x80,0x26,0x0C,0xE0,0x20,0x78,0x1F,0x68,0x30,0x43,0xA4,0x1C,
+    0x08,0x43,0x20,0x3F,0xF8,0x77,0x0F,0x20,0x1F,0x68,0x08,0x33,0x38,0x70,0x92,0x1C,
+    0xD2,0xB2,0xAA,0x42,0xF0,0xD3,0xF0,0xBD,0x19,0x68,0x20,0x39,0xC8,0x77,0x19,0x68,
+    0x08,0x33,0x08,0x70,0x92,0x1C,0xD2,0xB2,0xAA,0x42,0xF5,0xD3,0xF0,0xBD,0x00,0x00,
+    0xC4,0x00,0x00,0x20,0x70,0xB5,0x17,0x4D,0xEE,0x6B,0x2B,0x46,0x80,0x3B,0x34,0x79,
+    0xAA,0x6A,0x5B,0x6F,0x00,0x28,0x02,0xD1,0xF4,0x78,0xEB,0x68,0xEA,0x6A,0x02,0x29,
+    0x04,0xD0,0x03,0x29,0x13,0xD1,0x00,0x20,0x01,0x46,0x18,0xE0,0x00,0x20,0x0F,0x21,
+    0x0B,0xE0,0x1D,0x78,0x16,0x68,0xAD,0x06,0xAD,0x0E,0x5B,0x1C,0x80,0x35,0x20,0x3E,
+    0xF5,0x77,0x20,0xCA,0x29,0x70,0x40,0x1C,0xC0,0xB2,0xA0,0x42,0xF1,0xD3,0x70,0xBD,
+    0x13,0x68,0x20,0x3B,0xD9,0x77,0x08,0xCA,0x19,0x70,0x40,0x1C,0xC0,0xB2,0xA0,0x42,
+    0xF6,0xD3,0x70,0xBD,0xC4,0x00,0x00,0x20,0x10,0xB5,0x09,0x4B,0x01,0x20,0x98,0x72,
+    0x08,0x48,0x00,0x22,0x02,0x70,0x08,0x49,0x11,0x24,0x8C,0x80,0x43,0x24,0x0C,0x80,
+    0x00,0xE0,0x30,0xBF,0x01,0x78,0x00,0x29,0xFB,0xD0,0x9A,0x72,0x10,0xBD,0x00,0x00,
+    0x00,0x03,0x00,0x40,0x24,0x01,0x00,0x20,0x00,0x10,0x00,0x40,0xFE,0xB5,0x2F,0x48,
+    0x80,0x6F,0x86,0x46,0x2D,0x48,0x80,0x30,0xC0,0x6B,0x81,0x79,0x20,0x30,0x85,0x7E,
+    0xC0,0x7E,0x00,0x90,0x8C,0x46,0x00,0x20,0x01,0x46,0x09,0xE0,0x4B,0x00,0x72,0x46,
+    0xD2,0x5E,0xAA,0x42,0x02,0xDD,0x90,0x42,0x00,0xD2,0x10,0x46,0x49,0x1C,0x09,0xB2,
+    0x61,0x45,0xF3,0xDB,0x21,0x4C,0x00,0x21,0xC0,0x34,0x38,0xE0,0x63,0x69,0x00,0x22,
+    0x5A,0x54,0x4A,0x00,0x01,0x92,0x73,0x46,0x9B,0x5E,0x66,0x7E,0x00,0x9A,0x2F,0x46,
+    0x00,0x2E,0x01,0xD0,0x14,0x37,0x0A,0x32,0xBB,0x42,0x26,0xDD,0x01,0x9F,0x1E,0x26,
+    0x77,0x44,0x02,0x97,0x20,0x3F,0xBE,0x5F,0x01,0x96,0x02,0x9F,0x02,0x26,0xBE,0x5F,
+    0x00,0x29,0x1F,0xD0,0x67,0x46,0x7F,0x1E,0xB9,0x42,0x00,0xD1,0x00,0x26,0x01,0x9F,
+    0xBB,0x42,0x01,0xDB,0xB3,0x42,0x05,0xDA,0x90,0x42,0x0E,0xD9,0x17,0x46,0x0A,0x3F,
+    0xBB,0x42,0x0A,0xDD,0x01,0x27,0x66,0x69,0x90,0x42,0x77,0x54,0x05,0xD9,0x0A,0x3A,
+    0x93,0x42,0x02,0xDC,0x63,0x69,0x00,0x22,0x5A,0x54,0x49,0x1C,0x09,0xB2,0x61,0x45,
+    0xC4,0xDB,0xFE,0xBD,0x00,0x27,0x01,0x97,0xE1,0xE7,0x00,0x00,0x44,0x00,0x00,0x20,
+    0x3F,0x28,0x01,0xD9,0x01,0x20,0x70,0x47,0xC1,0x08,0x40,0x07,0x40,0x0F,0x09,0x01,
+    0x01,0x43,0x88,0x20,0x01,0x43,0x02,0x48,0x81,0x74,0x00,0x20,0x70,0x47,0x00,0x00,
+    0xE0,0x12,0x00,0x40,0x70,0xB5,0x06,0x46,0x07,0x48,0x00,0x24,0xC0,0x6B,0xC5,0x78,
+    0x06,0xE0,0x22,0x46,0x31,0x46,0x01,0x20,0x00,0xF0,0xF0,0xFA,0x64,0x1C,0xE4,0xB2,
+    0xAC,0x42,0xF6,0xD3,0x70,0xBD,0x00,0x00,0xC4,0x00,0x00,0x20,0x06,0x21,0x09,0x4B,
+    0x10,0xB5,0x48,0x43,0xC1,0x18,0x08,0x4A,0x4C,0x78,0x54,0x70,0x18,0x5C,0x10,0x70,
+    0xC8,0x78,0x50,0x72,0x88,0x78,0x10,0x72,0x48,0x79,0x50,0x74,0x08,0x79,0x10,0x74,
+    0x10,0xBD,0x00,0x00,0xAC,0x09,0x00,0x20,0x40,0x03,0x00,0x40,0x04,0x48,0xFF,0x21,
+    0x01,0x70,0x00,0x22,0x42,0x70,0x01,0x72,0x42,0x72,0x01,0x74,0x42,0x74,0x70,0x47,
+    0x40,0x03,0x00,0x40,0x0F,0x48,0x40,0x68,0x81,0x7A,0xCA,0x29,0x19,0xD1,0xC1,0x7A,
+    0x0A,0x02,0x01,0x7B,0x0A,0x43,0x0C,0x49,0x0A,0x81,0x42,0x7B,0xFF,0x32,0xFF,0x32,
+    0x02,0x32,0x4A,0x81,0xC1,0x7B,0x80,0x7B,0x80,0x22,0x00,0x01,0x01,0x43,0x05,0x48,
+    0x40,0x38,0xC0,0x6B,0x20,0x30,0x80,0x79,0xC0,0x00,0x10,0x43,0x01,0x43,0x03,0x48,
+    0x81,0x74,0x70,0x47,0x04,0x01,0x00,0x20,0x00,0x10,0x00,0x40,0xE0,0x12,0x00,0x40,
+    0xF0,0xB5,0x8C,0x46,0x47,0x4B,0x46,0x49,0x1A,0x46,0x41,0x18,0xC0,0x32,0x34,0x29,
+    0x03,0xD8,0x45,0x48,0xD9,0x60,0x10,0x60,0xF0,0xBD,0x0D,0x21,0x09,0x03,0x41,0x1A,
+    0x36,0x29,0x01,0xD8,0xD9,0x60,0xF0,0xBD,0x3E,0x4C,0x01,0x21,0xC0,0x34,0x09,0x03,
+    0x65,0x68,0x88,0x42,0x01,0xD2,0x15,0x60,0x5E,0xE0,0x3A,0x4C,0x01,0x27,0x46,0x1A,
+    0x7F,0x03,0x20,0x34,0xBE,0x42,0x0F,0xD2,0x60,0x7D,0x04,0x28,0x0A,0xD0,0x60,0x7D,
+    0x05,0x28,0x07,0xD0,0x60,0x7D,0x06,0x28,0x04,0xD0,0x60,0x7D,0x0A,0x28,0x01,0xD0,
+    0x98,0x6C,0x1F,0xE0,0x58,0x6D,0x1D,0xE0,0x03,0x26,0x36,0x03,0x86,0x1B,0xBE,0x42,
+    0x01,0xD2,0x58,0x6C,0x16,0xE0,0x05,0x26,0x36,0x03,0x86,0x1B,0xBE,0x42,0x01,0xD2,
+    0x98,0x6D,0x0F,0xE0,0x07,0x26,0x36,0x03,0x86,0x1B,0x8E,0x42,0x36,0xD2,0x39,0x27,
+    0x7F,0x02,0xB8,0x42,0x0D,0xD2,0x60,0x7D,0x05,0x28,0x06,0xD0,0x60,0x7D,0x01,0x28,
+    0x05,0xD0,0xD8,0x6E,0x10,0x60,0xDE,0x60,0xF0,0xBD,0x18,0x6E,0xFA,0xE7,0x98,0x6E,
+    0xF8,0xE7,0x1D,0x25,0xAD,0x02,0xA8,0x42,0x0F,0xD2,0x61,0x7D,0x05,0x29,0x08,0xD0,
+    0x64,0x7D,0x18,0x49,0x80,0x31,0x01,0x2C,0x05,0xD0,0x49,0x68,0xC0,0x1B,0x11,0x60,
+    0x12,0xE0,0x99,0x6F,0xFA,0xE7,0x09,0x68,0xF8,0xE7,0x3B,0x21,0x49,0x02,0x88,0x42,
+    0x03,0xD2,0xD9,0x6B,0x40,0x1B,0x11,0x60,0x06,0xE0,0x0F,0x24,0xE4,0x02,0xA0,0x42,
+    0xDA,0xD2,0x9C,0x6B,0x40,0x1A,0x14,0x60,0xD8,0x60,0xF0,0xBD,0x01,0x21,0xC9,0x03,
+    0x41,0x1A,0xFF,0x29,0x02,0xD8,0x60,0x46,0x10,0x60,0x8B,0xE7,0x41,0x21,0x49,0x02,
+    0x40,0x1A,0xFF,0x28,0x01,0xD8,0x0A,0x35,0x8D,0xE7,0x04,0x48,0xEC,0xE7,0x00,0x00,
+    0x10,0x2E,0xFF,0xFF,0x44,0x00,0x00,0x20,0x50,0x7F,0x00,0x00,0xFF,0xFF,0x00,0x00,
+    0x04,0x48,0xFF,0x21,0x41,0x75,0x01,0x75,0x00,0x22,0xC2,0x74,0x01,0x74,0x82,0x74,
+    0x42,0x74,0x70,0x47,0x00,0x03,0x00,0x40,0x10,0xB5,0x0C,0x46,0x02,0x28,0x06,0xD0,
+    0x00,0x28,0x01,0xD0,0x01,0x28,0x01,0xD1,0x00,0xF0,0x0A,0xF8,0x10,0xBD,0x01,0x20,
+    0x00,0xF0,0x06,0xF8,0x00,0x21,0x20,0x46,0x00,0xF0,0x1E,0xF9,0x10,0xBD,0x00,0x00,
+    0x70,0xB5,0x0D,0x4C,0x00,0x23,0x26,0x46,0xE5,0x6B,0x80,0x3E,0x36,0x7A,0x2A,0x79,
+    0xA1,0x6A,0x01,0x2E,0x01,0xD1,0xEA,0x79,0x61,0x6B,0x00,0x28,0x02,0xD0,0x01,0x28,
+    0x00,0xD1,0x0F,0x23,0x00,0x20,0x03,0xE0,0x10,0xC9,0x23,0x70,0x40,0x1C,0xC0,0xB2,
+    0x90,0x42,0xF9,0xD3,0x70,0xBD,0x00,0x00,0xC4,0x00,0x00,0x20,0x10,0xB5,0x0F,0x49,
+    0xCB,0x6B,0x00,0x21,0xDA,0x79,0x15,0xE0,0x04,0x78,0x8C,0x42,0x10,0xD1,0x0B,0x48,
+    0x83,0x24,0x60,0x38,0x02,0x7A,0x22,0x43,0x02,0x72,0x1A,0x7D,0x42,0x72,0x0A,0x01,
+    0x17,0x32,0x82,0x72,0x02,0x46,0x20,0x3A,0x91,0x85,0x01,0x21,0x81,0x73,0x10,0xBD,
+    0x49,0x1C,0xC9,0xB2,0x91,0x42,0xE7,0xD3,0x10,0xBD,0x00,0x00,0xC4,0x00,0x00,0x20,
+    0xF8,0xB5,0x0D,0x4D,0x01,0x27,0x69,0x68,0x4F,0x71,0x0C,0x4E,0x31,0x7C,0x2C,0x46,
+    0x40,0x3C,0xE2,0x6B,0x3B,0x46,0x52,0x7C,0x93,0x40,0x99,0x43,0x31,0x74,0x00,0xF0,
+    0x43,0xFF,0x30,0x7C,0xE1,0x6B,0x49,0x7C,0x8F,0x40,0x38,0x43,0x30,0x74,0x69,0x68,
+    0x00,0x20,0x48,0x71,0xF8,0xBD,0x00,0x00,0x04,0x01,0x00,0x20,0x00,0x03,0x00,0x40,
+    0xF3,0xB5,0x83,0xB0,0x00,0x27,0x5D,0xE0,0x38,0x20,0x03,0x99,0x78,0x43,0x44,0x18,
+    0xA0,0x78,0x00,0x28,0x54,0xD0,0x20,0x46,0xF9,0xF7,0x7E,0xFF,0x00,0x90,0xA0,0x79,
+    0x00,0x28,0x0D,0xD0,0x63,0x8C,0x22,0x8C,0xE1,0x89,0xA0,0x89,0xFB,0xF7,0xFE,0xFE,
+    0x27,0x49,0x09,0x68,0x89,0x79,0x49,0x08,0x88,0x42,0x01,0xD2,0x00,0x20,0xA0,0x71,
+    0x60,0x79,0x01,0x28,0x02,0xD9,0xA0,0x79,0x00,0x28,0x05,0xD0,0x68,0x46,0x00,0x88,
+    0x20,0x84,0x68,0x46,0x40,0x88,0x32,0xE0,0x00,0x25,0x2E,0x46,0x11,0xE0,0xB0,0x00,
+    0x20,0x18,0x41,0x8A,0x00,0x8A,0x63,0x8C,0x22,0x8C,0xFB,0xF7,0xDF,0xFE,0x01,0x46,
+    0x17,0x48,0x00,0x68,0x80,0x79,0x81,0x42,0x01,0xD2,0x6D,0x1C,0xED,0xB2,0x76,0x1C,
+    0xF6,0xB2,0x60,0x79,0xB0,0x42,0xEA,0xD8,0xC6,0xB2,0xAE,0x42,0x01,0xD1,0x01,0x20,
+    0xA0,0x71,0x68,0x46,0x01,0x88,0x70,0x1B,0x41,0x43,0x01,0x90,0x20,0x8C,0x68,0x43,
+    0x08,0x18,0x31,0x46,0xF9,0xF7,0x24,0xFC,0x20,0x84,0x68,0x46,0x41,0x88,0x01,0x98,
+    0x41,0x43,0x60,0x8C,0x68,0x43,0x08,0x18,0x31,0x46,0xF9,0xF7,0x19,0xFC,0x60,0x84,
+    0x7F,0x1C,0xFF,0xB2,0x04,0x98,0x87,0x42,0x9E,0xD3,0x05,0xB0,0xF0,0xBD,0x00,0x00,
+    0x38,0x00,0x00,0x20,0xF0,0xB5,0x27,0x4B,0x1E,0x46,0xDC,0x6B,0x80,0x3E,0x36,0x7A,
+    0x25,0x79,0xDA,0x69,0x59,0x6A,0x01,0x2E,0x02,0xD1,0xE5,0x79,0x1A,0x6B,0x99,0x6B,
+    0x00,0x28,0x03,0xD0,0x02,0x28,0x1F,0xD1,0x00,0x24,0x38,0xE0,0x00,0x24,0x19,0xE0,
+    0x01,0xCA,0x83,0x1C,0x9C,0x46,0x43,0x1C,0x1F,0x38,0x86,0x7F,0x0F,0x78,0x3E,0x43,
+    0x86,0x77,0xC6,0x7F,0x0F,0x78,0xBE,0x43,0xC6,0x77,0x18,0x78,0x0E,0x78,0xB0,0x43,
+    0x18,0x70,0x63,0x46,0x18,0x78,0x0B,0x78,0x49,0x1C,0x98,0x43,0x63,0x46,0x18,0x70,
+    0x64,0x1C,0xE4,0xB2,0xAC,0x42,0xE3,0xD3,0xF0,0xBD,0x01,0xCA,0x83,0x1C,0x9C,0x46,
+    0x43,0x1C,0x1F,0x38,0x86,0x7F,0x0F,0x78,0xBE,0x43,0x86,0x77,0xC6,0x7F,0x0F,0x78,
+    0xBE,0x43,0xC6,0x77,0x18,0x78,0x0E,0x78,0xB0,0x43,0x18,0x70,0x63,0x46,0x18,0x78,
+    0x0B,0x78,0x49,0x1C,0x18,0x43,0x63,0x46,0x18,0x70,0x64,0x1C,0xE4,0xB2,0xAC,0x42,
+    0xE3,0xD3,0xF0,0xBD,0xC4,0x00,0x00,0x20,0xFE,0xB5,0x8C,0x46,0x1D,0x49,0x42,0x00,
+    0x09,0x68,0x6C,0x46,0x8A,0x5A,0x1B,0x49,0xC0,0x39,0xCE,0x6B,0x80,0x39,0x33,0x79,
+    0x89,0x6D,0x58,0x43,0x0F,0x18,0x00,0x20,0x06,0xE0,0x61,0x46,0x00,0x29,0x10,0xD0,
+    0x82,0x25,0x25,0x54,0x40,0x1C,0xC0,0xB2,0x98,0x42,0xF6,0xD3,0x11,0x49,0x12,0x48,
+    0x80,0x39,0x0A,0x89,0xC2,0x80,0x0A,0x46,0xC0,0x3A,0x12,0x7A,0x01,0x2A,0x0A,0xD0,
+    0x0C,0xE0,0x39,0x5C,0x8D,0x06,0xAD,0x0E,0xD1,0x07,0x80,0x35,0x49,0x0E,0x0D,0x43,
+    0x25,0x54,0x52,0x08,0xE6,0xE7,0xF3,0x79,0x09,0x8A,0xC1,0x80,0x81,0x88,0x10,0x22,
+    0x11,0x43,0x81,0x80,0x04,0x81,0x43,0x80,0x31,0x21,0x01,0x80,0x81,0x88,0xC9,0x06,
+    0xFC,0xD5,0xFE,0xBD,0x84,0x01,0x00,0x20,0x00,0x11,0x00,0x40,0xFE,0xB5,0x06,0x46,
+    0x18,0x48,0x0F,0x46,0xC0,0x6B,0x14,0x46,0x05,0x79,0x00,0x20,0x00,0x90,0x01,0x90,
+    0x01,0x46,0x02,0x90,0x2A,0x46,0x68,0x46,0xFC,0xF7,0x98,0xFC,0xAC,0x42,0x00,0xD9,
+    0x2C,0x46,0x80,0x21,0x00,0x22,0x60,0x1E,0x0F,0x43,0x6B,0x46,0x0E,0x43,0x06,0xE0,
+    0x82,0x42,0x01,0xDA,0x9F,0x54,0x00,0xE0,0x9E,0x54,0x52,0x1C,0xD2,0xB2,0xA2,0x42,
+    0xF6,0xD3,0x08,0x48,0x40,0x30,0x01,0x89,0x07,0x48,0xC1,0x80,0x81,0x88,0x10,0x22,
+    0x11,0x43,0x81,0x80,0x03,0x81,0x45,0x80,0x31,0x21,0x01,0x80,0x81,0x88,0xC9,0x06,
+    0xFC,0xD5,0xFE,0xBD,0xC4,0x00,0x00,0x20,0x00,0x11,0x00,0x40,0x41,0x01,0x0A,0x48,
+    0x02,0x88,0x20,0x23,0x1A,0x40,0x88,0x32,0x02,0x80,0xC2,0x13,0x11,0x43,0x01,0x81,
+    0x41,0x88,0x01,0x88,0x08,0x22,0x91,0x43,0x01,0x80,0xAA,0x21,0x81,0x80,0x01,0x88,
+    0x19,0x43,0x01,0x80,0x70,0x47,0x00,0x00,0x00,0x02,0x00,0x40,0xF0,0xB5,0x1A,0x4B,
+    0x9C,0x46,0xDB,0x6B,0xDC,0x7A,0x84,0x42,0x27,0xD9,0x9D,0x7C,0x38,0x23,0x04,0x46,
+    0x5C,0x43,0x27,0x46,0x14,0x4B,0x22,0x37,0xBE,0x1E,0x5B,0x69,0x01,0x2D,0x1D,0xD0,
+    0x9D,0x5B,0xDE,0x5B,0x1F,0x57,0x00,0x01,0x01,0x2F,0x1A,0xD0,0x02,0x2F,0x18,0xD0,
+    0x00,0x27,0x1F,0x55,0x08,0x70,0x28,0x09,0x48,0x70,0x30,0x09,0x88,0x70,0x33,0x07,
+    0x28,0x01,0x1B,0x0F,0x18,0x43,0xC8,0x70,0x60,0x46,0x40,0x69,0xE4,0x1C,0x00,0x5D,
+    0x40,0x08,0x08,0x71,0x10,0x78,0x40,0x1D,0x10,0x70,0xF0,0xBD,0xDD,0x5B,0x9E,0x5B,
+    0xE0,0xE7,0x80,0x1D,0xE6,0xE7,0x00,0x00,0xC4,0x00,0x00,0x20,0xF0,0xB5,0x23,0x4B,
+    0x96,0x00,0xDC,0x69,0x5D,0x6A,0xA4,0x19,0xAD,0x18,0x01,0x28,0x05,0xD0,0x1F,0x46,
+    0x80,0x3F,0x3F,0x7A,0x01,0x2F,0x04,0xD0,0x07,0xE0,0x9C,0x69,0x1B,0x6A,0xA4,0x19,
+    0x02,0xE0,0x1C,0x6B,0x9B,0x6B,0xA4,0x19,0x9D,0x18,0x22,0x68,0x2B,0x78,0x54,0x1E,
+    0x25,0x78,0x9D,0x43,0x25,0x70,0x15,0x78,0x9D,0x43,0x15,0x70,0x55,0x78,0x9D,0x43,
+    0x55,0x70,0x95,0x78,0x9D,0x43,0x95,0x70,0x01,0x28,0x03,0xD1,0x00,0x29,0x0B,0xD0,
+    0x04,0x29,0x0C,0xD0,0x01,0x29,0x11,0xD0,0x02,0x29,0x13,0xD0,0x03,0x29,0x02,0xD1,
+    0x90,0x78,0x18,0x43,0x90,0x70,0xF0,0xBD,0x20,0x78,0x98,0x43,0x01,0xE0,0x20,0x78,
+    0x18,0x43,0x20,0x70,0x10,0x78,0x18,0x43,0x10,0x70,0xF0,0xBD,0x20,0x78,0x18,0x43,
+    0x20,0x70,0xF0,0xBD,0x50,0x78,0x18,0x43,0x50,0x70,0xF0,0xBD,0xC4,0x00,0x00,0x20,
+    0xF8,0xB5,0x47,0x49,0x0A,0x46,0x0C,0x46,0xFF,0x32,0x41,0x32,0x20,0x34,0xC0,0x31,
+    0x01,0x28,0x2E,0xD0,0x02,0x28,0x2E,0xD0,0x03,0x28,0x32,0xD0,0x01,0x25,0x04,0x28,
+    0x35,0xD0,0x05,0x28,0x36,0xD0,0x3E,0x4E,0x00,0x23,0xF7,0x1D,0xF9,0x37,0xBC,0x46,
+    0x20,0x37,0xE0,0x36,0xBE,0x46,0x06,0x28,0x2E,0xD0,0x02,0x27,0x07,0x28,0x32,0xD0,
+    0x08,0x28,0x3C,0xD0,0x37,0x4E,0x09,0x28,0x3B,0xD0,0x0A,0x28,0x3F,0xD0,0x0B,0x28,
+    0x3F,0xD0,0x0C,0x28,0x3F,0xD0,0x0D,0x28,0x3F,0xD0,0x0E,0x28,0x3F,0xD0,0x0F,0x28,
+    0x3F,0xD0,0x02,0x46,0x10,0x3A,0x0B,0x2A,0x40,0xD8,0x06,0x22,0x62,0x75,0x20,0x74,
+    0x4F,0xE0,0x07,0x23,0x1F,0xE0,0x2D,0x49,0x2B,0x48,0xC8,0x60,0xBF,0xF3,0x40,0x8F,
+    0xFE,0xE7,0x01,0x20,0xFF,0xF7,0x22,0xFF,0xFA,0x20,0xA0,0x74,0xFE,0xE7,0xCD,0x77,
+    0x65,0x74,0x3E,0xE0,0x4D,0x77,0x3C,0xE0,0x8D,0x77,0x4B,0x77,0x65,0x46,0x6B,0x62,
+    0x7B,0x70,0xF3,0x70,0x07,0xE0,0x00,0x23,0x8B,0x77,0x4F,0x77,0x67,0x46,0x7B,0x62,
+    0x77,0x46,0x7B,0x70,0xF5,0x70,0x63,0x75,0x0F,0x23,0x93,0x71,0x29,0xE0,0x67,0x75,
+    0x27,0xE0,0x63,0x75,0x32,0x88,0x20,0x23,0x1A,0x43,0x32,0x80,0x21,0xE0,0x65,0x75,
+    0x1F,0xE0,0x03,0x22,0x08,0xE0,0x04,0x22,0x06,0xE0,0x05,0x22,0x04,0xE0,0x08,0x22,
+    0x02,0xE0,0x8B,0x77,0x4F,0x77,0x0A,0x22,0x62,0x75,0x12,0xE0,0x1C,0x28,0x02,0xD0,
+    0x1D,0x28,0x0C,0xD0,0x0D,0xE0,0x0E,0x49,0x10,0x20,0x88,0x71,0x64,0x21,0x03,0x20,
+    0xFB,0xF7,0xE8,0xFB,0xFF,0xF7,0x2C,0xFD,0xAA,0x20,0xB0,0x80,0xFD,0xE7,0xCB,0x77,
+    0x63,0x74,0x62,0x7D,0x4B,0x68,0x9A,0x70,0x49,0x68,0xC8,0x70,0xF8,0xBD,0x00,0x00,
+    0x44,0x00,0x00,0x20,0x00,0x02,0x00,0x40,0x04,0x00,0xFA,0x05,0x00,0xED,0x00,0xE0,
+    0x00,0x20,0x00,0x40,0x10,0xB5,0x0E,0x48,0x82,0x78,0xFF,0x38,0xAA,0x23,0x0D,0x49,
+    0x01,0x38,0x00,0x2A,0x4A,0x88,0x06,0xD0,0x80,0x24,0x22,0x43,0x4A,0x80,0x8B,0x80,
+    0x00,0x21,0x81,0x74,0x10,0xBD,0x4A,0x80,0x82,0x7C,0xFF,0x2A,0x02,0xD2,0x82,0x7C,
+    0x52,0x1C,0x82,0x74,0x80,0x7C,0x30,0x28,0xF4,0xD2,0x8B,0x80,0x10,0xBD,0x00,0x00,
+    0x64,0x01,0x00,0x20,0x00,0x02,0x00,0x40,0xFF,0xB5,0x82,0xB0,0x1C,0x46,0x0A,0x22,
+    0xFF,0x21,0x02,0x98,0xFC,0xF7,0xD2,0xFB,0x14,0x22,0x00,0x21,0x0B,0x98,0xFC,0xF7,
+    0xCD,0xFB,0x00,0x21,0x13,0xE0,0x11,0x48,0x4D,0x00,0x60,0x53,0x00,0x20,0x09,0xE0,
+    0x4A,0x43,0x12,0x18,0x5B,0x68,0x52,0x00,0x66,0x5F,0x9F,0x5A,0xBE,0x42,0x00,0xDA,
+    0x67,0x53,0x40,0x1C,0x0A,0x4B,0x1A,0x78,0x90,0x42,0xF1,0xDB,0x49,0x1C,0x08,0x4A,
+    0x10,0x78,0x81,0x42,0xE7,0xDB,0x0B,0x98,0x0C,0x99,0x02,0xAD,0x01,0x91,0x00,0x90,
+    0x07,0xCD,0x23,0x46,0xF9,0xF7,0x60,0xFA,0x06,0xB0,0xF0,0xBD,0x01,0x80,0xFF,0xFF,
+    0x3C,0x00,0x00,0x20,0x82,0x00,0x01,0x20,0x00,0x21,0x00,0x04,0x82,0x42,0x01,0xD3,
+    0x40,0x10,0x00,0xE0,0x80,0x20,0x01,0x43,0x0B,0x46,0x4B,0x43,0x93,0x42,0x00,0xD9,
+    0x41,0x40,0x40,0x08,0xF7,0xD1,0x49,0x1C,0x48,0x08,0x70,0x47,0x00,0xB5,0xFD,0xF7,
+    0xF1,0xFC,0x03,0x48,0x2F,0x21,0x80,0x6A,0x00,0x68,0x01,0x70,0x00,0xBD,0x00,0x00,
+    0xC4,0x00,0x00,0x20,0x70,0xB5,0x2A,0x48,0x04,0x21,0x01,0x81,0xAA,0x21,0x81,0x80,
+    0x28,0x21,0x01,0x80,0x27,0x48,0xCA,0x26,0x06,0x70,0x46,0x70,0x26,0x49,0x70,0x20,
+    0x08,0x60,0x24,0x48,0x00,0x25,0x20,0x38,0xC5,0x71,0x25,0x4C,0x23,0x48,0x14,0x22,
+    0x29,0x46,0x60,0x60,0xFC,0xF7,0xAA,0xFA,0x60,0x68,0x06,0x70,0x61,0x68,0x01,0x20,
+    0x48,0x70,0x60,0x68,0x85,0x70,0x60,0x68,0xC5,0x70,0x61,0x68,0x02,0x20,0x08,0x71,
+    0xFE,0xF7,0x16,0xF8,0x61,0x68,0x88,0x71,0x61,0x68,0x00,0x0A,0xC8,0x71,0x60,0x68,
+    0x05,0x72,0x60,0x68,0x85,0x72,0x17,0x48,0x61,0x68,0x00,0x78,0xC8,0x72,0x61,0x68,
+    0x10,0x20,0x08,0x73,0x61,0x68,0x20,0x20,0x48,0x73,0x61,0x68,0x03,0x20,0x88,0x73,
+    0x61,0x68,0xC8,0x73,0x60,0x68,0x05,0x74,0x0F,0x48,0x05,0x70,0xFC,0xF7,0x66,0xFC,
+    0xFC,0xF7,0x34,0xFC,0x3C,0x20,0xFF,0xF7,0x09,0xFE,0xFC,0xF7,0x87,0xFB,0xFC,0xF7,
+    0x3D,0xFB,0xFC,0xF7,0xEB,0xFB,0xFC,0xF7,0xD1,0xFB,0x00,0xF0,0xC1,0xFC,0x70,0xBD,
+    0x00,0x02,0x00,0x40,0x20,0x03,0x00,0x40,0x00,0x01,0x00,0x40,0x00,0x0A,0x00,0x20,
+    0x04,0x01,0x00,0x20,0xDC,0x7B,0x00,0x00,0x2E,0x00,0x00,0x20,0xF0,0xB5,0x30,0x49,
+    0x89,0xB0,0xC9,0x6B,0x2E,0x4E,0x8A,0x79,0x07,0x92,0x09,0x79,0x06,0x91,0x2D,0x49,
+    0x80,0x3E,0x00,0x28,0x07,0xD0,0x43,0x20,0x08,0x72,0xC8,0x21,0x78,0x20,0xFB,0xF7,
+    0xE1,0xFA,0x75,0x6C,0x17,0xE0,0x08,0x7A,0xBF,0x22,0x10,0x40,0x08,0x72,0x08,0x7A,
+    0x83,0x22,0x10,0x43,0x08,0x72,0x00,0x22,0x11,0x46,0x01,0x20,0x75,0x6D,0xFF,0xF7,
+    0x1D,0xFE,0x00,0x24,0x01,0x22,0x80,0x21,0x01,0xA8,0xFE,0xF7,0x79,0xFB,0x64,0x1C,
+    0xE4,0xB2,0x32,0x2C,0xF6,0xD3,0x00,0x27,0x37,0x72,0x02,0x20,0xFF,0xF7,0xF2,0xFC,
+    0x00,0x21,0x02,0x20,0xFF,0xF7,0x10,0xFC,0x06,0x98,0x15,0x4E,0x00,0x24,0x47,0x00,
+    0x60,0x3E,0x19,0xE0,0x22,0x46,0x00,0x21,0x01,0x20,0xFF,0xF7,0xFF,0xFD,0x20,0x20,
+    0x00,0x90,0x23,0x46,0x29,0x46,0x01,0xA8,0x06,0x9A,0xFB,0xF7,0x53,0xFC,0x01,0x21,
+    0x7D,0x19,0x22,0x46,0x08,0x46,0xFF,0xF7,0xF1,0xFD,0x0B,0x49,0xAA,0x20,0x88,0x80,
+    0x00,0x20,0xB0,0x74,0x64,0x1C,0xE4,0xB2,0x07,0x98,0x84,0x42,0xE2,0xD3,0x00,0x21,
+    0x08,0x46,0xFF,0xF7,0xE9,0xFB,0x00,0x20,0xFF,0xF7,0xC4,0xFC,0x09,0xB0,0xF0,0xBD,
+    0xC4,0x00,0x00,0x20,0x00,0x03,0x00,0x40,0x00,0x02,0x00,0x40,0x70,0xB5,0x28,0x48,
+    0x54,0x21,0x41,0x72,0x43,0x21,0x01,0x72,0x27,0x4C,0x26,0x48,0x60,0x80,0x27,0x48,
+    0x21,0x21,0x01,0x74,0x10,0x25,0x45,0x74,0xF1,0x21,0x09,0x01,0x21,0x81,0x11,0x21,
+    0x49,0x01,0x61,0x81,0xC3,0x21,0x81,0x74,0xE5,0x80,0x41,0x20,0x20,0x80,0x02,0x20,
+    0xFF,0xF7,0xC0,0xFA,0x01,0x20,0xFE,0xF7,0xF9,0xFD,0x00,0x20,0xFE,0xF7,0xF6,0xFD,
+    0xE5,0x80,0x00,0x21,0x01,0x20,0xFF,0xF7,0x27,0xF9,0x00,0x21,0x08,0x46,0xFF,0xF7,
+    0x23,0xF9,0x01,0x20,0xFF,0xF7,0xAE,0xFA,0x15,0x4A,0x00,0x20,0x51,0x6D,0x13,0x6E,
+    0x44,0x00,0x1C,0x5B,0x53,0x6F,0xAA,0x25,0x1B,0x5C,0x40,0x1C,0x6B,0x43,0xE3,0x18,
+    0x0B,0x80,0x89,0x1C,0x09,0x28,0xF2,0xD3,0x51,0x6D,0x00,0x20,0x12,0x31,0x13,0x46,
+    0x80,0x33,0x94,0x6F,0x45,0x00,0x65,0x5B,0xDC,0x68,0xAA,0x26,0x24,0x5C,0x40,0x1C,
+    0x74,0x43,0x2C,0x19,0x0C,0x80,0x89,0x1C,0x08,0x28,0xF2,0xD3,0x70,0xBD,0x00,0x00,
+    0x00,0x03,0x00,0x40,0x83,0x10,0x00,0x00,0x00,0x10,0x00,0x40,0xE0,0x12,0x00,0x40,
+    0x44,0x00,0x00,0x20,0xF0,0xB5,0x01,0x46,0x20,0x48,0x85,0xB0,0x42,0x8A,0x01,0x92,
+    0x02,0x8A,0x00,0x92,0x1E,0x4A,0x42,0x80,0x1E,0x4A,0x02,0x80,0x1E,0x4A,0x11,0x23,
+    0x53,0x74,0x35,0x23,0x13,0x74,0x00,0x22,0xC2,0x81,0x1C,0x4E,0x14,0x46,0xF0,0x6B,
+    0x05,0x79,0xC7,0x78,0x68,0x00,0x40,0x18,0x02,0x91,0x03,0x90,0x06,0xE0,0x22,0x46,
+    0x01,0x21,0x00,0x20,0xFF,0xF7,0x5A,0xFD,0x64,0x1C,0xE4,0xB2,0xAC,0x42,0xF6,0xD3,
+    0x00,0x24,0x06,0xE0,0x01,0x21,0x22,0x46,0x08,0x46,0xFF,0xF7,0x4F,0xFD,0x64,0x1C,
+    0xE4,0xB2,0xBC,0x42,0xF6,0xD3,0x01,0x22,0xB3,0x6A,0x28,0x46,0x02,0x99,0xFE,0xF7,
+    0x93,0xF9,0x00,0x22,0xF3,0x6A,0x38,0x46,0x03,0x99,0xFE,0xF7,0x8D,0xF9,0x03,0x49,
+    0x01,0x98,0x48,0x82,0x00,0x98,0x08,0x82,0x05,0xB0,0xF0,0xBD,0x00,0x10,0x00,0x40,
+    0x82,0x10,0x00,0x00,0x45,0x08,0x00,0x00,0xE0,0x12,0x00,0x40,0xC4,0x00,0x00,0x20,
+    0xF0,0xB5,0x28,0x4C,0x00,0x20,0x87,0xB0,0x06,0x46,0x65,0x69,0x07,0xE0,0x38,0x21,
+    0x41,0x43,0x6A,0x5C,0x03,0x2A,0x00,0xD1,0x6E,0x54,0x40,0x1C,0xC0,0xB2,0xE1,0x6B,
+    0xC9,0x7A,0x81,0x42,0xF3,0xD8,0xE0,0x6B,0x69,0x46,0x02,0x79,0x8A,0x70,0xC2,0x78,
+    0x4A,0x70,0x01,0x46,0x40,0x31,0x0A,0x46,0x0B,0x89,0x69,0x46,0x0B,0x82,0x52,0x89,
+    0x4A,0x82,0x18,0x4F,0xC0,0x7A,0x08,0x70,0x80,0x3F,0x78,0x7C,0x14,0x22,0x80,0x1C,
+    0xC8,0x70,0x0E,0x71,0x12,0x20,0x48,0x71,0x0A,0x20,0x88,0x71,0xCE,0x71,0x4A,0x72,
+    0x08,0x72,0x3C,0x20,0x88,0x72,0xC8,0x72,0x0E,0x73,0x50,0x20,0xC8,0x81,0x0E,0x48,
+    0x05,0x90,0xF9,0x79,0x6A,0x46,0x63,0x69,0x20,0x69,0xFA,0xF7,0xAD,0xFF,0x7E,0x72,
+    0x00,0x20,0xE2,0x6B,0x09,0xE0,0x38,0x21,0x41,0x43,0x69,0x56,0x00,0x29,0x02,0xDD,
+    0x79,0x7A,0x49,0x1C,0x79,0x72,0x40,0x1C,0xC0,0xB2,0xD1,0x7A,0x81,0x42,0xF2,0xD8,
+    0x07,0xB0,0xF0,0xBD,0xC4,0x00,0x00,0x20,0x9F,0x40,0x00,0x00,0x07,0x49,0x00,0x22,
+    0x0A,0x70,0x07,0x4A,0x11,0x23,0x93,0x80,0x43,0x23,0x13,0x80,0x02,0xE0,0x00,0x28,
+    0x00,0xD1,0x30,0xBF,0x0A,0x78,0x00,0x2A,0xF9,0xD0,0x70,0x47,0x24,0x01,0x00,0x20,
+    0x00,0x10,0x00,0x40,0xFC,0xB5,0x37,0x49,0x0B,0x46,0xDF,0x1D,0xC8,0x78,0xF9,0x37,
+    0x7C,0x7F,0x20,0x33,0x14,0x28,0x02,0xD3,0xB8,0x7F,0x00,0x28,0x01,0xD0,0x00,0x2C,
+    0x5D,0xD0,0x30,0x48,0x2F,0x49,0x80,0x30,0xC2,0x6B,0xD5,0x78,0x10,0x79,0x45,0x43,
+    0x01,0x95,0x4D,0x6D,0x48,0x6C,0x89,0x6C,0x8C,0x46,0x00,0x21,0x00,0x91,0x29,0x49,
+    0x1E,0x79,0x20,0x31,0x49,0x79,0x00,0x2E,0x08,0xD0,0x49,0x1C,0xC9,0xB2,0x59,0x71,
+    0x64,0x29,0x07,0xD9,0x01,0x21,0x00,0x91,0x00,0x21,0x02,0xE0,0x00,0x29,0x01,0xD0,
+    0x49,0x1E,0x59,0x71,0x00,0x2C,0x04,0xD0,0x39,0x7F,0x00,0x29,0x01,0xD1,0x01,0x21,
+    0x00,0x91,0x20,0x32,0x11,0x7D,0x56,0x7D,0x8E,0x46,0x7F,0x29,0x01,0xD9,0x7F,0x21,
+    0x8E,0x46,0x7F,0x2E,0x00,0xD9,0x7F,0x26,0x16,0x49,0x00,0x24,0x0A,0x6C,0x22,0xE0,
+    0x00,0x99,0x00,0x29,0x03,0xD0,0x61,0x46,0x09,0x88,0x01,0x80,0x13,0xE0,0x19,0x79,
+    0x00,0x29,0x10,0xD1,0x51,0x56,0x2F,0x88,0xC9,0x19,0x09,0xB2,0x71,0x45,0x02,0xDD,
+    0x01,0x88,0x49,0x1E,0x04,0xE0,0x77,0x42,0xB9,0x42,0x03,0xDA,0x01,0x88,0x49,0x1C,
+    0x01,0x80,0x00,0x21,0x11,0x70,0x61,0x46,0x89,0x1C,0x52,0x1C,0xAD,0x1C,0x80,0x1C,
+    0x64,0x1C,0x8C,0x46,0xE4,0xB2,0x01,0x99,0x8C,0x42,0xD9,0xD3,0xFC,0xBD,0x00,0x20,
+    0x58,0x71,0xFC,0xBD,0x44,0x00,0x00,0x20,0xFF,0xB5,0x46,0x4C,0x81,0xB0,0xA0,0x78,
+    0x0D,0x46,0x40,0x1C,0x0C,0x9F,0x0A,0x9E,0x0B,0x99,0xA0,0x70,0x68,0x46,0x80,0x88,
+    0x00,0x2E,0x00,0xD0,0x10,0x1A,0x6E,0x46,0x30,0x80,0xF0,0x88,0x00,0x29,0x00,0xD0,
+    0x18,0x1A,0x31,0x46,0x70,0x80,0x00,0x2F,0x20,0xD0,0xD0,0x18,0x40,0x08,0x01,0x2F,
+    0x04,0xD0,0x02,0x2F,0x0A,0xD0,0x03,0x2F,0x18,0xD1,0x0E,0xE0,0xD2,0x1A,0x73,0x88,
+    0x52,0x10,0x31,0x88,0xD2,0x18,0x32,0x80,0x40,0x1A,0x0E,0xE0,0x48,0x88,0x18,0x1A,
+    0x48,0x80,0x08,0x88,0x10,0x1A,0x08,0x80,0x08,0xE0,0x31,0x88,0x76,0x88,0x80,0x1B,
+    0x6E,0x46,0x30,0x80,0x98,0x1A,0x40,0x10,0x40,0x18,0x70,0x80,0x29,0x4E,0x20,0x78,
+    0x72,0x78,0xC3,0x07,0x91,0x00,0x88,0x19,0x80,0x36,0x00,0x2B,0x12,0xD0,0x00,0x21,
+    0x21,0x70,0x52,0x1C,0x62,0x70,0x69,0x46,0x09,0x88,0x81,0x80,0x69,0x46,0x49,0x88,
+    0xC1,0x80,0x69,0x46,0x48,0x88,0x70,0x80,0x30,0x80,0x08,0x88,0xF0,0x80,0xB0,0x80,
+    0x05,0xB0,0xF0,0xBD,0x43,0x88,0x62,0x5A,0x68,0x46,0x41,0x88,0x00,0x88,0xFB,0xF7,
+    0x85,0xF9,0xA8,0x42,0x24,0xD3,0x60,0x78,0x1E,0x28,0x21,0xD2,0x81,0x00,0x40,0x1C,
+    0x60,0x70,0x68,0x46,0x09,0x19,0x00,0x88,0x88,0x80,0x68,0x46,0x40,0x88,0xC8,0x80,
+    0x68,0x46,0x31,0x88,0x40,0x88,0x81,0x42,0x00,0xD3,0x01,0x46,0x31,0x80,0x71,0x88,
+    0x81,0x42,0x00,0xD9,0x08,0x46,0x70,0x80,0x68,0x46,0xB1,0x88,0x00,0x88,0x81,0x42,
+    0x00,0xD3,0x01,0x46,0xB1,0x80,0xF1,0x88,0x81,0x42,0x00,0xD9,0x08,0x46,0xF0,0x80,
+    0x04,0x48,0x69,0x46,0x7C,0x30,0x09,0x88,0x01,0x80,0x69,0x46,0x49,0x88,0x41,0x80,
+    0xC6,0xE7,0x00,0x00,0xC0,0x0C,0x00,0x20,0x81,0x78,0x49,0x1E,0x81,0x70,0x01,0x79,
+    0x00,0x29,0x03,0xD0,0x01,0x89,0x81,0x81,0x41,0x89,0x02,0xE0,0x81,0x8C,0x81,0x81,
+    0xC1,0x8C,0xC1,0x81,0x70,0x47,0x00,0x00,0xF3,0xB5,0x04,0x46,0x80,0x78,0x81,0xB0,
+    0x05,0x28,0x01,0xD2,0x40,0x1C,0xA0,0x70,0x1E,0x4F,0xA0,0x78,0x39,0x68,0xC9,0x78,
+    0x88,0x42,0x01,0xD9,0x01,0x20,0x00,0xE0,0x00,0x20,0x60,0x70,0x69,0x46,0x20,0x79,
+    0x0E,0x89,0x4D,0x89,0x00,0x28,0x1B,0xD0,0x60,0x78,0x00,0x28,0x01,0xD1,0x26,0x81,
+    0x65,0x81,0x61,0x89,0x20,0x89,0x2B,0x46,0x32,0x46,0xFB,0xF7,0x1F,0xF9,0x39,0x68,
+    0x49,0x79,0x88,0x42,0x02,0xD9,0x00,0x20,0x20,0x71,0x09,0xE0,0x20,0x79,0x00,0x28,
+    0x06,0xD0,0x20,0x89,0xA0,0x84,0x61,0x89,0xE1,0x84,0xA0,0x81,0xE1,0x81,0x01,0xE0,
+    0xA6,0x81,0xE5,0x81,0x60,0x79,0x03,0x28,0x01,0xD2,0x40,0x1C,0x60,0x71,0x60,0x78,
+    0x00,0x28,0x04,0xD0,0x20,0x78,0x00,0x28,0x02,0xD0,0x02,0x20,0x20,0x70,0xFE,0xBD,
+    0x01,0x20,0xFB,0xE7,0x38,0x00,0x00,0x20,0xFF,0xB5,0x04,0x46,0x85,0xB0,0x00,0x20,
+    0x0C,0xE0,0x38,0x21,0x41,0x43,0x09,0x19,0x89,0x78,0x00,0x29,0x01,0xD0,0x01,0x21,
+    0x00,0xE0,0xFF,0x21,0x6A,0x46,0x11,0x54,0x40,0x1C,0xC0,0xB2,0x0F,0x99,0x88,0x42,
+    0xEF,0xD3,0x00,0x26,0x28,0xE0,0x0E,0x98,0x80,0x5D,0xFF,0x28,0x29,0xD0,0x08,0x99,
+    0x08,0x22,0x08,0x5C,0x03,0x90,0x06,0x98,0xF1,0x00,0x0F,0x18,0x03,0x98,0x38,0x21,
+    0x48,0x43,0x05,0x19,0x28,0x46,0x24,0x30,0x39,0x46,0xF8,0xF7,0xBD,0xFD,0xA8,0x89,
+    0xA8,0x83,0xE8,0x89,0xE8,0x83,0x38,0x88,0x69,0x46,0x08,0x82,0x78,0x88,0x48,0x82,
+    0x28,0x46,0x04,0x99,0xFF,0xF7,0x80,0xFF,0x38,0x79,0xE8,0x70,0x03,0x98,0xFF,0x21,
+    0x6A,0x46,0x11,0x54,0x76,0x1C,0xF6,0xB2,0x07,0x98,0x86,0x42,0xD3,0xD3,0x00,0x22,
+    0x5B,0xE0,0x22,0x46,0x00,0x20,0x0F,0x99,0x07,0xE0,0x38,0x23,0x43,0x43,0x9B,0x18,
+    0x9B,0x78,0x00,0x2B,0x03,0xD0,0x40,0x1C,0xC0,0xB2,0x88,0x42,0xF5,0xD3,0x88,0x42,
+    0x00,0xD3,0xFF,0x20,0x03,0x90,0xFF,0x28,0xE4,0xD0,0x38,0x22,0x50,0x43,0x01,0x21,
+    0x05,0x19,0x29,0x71,0x00,0x22,0xAA,0x71,0x06,0x99,0xF3,0x00,0x5F,0x18,0x39,0x88,
+    0xA9,0x83,0x79,0x88,0xE9,0x83,0x39,0x88,0x29,0x81,0x79,0x88,0x69,0x81,0x22,0x54,
+    0x28,0x46,0x39,0x46,0x24,0x30,0x08,0x22,0xF8,0xF7,0x76,0xFD,0x38,0x88,0x69,0x46,
+    0x08,0x82,0x78,0x88,0x48,0x82,0x28,0x46,0x04,0x99,0xFF,0xF7,0x3D,0xFF,0x38,0x79,
+    0xE8,0x70,0x03,0x9A,0xFF,0x20,0x69,0x46,0x88,0x54,0xBB,0xE7,0x68,0x46,0x80,0x5C,
+    0xFF,0x28,0x18,0xD0,0x10,0x46,0x38,0x21,0x48,0x43,0x21,0x56,0x00,0x29,0x0F,0xDD,
+    0x0C,0x4D,0x01,0x19,0x2D,0x68,0x8B,0x78,0x2D,0x79,0x05,0x26,0x75,0x1B,0xAB,0x42,
+    0x06,0xDC,0x03,0x23,0x23,0x54,0x00,0x20,0x48,0x71,0x88,0x70,0x48,0x70,0x02,0xE0,
+    0x00,0x19,0xFF,0xF7,0x09,0xFF,0x52,0x1C,0xD2,0xB2,0x0F,0x98,0x82,0x42,0xDD,0xD3,
+    0x09,0xB0,0xF0,0xBD,0x38,0x00,0x00,0x20,0x0E,0xB5,0x0E,0x48,0xC0,0x6B,0xC0,0x79,
+    0x00,0x28,0x0F,0xD0,0x00,0x20,0x69,0x46,0x08,0x72,0x02,0xA9,0x68,0x46,0xFD,0xF7,
+    0x8D,0xFF,0x08,0x48,0x60,0x38,0x00,0x7A,0x00,0x06,0x68,0x46,0x03,0xD5,0x01,0x7A,
+    0xFC,0xF7,0x52,0xFD,0x0E,0xBD,0x00,0x7A,0x00,0x28,0xFB,0xD0,0x68,0x46,0xFF,0xF7,
+    0xDD,0xF8,0x0E,0xBD,0xC4,0x00,0x00,0x20,0x10,0xB5,0x00,0xF0,0x43,0xF8,0xFA,0xF7,
+    0x05,0xFD,0xFB,0xF7,0xBD,0xF9,0xF9,0xF7,0xE1,0xFC,0xFB,0xF7,0x1B,0xF8,0x10,0xBD,
+    0xF0,0xB5,0x01,0x26,0xB6,0x07,0x31,0x89,0x08,0x27,0xB9,0x43,0x31,0x81,0x15,0x4D,
+    0x15,0x4C,0x29,0x46,0x20,0x31,0xA0,0x22,0x08,0xE0,0x2B,0x78,0xAB,0x2B,0x08,0xD0,
+    0x0B,0x79,0xAB,0x2B,0x05,0xD0,0x30,0xBF,0x10,0x4B,0x9A,0x80,0xA3,0x7C,0x83,0x42,
+    0xF3,0xD3,0x30,0x89,0x38,0x43,0x30,0x81,0x28,0x78,0xAB,0x28,0x0A,0xD0,0x08,0x79,
+    0xAB,0x28,0x07,0xD0,0x0A,0x48,0x01,0x88,0x0A,0x29,0x02,0xD2,0x01,0x88,0x89,0x1C,
+    0x01,0x80,0xF0,0xBD,0x0A,0x79,0x00,0x20,0xAB,0x2A,0x01,0xD0,0x28,0x70,0xF0,0xBD,
+    0x08,0x71,0xF0,0xBD,0xEB,0x08,0x00,0x20,0x64,0x00,0x00,0x20,0x00,0x02,0x00,0x40,
+    0x02,0x00,0x00,0x20,0x03,0x48,0x00,0xE0,0x00,0xBF,0x41,0x78,0x00,0x29,0xFB,0xD0,
+    0x70,0x47,0x00,0x00,0x24,0x01,0x00,0x20,0x70,0xB5,0x06,0x46,0x0D,0x4C,0xAA,0x20,
+    0xA0,0x80,0x0D,0x4D,0x00,0x20,0xA8,0x74,0x32,0x20,0xFF,0xF7,0xF7,0xF9,0x22,0x88,
+    0x28,0x46,0xA0,0x30,0x40,0x68,0xA0,0x21,0x03,0xE0,0x43,0x79,0x00,0x2B,0x03,0xD0,
+    0xA1,0x80,0xAB,0x7C,0xB3,0x42,0xF8,0xD3,0x22,0x80,0x05,0x20,0xFF,0xF7,0xE6,0xF9,
+    0x70,0xBD,0x00,0x00,0x00,0x02,0x00,0x40,0x64,0x00,0x00,0x20,0xF0,0xB5,0x4F,0x48,
+    0x3A,0x21,0xC0,0x6B,0x89,0xB0,0x0B,0x5C,0x41,0x7D,0x06,0x91,0x01,0x78,0x05,0x91,
+    0x4A,0x49,0x4A,0x4C,0x80,0x31,0x04,0x91,0x49,0x88,0x40,0x34,0x0A,0x29,0x03,0xD9,
+    0x00,0x20,0x20,0x76,0x09,0xB0,0xF0,0xBD,0xC1,0x78,0x07,0x91,0x05,0x79,0x43,0x48,
+    0x80,0x38,0x01,0x6E,0x02,0x6A,0x8C,0x46,0x00,0x21,0x08,0x46,0x02,0x92,0x29,0xE0,
+    0x46,0x00,0x67,0x46,0xF7,0x19,0x03,0x97,0x20,0x3F,0xB6,0x46,0xFE,0x8B,0x6F,0x46,
+    0x3E,0x80,0x76,0x46,0x67,0x46,0xBE,0x5F,0x6F,0x46,0x7E,0x80,0x03,0x9F,0xB6,0x46,
+    0x7F,0x88,0x6E,0x46,0xB7,0x80,0x00,0x28,0x2F,0xD0,0x6F,0x1E,0xB8,0x42,0x01,0xD1,
+    0x00,0x27,0xB7,0x80,0xD7,0x07,0x0B,0xD0,0x00,0x27,0xF7,0x5F,0x9F,0x42,0x07,0xDA,
+    0x9E,0x45,0x05,0xDA,0x6F,0x46,0x04,0x26,0xBE,0x5F,0x9E,0x42,0x00,0xDA,0x49,0x1C,
+    0x52,0x08,0x40,0x1C,0xA8,0x42,0xD3,0xD3,0x28,0x48,0x40,0x30,0x00,0x7E,0x00,0x29,
+    0x29,0xD0,0x06,0x9A,0x12,0xB2,0x90,0x42,0x03,0xDA,0x49,0x1C,0x49,0x08,0x40,0x18,
+    0x20,0x76,0x20,0x7E,0x90,0x42,0x2A,0xDB,0x20,0x4A,0x80,0x3A,0x90,0x69,0x00,0x28,
+    0x06,0xD0,0x02,0x99,0x01,0x42,0x03,0xD0,0x12,0xE0,0x00,0x27,0x37,0x80,0xD1,0xE7,
+    0x56,0x6D,0x91,0x6C,0x50,0x6C,0x07,0x9A,0x6A,0x43,0x55,0x00,0x2A,0x46,0xFB,0xF7,
+    0xCD,0xFD,0x2A,0x46,0x00,0x21,0x30,0x46,0xFB,0xF7,0xD8,0xFD,0x00,0x20,0x20,0x76,
+    0xC8,0x20,0x60,0x76,0x0B,0xE0,0x61,0x7E,0x00,0x29,0x04,0xD0,0x02,0x9A,0x00,0x2A,
+    0x01,0xD1,0x49,0x1E,0x61,0x76,0x00,0x28,0x01,0xD0,0x40,0x1E,0x20,0x76,0x04,0x98,
+    0x40,0x7F,0x00,0x28,0x02,0xD0,0x00,0x20,0x60,0x76,0x83,0xE7,0x60,0x7E,0x32,0x28,
+    0x80,0xD9,0x81,0x08,0x05,0x98,0x08,0x18,0x04,0x49,0xC0,0xB2,0x80,0x39,0x08,0x70,
+    0x64,0x28,0xF2,0xD9,0x64,0x20,0x08,0x70,0x74,0xE7,0x00,0x00,0xC4,0x00,0x00,0x20,
+    0x03,0x48,0x00,0x21,0x01,0x76,0x41,0x76,0x81,0x76,0xC1,0x76,0x70,0x47,0x00,0x00,
+    0x04,0x01,0x00,0x20,0xF0,0xB5,0x57,0x4F,0xB3,0xB0,0x39,0x7C,0x56,0x48,0x00,0x90,
+    0xC0,0x6B,0x42,0x7C,0x01,0x20,0x90,0x40,0x01,0x43,0x39,0x74,0xFE,0xF7,0xA6,0xFE,
+    0x51,0x4C,0x00,0x26,0x60,0x3C,0xA6,0x74,0x32,0x20,0xFF,0xF7,0x1F,0xF9,0x00,0x20,
+    0xFA,0xF7,0x50,0xFF,0x25,0x46,0xE6,0x75,0xA0,0x35,0x8C,0xE0,0x21,0x7C,0x00,0x20,
+    0x10,0x39,0x0B,0x00,0xF8,0xF7,0x90,0xFD,0x0A,0x06,0x06,0x27,0x2C,0x31,0x4D,0x5D,
+    0x68,0x75,0x79,0x7D,0x46,0x48,0x45,0x49,0x41,0x80,0x10,0x21,0xC1,0x80,0x11,0x21,
+    0x49,0x01,0x41,0x81,0x41,0x49,0x72,0x39,0x01,0x81,0x42,0x48,0x93,0x21,0x81,0x74,
+    0x11,0x21,0x41,0x74,0x13,0x21,0x01,0x74,0x54,0x20,0x78,0x72,0x20,0x7C,0x10,0x28,
+    0x07,0xD0,0x00,0x20,0xFF,0xF7,0x02,0xFB,0x20,0x7C,0x69,0x68,0x48,0x72,0x26,0x74,
+    0x59,0xE0,0x01,0x20,0xF6,0xE7,0x01,0xA8,0xFF,0xF7,0xBC,0xFB,0x12,0x20,0xF4,0xE7,
+    0x01,0xA8,0xFC,0xF7,0xB9,0xFE,0x13,0x20,0xEF,0xE7,0x33,0x49,0x20,0x20,0x08,0x60,
+    0xFD,0xF7,0xF8,0xF9,0x38,0x78,0x10,0x21,0x08,0x43,0x38,0x70,0x20,0x7C,0x14,0x28,
+    0x00,0xD1,0x30,0xBF,0x69,0x68,0x14,0x20,0x48,0x72,0x2C,0x49,0xA0,0x20,0x08,0x80,
+    0x29,0x49,0x20,0x20,0x80,0x39,0x08,0x60,0x38,0x78,0xEF,0x21,0x08,0x40,0x38,0x70,
+    0x35,0xE0,0x69,0x68,0x15,0x20,0x48,0x72,0xFE,0xF7,0x0A,0xFF,0x38,0x78,0x10,0x21,
+    0x08,0x43,0x38,0x70,0x80,0x20,0xF8,0x71,0xFD,0xF7,0xD4,0xF9,0xFA,0xF7,0xAE,0xFD,
+    0xFC,0xE7,0x69,0x68,0x16,0x20,0x48,0x72,0x39,0x7C,0x00,0x98,0xC0,0x6B,0x42,0x7C,
+    0x01,0x20,0x90,0x40,0x01,0x43,0x09,0xE0,0x69,0x68,0x17,0x20,0x48,0x72,0x39,0x7C,
+    0x00,0x98,0xC0,0x6B,0x42,0x7C,0x01,0x20,0x90,0x40,0x81,0x43,0x39,0x74,0x26,0x74,
+    0x0D,0xE0,0xFF,0xF7,0x13,0xFB,0x18,0x20,0xA7,0xE7,0x69,0x68,0x19,0x20,0x48,0x72,
+    0x05,0xE0,0x00,0x28,0x03,0xD0,0x32,0x21,0x01,0xA8,0xFD,0xF7,0xA3,0xFB,0x0B,0x49,
+    0xA0,0x20,0x88,0x80,0xA6,0x74,0x60,0x7D,0x06,0x28,0x00,0xD1,0x6E,0xE7,0x33,0xB0,
+    0xF0,0xBD,0x00,0x00,0x00,0x03,0x00,0x40,0xC4,0x00,0x00,0x20,0x82,0x10,0x00,0x00,
+    0x00,0x10,0x00,0x40,0xE0,0x12,0x00,0x40,0x80,0xE1,0x00,0xE0,0x00,0x02,0x00,0x40,
+    0x10,0xB5,0x23,0x49,0x01,0x20,0x48,0x70,0x0C,0x46,0xC0,0x3C,0xE1,0x7C,0x01,0x43,
+    0xE1,0x74,0x20,0x7D,0xFD,0x21,0x08,0x40,0x20,0x75,0x20,0x7D,0xFB,0x21,0x08,0x40,
+    0x20,0x75,0x20,0x7D,0xF7,0x21,0x08,0x40,0x20,0x75,0x2D,0xE0,0xFD,0xF7,0xD2,0xFB,
+    0x01,0x20,0xFA,0xF7,0x8F,0xFE,0xF9,0xF7,0xCB,0xFC,0xFC,0xF7,0x23,0xFC,0xFE,0xF7,
+    0xB9,0xFA,0xFD,0xF7,0x67,0xFE,0xF9,0xF7,0xE9,0xFA,0xFF,0xF7,0x6F,0xFE,0xF9,0xF7,
+    0xCD,0xFE,0xFC,0xF7,0x6D,0xFA,0xFF,0xF7,0xD5,0xFB,0xFA,0xF7,0x1B,0xFE,0xFA,0xF7,
+    0x49,0xF8,0xFA,0xF7,0xC1,0xFD,0xFF,0xF7,0xCF,0xFD,0x0A,0x48,0xF9,0xF7,0x20,0xFE,
+    0xFC,0xF7,0xBC,0xFF,0xFF,0xF7,0x5C,0xFB,0xFB,0xF7,0x00,0xF9,0xFF,0xF7,0x2A,0xFE,
+    0xFD,0xF7,0x64,0xFB,0xFD,0xF7,0x56,0xF8,0x60,0x7D,0x06,0x28,0xCE,0xD1,0x10,0xBD,
+    0x24,0x01,0x00,0x20,0xB5,0x26,0x00,0x00,0x3C,0x14,0x32,0x08,0x09,0x09,0x08,0x00,
+    0x00,0x08,0x05,0x02,0x08,0x01,0x01,0x05,0x03,0x00,0x00,0x06,0x04,0x28,0x28,0x1E,
+    0x32,0x00,0xD8,0xE2,0x00,0x00,0x01,0x02,0x03,0x02,0x10,0x20,0x03,0x03,0x00,0x14,
+    0x0A,0x01,0x02,0x01,0xC8,0x03,0x10,0x20,0x5A,0x5A,0x00,0x00,0x78,0x78,0x00,0x00,
+    0x01,0x01,0x19,0x41,0x00,0x00,0x9C,0xFF,0x20,0x0F,0x10,0x03,0x03,0x08,0x90,0x01,
+    0x2C,0x01,0x2C,0x01,0x90,0x01,0x80,0x02,0x20,0x00,0xEC,0xFF,0x1A,0x00,0x1A,0x00,
+    0x04,0x03,0x05,0x02,0x01,0x00,0x08,0x09,0x06,0x05,0x04,0x03,0x01,0x02,0x09,0x07,
+    0x00,0x17,0x16,0x03,0x13,0x02,0x11,0x07,0x00,0x04,0x15,0x05,0x14,0x01,0x12,0x10,
+    0x23,0x06,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+    0x49,0x03,0x00,0x40,0x49,0x03,0x00,0x40,0x41,0x03,0x00,0x40,0x49,0x03,0x00,0x40,
+    0x41,0x03,0x00,0x40,0x49,0x03,0x00,0x40,0x41,0x03,0x00,0x40,0x41,0x03,0x00,0x40,
+    0x41,0x03,0x00,0x40,0x49,0x03,0x00,0x40,0x41,0x03,0x00,0x40,0x49,0x03,0x00,0x40,
+    0x41,0x03,0x00,0x40,0x49,0x03,0x00,0x40,0x49,0x03,0x00,0x40,0x51,0x03,0x00,0x40,
+    0x41,0x03,0x00,0x40,0x80,0x40,0x08,0x08,0x04,0x02,0x80,0x01,0x10,0x20,0x20,0x10,
+    0x02,0x04,0x01,0x08,0x40,0x00,0x00,0x00,0x11,0x12,0x00,0x40,0x0D,0x12,0x00,0x40,
+    0x15,0x12,0x00,0x40,0x09,0x12,0x00,0x40,0x05,0x12,0x00,0x40,0x01,0x12,0x00,0x40,
+    0x21,0x12,0x00,0x40,0x25,0x12,0x00,0x40,0x19,0x12,0x00,0x40,0x15,0x12,0x00,0x40,
+    0x11,0x12,0x00,0x40,0x0D,0x12,0x00,0x40,0x05,0x12,0x00,0x40,0x09,0x12,0x00,0x40,
+    0x25,0x12,0x00,0x40,0x1D,0x12,0x00,0x40,0x01,0x12,0x00,0x40,0x0E,0x17,0x11,0x1B,
+    0xD8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x28,0x00,0xD8,0x00,0x00,0x00,0x00,0x00,
+    0x28,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,
+    0x02,0x00,0x02,0x00,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x02,0x00,
+    0x05,0x00,0x08,0x00,0x0A,0x00,0x0B,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x03,0x00,
+    0x09,0x00,0x11,0x00,0x1A,0x00,0x23,0x00,0x26,0x00,0x00,0x00,0x01,0x00,0x03,0x00,
+    0x0A,0x00,0x18,0x00,0x2E,0x00,0x49,0x00,0x60,0x00,0x69,0x00,0x00,0x00,0x02,0x00,
+    0x09,0x00,0x18,0x00,0x37,0x00,0x69,0x00,0xA6,0x00,0xDA,0x00,0xEF,0x00,0x01,0x00,
+    0x05,0x00,0x11,0x00,0x2E,0x00,0x69,0x00,0xC7,0x00,0x3A,0x01,0x9C,0x01,0xC3,0x01,
+    0x02,0x00,0x08,0x00,0x1A,0x00,0x49,0x00,0xA6,0x00,0x3A,0x01,0xEE,0x01,0x89,0x02,
+    0xC7,0x02,0x02,0x00,0x0A,0x00,0x23,0x00,0x60,0x00,0xDA,0x00,0x9C,0x01,0x89,0x02,
+    0x55,0x03,0xA7,0x03,0x02,0x00,0x0B,0x00,0x26,0x00,0x69,0x00,0xEF,0x00,0xC3,0x01,
+    0xC7,0x02,0xA7,0x03,0x00,0x04,0x00,0x08,0xFF,0x07,0xFE,0x07,0xFD,0x07,0xFB,0x07,
+    0xF8,0x07,0xF4,0x07,0xF0,0x07,0xEC,0x07,0xE6,0x07,0xE0,0x07,0xDA,0x07,0xD3,0x07,
+    0xCB,0x07,0xC3,0x07,0xBA,0x07,0xB0,0x07,0xA6,0x07,0x9B,0x07,0x90,0x07,0x84,0x07,
+    0x77,0x07,0x6A,0x07,0x5D,0x07,0x4E,0x07,0x40,0x07,0x30,0x07,0x20,0x07,0x10,0x07,
+    0xFF,0x06,0xED,0x06,0xDB,0x06,0xC8,0x06,0xB5,0x06,0xA1,0x06,0x8D,0x06,0x78,0x06,
+    0x63,0x06,0x4D,0x06,0x37,0x06,0x20,0x06,0x09,0x06,0xF1,0x05,0xD9,0x05,0xC1,0x05,
+    0xA8,0x05,0x8E,0x05,0x74,0x05,0x5A,0x05,0x3F,0x05,0x24,0x05,0x08,0x05,0xEC,0x04,
+    0xD0,0x04,0xB3,0x04,0x96,0x04,0x79,0x04,0x5B,0x04,0x3D,0x04,0x1E,0x04,0x00,0x04,
+    0xE0,0x03,0xC1,0x03,0xA1,0x03,0x81,0x03,0x61,0x03,0x40,0x03,0x20,0x03,0xFF,0x02,
+    0xDD,0x02,0xBC,0x02,0x9A,0x02,0x78,0x02,0x56,0x02,0x34,0x02,0x12,0x02,0xEF,0x01,
+    0xCC,0x01,0xA9,0x01,0x86,0x01,0x63,0x01,0x40,0x01,0x1D,0x01,0xF9,0x00,0xD6,0x00,
+    0xB2,0x00,0x8E,0x00,0x6B,0x00,0x47,0x00,0x23,0x00,0x00,0x00,0xFF,0x01,0x01,0x01,
+    0xFF,0x01,0x01,0x01,0xFF,0xFF,0x01,0x01,0x01,0x01,0xFF,0x01,0x01,0x01,0x01,0xFF,
+    0x01,0x01,0x01,0x01,0xFF,0xFF,0x01,0x01,0xFF,0x01,0x01,0x01,0xFF,0x01,0xFF,0x01,
+    0x01,0xFF,0x01,0x01,0xFF,0x01,0x01,0xFF,0x01,0x01,0xFF,0x01,0xFF,0xFF,0x01,0x01,
+    0x01,0xFF,0xFF,0x01,0x01,0x01,0xFF,0x01,0xFF,0x01,0xFF,0x01,0x01,0x01,0x01,0xFF,
+    0xFF,0xFF,0x01,0x01,0x01,0xFF,0xFF,0xFF,0x01,0x01,0x01,0x01,0x01,0xFF,0x01,0x01,
+    0x01,0x01,0x01,0xFF,0xFF,0x00,0x01,0x01,0x01,0x00,0x01,0x01,0x01,0x00,0x81,0x01,
+    0x01,0x01,0x01,0x81,0x01,0x01,0x01,0x01,0x81,0x01,0x01,0x01,0x01,0x81,0x82,0x00,
+    0x00,0x82,0x00,0x00,0x02,0x82,0x01,0x81,0x01,0x01,0x81,0x01,0x01,0x81,0x01,0x01,
+    0x81,0x01,0x01,0x81,0x01,0x81,0x81,0x01,0x01,0x01,0x81,0x81,0x01,0x01,0x02,0x00,
+    0x02,0x00,0x02,0x00,0x00,0x02,0x02,0x02,0x00,0x00,0x00,0x02,0x00,0x02,0x81,0x81,
+    0x81,0x01,0x01,0x01,0x01,0x01,0x02,0x02,0x02,0x02,0x02,0x02,0x82,0x02,0x00,0x00,
+    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+    0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+    0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
+    0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
+    0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
+    0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
+    0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
+    0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
+    0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
+    0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
+    0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
+    0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
+    0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
+    0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
+    0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
+    0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
+    0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
+    0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
+    0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
+    0xFF,0xFF,0xFF,0xFF,0x08,0x00,0x09,0x00,0x2C,0x01,0x2C,0x01,0x20,0x4E,0xCA,0xCA,
+    0xAA,0x55,0xAA,0x55,0x11,0x27,0x17,0x92,0x01,0x00,0x00,0x01,0x96,0xBB,0x96,0x66,
+    0xFF,0xFF,0xFF,0xFF,0x11,0x22,0x33,0x44,0x55,0x66,0x77,0x88,0xDC,0xCA,0x8B,0xB3,
+};
+
+#endif
+
+

+ 1 - 1
components/tp/luat_lib_tp.c

@@ -33,7 +33,7 @@ static const tp_reg_t tp_regs[] = {
 	{"jd9261t_inited",  &tp_config_jd9261t_inited},
 	{"ft3x68", &tp_config_ft3x68},
     {"cst820", &tp_config_cst820},
-    // {"cst9220", &tp_config_cst820},
+    {"cst9220", &tp_config_cst92xx},
     {"", NULL}
 };
 

+ 1 - 1
components/tp/luat_tp.h

@@ -69,7 +69,7 @@ extern luat_tp_opts_t tp_config_jd9261t;
 extern luat_tp_opts_t tp_config_jd9261t_inited;
 extern luat_tp_opts_t tp_config_ft3x68;
 extern luat_tp_opts_t tp_config_cst820;
-// extern luat_tp_opts_t tp_config_cst9220;
+extern luat_tp_opts_t tp_config_cst92xx;
 
 int luat_tp_init(luat_tp_config_t* luat_tp_config);
 

+ 11 - 29
components/tp/luat_tp_cst820.c

@@ -16,7 +16,7 @@
 
 #define CST820_POINT_INFO_NUM        (4)
 #define CST820_TOUCH_NUMBER_MIN      (1)
-#define CST820_TOUCH_NUMBER_MAX      (2)
+#define CST820_TOUCH_NUMBER_MAX      (1)
 
 #define CST820_REFRESH_RATE_MIN      (5)
 #define CST820_REFRESH_RATE_MAX      (20)
@@ -42,19 +42,10 @@ typedef struct luat_touch_info{
 
 static uint8_t cst820_init_state = 0;
 
-int tp_cst820_clear_status(luat_tp_config_t* luat_tp_config){
-	if (tp_i2c_write_reg16(luat_tp_config, CST820_STATUS, (uint8_t[]){0x00}, 1)){
-		LLOGE("write status reg fail!");
-		return -1;
-	}
-	return 0;
-}
-
 static int tp_cst820_detect(luat_tp_config_t* luat_tp_config){
     uint8_t chip_id = 0;
     luat_tp_config->address = CST820_ADDRESS;
     tp_i2c_read_reg8(luat_tp_config, CST820_CHIP_ID, &chip_id, 1, 0);
-    LLOGD("chip_id:0x%02X", chip_id);
     if (chip_id == CST820_CHIP_ID_CODE){
         LLOGI("TP find device CST820 ,address:0x%02X",luat_tp_config->address);
         return 0;
@@ -139,16 +130,17 @@ static void tp_cst820_read_done(luat_tp_config_t * luat_tp_config){
 // cst820 get tp info.
 typedef struct {
     uint8_t x_h : 4;
-    uint8_t : 4;
+    uint8_t : 2;
+    uint8_t event: 2;
     uint8_t x_l;
     uint8_t y_h : 4;
-    uint8_t : 4;
+    uint8_t id : 4;
     uint8_t y_l;
 } point_data_t;
 
-static int16_t pre_x[CST820_TOUCH_NUMBER_MAX] = {-1, -1};
-static int16_t pre_y[CST820_TOUCH_NUMBER_MAX] = {-1, -1};
-static int16_t pre_w[CST820_TOUCH_NUMBER_MAX] = {-1, -1};
+static int16_t pre_x[CST820_TOUCH_NUMBER_MAX] = {-1};
+static int16_t pre_y[CST820_TOUCH_NUMBER_MAX] = {-1};
+static int16_t pre_w[CST820_TOUCH_NUMBER_MAX] = {-1};
 static uint8_t s_tp_down[CST820_TOUCH_NUMBER_MAX];
 
 static uint8_t read_buff[CST820_POINT_INFO_NUM * CST820_TOUCH_NUMBER_MAX];
@@ -230,13 +222,14 @@ void cst820_read_point(uint8_t *input_buff, void *buf, uint8_t touch_num){
 		uint8_t off_set;
 		for (read_index = 0; read_index < touch_num; read_index++){
 			off_set = read_index * CST820_POINT_INFO_NUM;
-			read_id = read_index;
+            point_data_t* point_buff = &read_buf[off_set];
+			read_id = point_buff->id;
 			if (read_id >= CST820_POINT_INFO_NUM){
 				LLOGE("%s, touch ID %d is out range!\r\n", __func__, read_id);
 				return;
 			}
 			pre_id[read_index] = read_id;
-            point_data_t* point_buff = &read_buf[off_set];
+            // LLOGD("%s, id %d event:%d ", __func__, point_buff->id,point_buff->event);
 			input_x = point_buff->x_h << 8 | point_buff->x_l;	/* x */
 			input_y = point_buff->y_h << 8 | point_buff->y_l;	/* y */
 			cst820_touch_down(buf, read_id, input_x, input_y, input_w);
@@ -250,24 +243,14 @@ void cst820_read_point(uint8_t *input_buff, void *buf, uint8_t touch_num){
 }
 
 static int tp_cst820_read(luat_tp_config_t* luat_tp_config, luat_tp_data_t *luat_tp_data){
-    uint8_t touch_num=0, point_status=0;
+    uint8_t touch_num=0;
     tp_i2c_read_reg8(luat_tp_config, CST820_STATUS, &touch_num, 1, 0);
     
-    // tp_cst820_read_status(luat_tp_config, &point_status);
-    // if (point_status == 0){           /* no data */
-    //     goto exit_;
-    // }
-    // if ((point_status & 0x80) == 0){   /* data is not ready */
-    //     goto exit_;
-    // }
-    // touch_num = point_status & 0x0F;  /* get point num */
     // LLOGD("touch_num = %d",touch_num);
     if (touch_num > CST820_TOUCH_NUMBER_MAX) {/* point num is not correct */
         touch_num = 0;
         goto exit_;
     }
-    
-    // LLOGD("tp_cst820_read touch_num:%d",touch_num);
 
     memset(read_buff, 0x00, sizeof(read_buff));
     
@@ -278,7 +261,6 @@ static int tp_cst820_read(luat_tp_config_t* luat_tp_config, luat_tp_data_t *luat
     cst820_read_point(read_buff, luat_tp_data, touch_num);
     
 exit_:
-    // tp_cst820_clear_status(luat_tp_config);
     return touch_num;
 }
 

+ 724 - 0
components/tp/luat_tp_cst9220.c

@@ -0,0 +1,724 @@
+#include "luat_base.h"
+#include "luat_tp.h"
+#include "luat_gpio.h"
+#include "luat_mem.h"
+#include "luat_rtos.h"
+#include "luat_tp_reg.h"
+
+#include "cst92xx_fw.h"
+
+
+#define LUAT_LOG_TAG "cst92xx"
+#include "luat_log.h"
+
+#define HYN_POWER_ON_UPDATA           (0) //touch fw updata
+
+#define CST92XX_ADDRESS               (0x5A)
+
+#define CST9217_CHIP_ID_CODE          (0x9217)
+#define CST9220_CHIP_ID_CODE          (0x9220)
+
+#define CST92XX_CHIP_ID               (0xA7)
+
+#define CST92XX_STATUS                (0x02)
+
+#define CST92XX_POINT1_REG            (0x03)
+
+#define CST92XX_CONFIG_SIZE           (CST92XX_CONFIG_FRESH - CST92XX_CONFIG_REG + 1)
+#define CST92XX_POINT_INFO_NUM        (5)
+#define CST92XX_TOUCH_NUMBER_MIN      (1)
+#define CST92XX_TOUCH_NUMBER_MAX      (2)
+
+#define CST92XX_REFRESH_RATE_MIN      (5)
+#define CST92XX_REFRESH_RATE_MAX      (20)
+
+#define U8TO16(x1,x2) ((((x1)&0xFF)<<8)|((x2)&0xFF))
+#define U8TO32(x1,x2,x3,x4) ((((x1)&0xFF)<<24)|(((x2)&0xFF)<<16)|(((x3)&0xFF)<<8)|((x4)&0xFF))
+#define U16REV(x)  ((((x)<<8)&0xFF00)|(((x)>>8)&0x00FF))
+
+enum work_mode{
+    NOMAL_MODE = 0,
+    GESTURE_MODE = 1,
+    LP_MODE = 2,
+    DEEPSLEEP = 3,
+    DIFF_MODE = 4,
+    RAWDATA_MODE = 5,
+    BASELINE_MODE = 6,
+    CALIBRATE_MODE = 7,
+    FAC_TEST_MODE = 8,
+    ENTER_BOOT_MODE = 0xCA,
+};
+
+struct tp_info{
+    uint8_t  fw_sensor_txnum;
+    uint8_t  fw_sensor_rxnum;
+    uint8_t  fw_key_num;
+    uint8_t  reserve;
+    uint16_t fw_res_y;
+    uint16_t fw_res_x;
+    uint32_t fw_boot_time;
+    uint32_t fw_project_id;
+    uint32_t fw_chip_type;
+    uint32_t fw_ver;
+    uint32_t ic_fw_checksum;
+    uint32_t fw_module_id;
+};
+
+typedef struct hyn_ts_data {
+    enum work_mode work_mode;
+    struct tp_info hw_info;
+    int boot_is_pass;
+    int need_updata_fw;
+}hyn_ts_data_t;
+
+static hyn_ts_data_t hyn_92xxdata = {0};
+
+typedef struct luat_touch_info{
+    union{
+        struct {
+            uint64_t version:8;
+            uint64_t x_max:16;
+            uint64_t y_max:16;
+            uint64_t touch_num:4;
+            uint64_t :4;
+            uint64_t int_type:2;
+            uint64_t :1;
+            uint64_t x2y:1;
+            uint64_t stretch_rank:2;
+            uint64_t :2;
+            uint64_t :8;
+        };
+        uint64_t info;
+    };
+}luat_tp_info_t;
+
+static uint8_t cst92xx_init_state = 0;
+
+static int hyn_wr_reg(luat_tp_config_t* luat_tp_config, uint32_t reg_addr, uint8_t reg_len, uint8_t *rbuf, uint16_t rlen){
+    int ret = 0,i=0;
+    uint8_t wbuf[4] = {0};
+    i = reg_len;
+    while(i){
+        i--;
+        wbuf[i] = reg_addr;
+        reg_addr >>= 8;
+    }
+
+    if (luat_tp_config->soft_i2c != NULL){
+        ret = i2c_soft_send(luat_tp_config->soft_i2c, luat_tp_config->address, (char *)wbuf, reg_len, rlen?0:1);
+    }else{
+        ret = luat_i2c_send(luat_tp_config->i2c_id, luat_tp_config->address, wbuf, reg_len, rlen?0:1);
+    }
+    if(rlen){
+        if (luat_tp_config->soft_i2c != NULL){
+            ret |= i2c_soft_recv(luat_tp_config->soft_i2c, luat_tp_config->address, (char *)rbuf, rlen);
+        }else{
+            ret |= luat_i2c_recv(luat_tp_config->i2c_id, luat_tp_config->address, rbuf, rlen);
+        }
+    }
+
+    return ret;
+}
+
+int tp_cst92xx_clear_status(luat_tp_config_t* luat_tp_config){
+	if (tp_i2c_write_reg16(luat_tp_config, CST92XX_STATUS, (uint8_t[]){0x00}, 1)){
+		LLOGE("write status reg fail!");
+		return -1;
+	}
+	return 0;
+}
+
+static int tp_cst92xx_detect(luat_tp_config_t* luat_tp_config){
+    struct tp_info *ic = &hyn_92xxdata.hw_info;
+    // LLOGD("module_id: 0x%04x", ic->fw_chip_type);
+    if ((ic->fw_chip_type != CST9217_CHIP_ID_CODE) && (ic->fw_chip_type != CST9220_CHIP_ID_CODE)){
+        LLOGE("fw_chip_type error 0x%04x", ic->fw_chip_type);
+        return -1;
+    }else{
+        LLOGI("TP find device CST9220 ,address:0x%02X",luat_tp_config->address);
+    }
+    return 0;
+}
+
+static int luat_tp_irq_cb(int pin, void *args){
+    if (cst92xx_init_state == 0){
+        return -1;
+    }
+    luat_tp_config_t* luat_tp_config = (luat_tp_config_t*)args;
+    luat_tp_irq_enable(luat_tp_config, 0);
+    luat_rtos_message_send(luat_tp_config->task_handle, 1, args);
+    return 0;
+}
+
+static int tp_cst92xx_set_workmode(luat_tp_config_t* luat_tp_config, enum work_mode mode,uint8_t enable){
+    int ret = -1;
+    uint8_t i2c_buf[4] = {0};
+    uint8_t i = 0;
+    hyn_92xxdata.work_mode = mode;
+    if(mode != NOMAL_MODE){
+
+    }
+    for(i=0;i<3;i++){
+        luat_rtos_task_sleep(2);
+        if (hyn_wr_reg(luat_tp_config,0xD11E,2,i2c_buf,0)) {
+            luat_rtos_task_sleep(1);
+            continue;
+        }
+        luat_rtos_task_sleep(2);
+        if (hyn_wr_reg(luat_tp_config,0x0002,2,i2c_buf,2)) {
+            luat_rtos_task_sleep(1);
+            continue;
+        }
+        if(i2c_buf[1] == 0x1E){
+            break;
+        }
+    }
+
+    switch(mode){
+        case NOMAL_MODE:
+            luat_tp_irq_enable(luat_tp_config, 1);
+            if (hyn_wr_reg(luat_tp_config,0xD109,2,i2c_buf,0)) {
+                return -1;
+            }
+            break;
+        case GESTURE_MODE:
+            if (hyn_wr_reg(luat_tp_config,0xD104,2,i2c_buf,0)) {
+                return -1;
+            }
+            break;
+        case LP_MODE:
+            if (hyn_wr_reg(luat_tp_config,0xD107,2,i2c_buf,0)) {
+                return -1;
+            }
+            break;
+        case DIFF_MODE:
+            if (hyn_wr_reg(luat_tp_config,0xD10D,2,i2c_buf,0)) {
+                return -1;
+            }
+            break;
+
+        case RAWDATA_MODE:
+            if (hyn_wr_reg(luat_tp_config,0xD10A,2,i2c_buf,0)) {
+                return -1;
+            }
+            break;
+        case FAC_TEST_MODE:
+            hyn_wr_reg(luat_tp_config,0xD114,2,i2c_buf,0);
+            break;
+        case DEEPSLEEP:
+            hyn_wr_reg(luat_tp_config,0xD105,2,i2c_buf,0);
+            break;
+        default :
+            hyn_92xxdata.work_mode = NOMAL_MODE;
+            break;
+    }
+
+    return 0;
+}
+
+static int tp_cst92xx_updata_tpinfo(luat_tp_config_t* luat_tp_config){
+    uint8_t buf[30] = {0};
+    struct tp_info *ic = &hyn_92xxdata.hw_info;
+
+    tp_cst92xx_set_workmode(luat_tp_config, 0xff,0);
+    if(hyn_wr_reg(luat_tp_config,0xD101,2,buf,0)){
+        return -1;
+    }
+    luat_rtos_task_sleep(5);
+
+    //firmware_project_id   firmware_ic_type
+    if(hyn_wr_reg(luat_tp_config,0xD1F4,2,buf,28)){
+        return -1;
+    }
+    ic->fw_project_id = ((uint16_t)buf[17] <<8) + buf[16];
+    ic->fw_chip_type = ((uint16_t)buf[19] <<8) + buf[18];
+
+    //firmware_version
+    ic->fw_ver = (buf[23]<<24)|(buf[22]<<16)|(buf[21]<<8)|buf[20];
+
+    //tx_num   rx_num   key_num
+    ic->fw_sensor_txnum = ((uint16_t)buf[1]<<8) + buf[0];
+    ic->fw_sensor_rxnum = buf[2];
+    ic->fw_key_num = buf[3];
+
+    ic->fw_res_y = (buf[7]<<8)|buf[6];
+    ic->fw_res_x = (buf[5]<<8)|buf[4];
+
+    //fw_checksum
+    ic->ic_fw_checksum = (buf[27]<<24)|(buf[26]<<16)|(buf[25]<<8)|buf[24];
+
+    LLOGD("IC_info project_id:%04x ictype:%04x fw_ver:%x checksum:%#x",ic->fw_project_id,ic->fw_chip_type,ic->fw_ver,ic->ic_fw_checksum);
+
+    tp_cst92xx_set_workmode(luat_tp_config,NOMAL_MODE,1);
+    return 0;
+}
+
+static int tp_cst92xx_hw_reset(luat_tp_config_t* luat_tp_config){
+    if (luat_tp_config->pin_rst != LUAT_GPIO_NONE){
+        luat_gpio_set(luat_tp_config->pin_rst, Luat_GPIO_LOW);
+        luat_rtos_task_sleep(8);
+        luat_gpio_set(luat_tp_config->pin_rst, Luat_GPIO_HIGH);
+    }
+    return 0;
+}
+
+static int16_t read_word_from_mem(luat_tp_config_t* luat_tp_config, uint8_t type, uint16_t addr, uint32_t *value){
+    uint8_t i2c_buf[4] = {0};
+
+    i2c_buf[0] = 0xA0;
+    i2c_buf[1] = 0x10;
+    i2c_buf[2] = type;
+    if (tp_i2c_write(luat_tp_config, i2c_buf, 3, NULL, 0)){
+        return -1;
+    }
+
+    i2c_buf[0] = 0xA0;
+    i2c_buf[1] = 0x0C;
+    i2c_buf[2] = addr;
+    i2c_buf[3] = addr >> 8;
+    if (tp_i2c_write(luat_tp_config, i2c_buf, 4, NULL, 0)){
+        return -1;
+    }
+
+    i2c_buf[0] = 0xA0;
+    i2c_buf[1] = 0x04;
+    i2c_buf[2] = 0xE4;
+    if (tp_i2c_write(luat_tp_config, i2c_buf, 3, NULL, 0)){
+        return -1;
+    }
+
+    for (uint8_t t = 0;; t++){
+        if (t >= 100){
+            return -1;
+        }
+        if (hyn_wr_reg(luat_tp_config, 0xA004,2,i2c_buf,1)){
+            continue;
+        }
+        if (i2c_buf[0] == 0x00){
+            break;
+        }
+    }
+    if (hyn_wr_reg(luat_tp_config, 0xA018,2, i2c_buf, 4)){
+        return -1;
+    }
+    *value = ((uint32_t)(i2c_buf[0])) |
+             (((uint32_t)(i2c_buf[1])) << 8) |
+             (((uint32_t)(i2c_buf[2])) << 16) |
+             (((uint32_t)(i2c_buf[3])) << 24);
+
+    return 0;
+}
+
+static int  tp_cst92xx_enter_boot(luat_tp_config_t* luat_tp_config){
+    uint8_t i2c_buf[4] = {0};
+    for (uint8_t t = 10; t < 30; t += 2){
+        tp_cst92xx_hw_reset(luat_tp_config);
+        luat_rtos_task_sleep(t);
+
+        if(hyn_wr_reg(luat_tp_config, 0xA001AA, 3, i2c_buf, 0)){
+            continue;
+        }
+
+        luat_rtos_task_sleep(1);
+
+        if(hyn_wr_reg(luat_tp_config, 0xA002,  2, i2c_buf, 2)){
+            continue;
+        }
+
+        if ((i2c_buf[0] == 0x55) && (i2c_buf[1] == 0xB0)) {
+            break;
+        }
+    }
+
+    if(hyn_wr_reg(luat_tp_config, 0xA00100, 3, i2c_buf, 0)){
+        return -1;
+    }
+
+    return 0;
+}
+
+static int tp_cst92xx_read_chip_id(luat_tp_config_t* luat_tp_config){
+    int16_t ret = 0;
+    uint8_t retry = 3;
+    uint32_t partno_chip_type,module_id;
+
+    if (tp_cst92xx_enter_boot(luat_tp_config)){
+        LLOGE("enter_bootloader error");
+        return -1;
+    }
+    for (; retry > 0; retry--){
+        // partno
+        ret = read_word_from_mem(luat_tp_config, 1, 0x077C, &partno_chip_type);
+        if (ret){
+            continue;
+        }
+        // module id
+        ret = read_word_from_mem(luat_tp_config, 0, 0x7FC0, &module_id);
+        if (ret){
+            continue;
+        }
+        if ((partno_chip_type >> 16) == 0xCACA){
+            partno_chip_type &= 0xffff;
+            break;
+        }
+    }
+    tp_cst92xx_hw_reset(luat_tp_config);
+    luat_rtos_task_sleep(30);
+    LLOGD("partno_chip_type: 0x%04x", partno_chip_type);
+    LLOGD("module_id: 0x%04x", module_id);
+    if ((partno_chip_type != CST9217_CHIP_ID_CODE) && (partno_chip_type != CST9220_CHIP_ID_CODE)){
+        LLOGE("partno_chip_type error 0x%04x", partno_chip_type);
+        // return -1;
+    }
+    return 0;
+}
+
+static uint32_t cst92xx_read_checksum(luat_tp_config_t* luat_tp_config){
+    uint8_t i2c_buf[4] = {0};
+    uint32_t chip_checksum = 0;
+    uint8_t retry = 5;
+    
+    hyn_92xxdata.boot_is_pass = 0;
+
+    if (hyn_wr_reg(luat_tp_config,0xA00300,3,i2c_buf,0)) {
+        return -1;
+    }      
+    luat_rtos_task_sleep(2);    
+    while(retry--){
+        luat_rtos_task_sleep(5);
+        if (hyn_wr_reg(luat_tp_config,0xA000,2,i2c_buf,1)) {
+            continue;
+        }
+        if(i2c_buf[0]!=0) break;
+    }
+
+    luat_rtos_task_sleep(1);
+    if(i2c_buf[0] == 0x01){
+        hyn_92xxdata.boot_is_pass = 1;
+        memset(i2c_buf,0,sizeof(i2c_buf));
+
+        if (hyn_wr_reg(luat_tp_config,0xA008,2,i2c_buf,4)) {
+            return -1;
+        }      
+
+        chip_checksum = ((uint32_t)(i2c_buf[0])) |
+            (((uint32_t)(i2c_buf[1])) << 8) |
+            (((uint32_t)(i2c_buf[2])) << 16) |
+            (((uint32_t)(i2c_buf[3])) << 24);
+    }
+    else{
+        hyn_92xxdata.need_updata_fw = 1;
+    }
+
+    return chip_checksum;
+}
+
+static int cst92xx_updata_judge(luat_tp_config_t* luat_tp_config, uint8_t *p_fw, uint16_t len){
+    uint32_t f_checksum,f_fw_ver,f_ictype,f_fw_project_id;
+    uint8_t *p_data = p_fw + len - 28;   //7F64
+    struct tp_info *ic = &hyn_92xxdata.hw_info;
+
+    if (tp_cst92xx_enter_boot(luat_tp_config)){
+        LLOGI("cst92xx_enter_boot fail,need update");
+        return -1; 
+    }
+    hyn_92xxdata.hw_info.ic_fw_checksum = cst92xx_read_checksum(luat_tp_config);
+    if(hyn_92xxdata.boot_is_pass == 0){
+        LLOGI("boot_is_pass %d,need force update",hyn_92xxdata.boot_is_pass);
+        return -1; //need updata
+    }
+    
+    f_fw_project_id = U8TO16(p_data[1],p_data[0]);
+    f_ictype = U8TO16(p_data[3],p_data[2]);
+
+    f_fw_ver = U8TO16(p_data[7],p_data[6]);
+    f_fw_ver = (f_fw_ver<<16)|U8TO16(p_data[5],p_data[4]);
+
+    f_checksum = U8TO16(p_data[11],p_data[10]);
+    f_checksum = (f_checksum << 16)|U8TO16(p_data[9],p_data[8]);
+
+
+    LLOGI("Bin_info project_id:0x%04x ictype:0x%04x fw_ver:0x%x checksum:0x%x",f_fw_project_id,f_ictype,f_fw_ver,f_checksum);
+    if(f_ictype != ic->fw_chip_type || f_fw_project_id != ic->fw_project_id){
+        LLOGE("not update,please confirm: ic_type 0x%04x,ic_project_id 0x%04x",ic->fw_chip_type,ic->fw_project_id);
+        return 0; //not updata
+    }
+    if(f_checksum != ic->ic_fw_checksum && f_fw_ver > ic->fw_ver){
+        LLOGI("need update!");
+        return -1; //need updata
+    }
+    LLOGI("cst92xx_updata_judge done, no need update");
+    return 0;
+}
+
+
+static int tp_cst92xx_gpio_init(luat_tp_config_t* luat_tp_config){
+    luat_gpio_mode(luat_tp_config->pin_rst, Luat_GPIO_OUTPUT, Luat_GPIO_DEFAULT, Luat_GPIO_HIGH);
+    luat_gpio_mode(luat_tp_config->pin_int, Luat_GPIO_OUTPUT, Luat_GPIO_DEFAULT, Luat_GPIO_HIGH);
+    luat_gpio_set(luat_tp_config->pin_rst, Luat_GPIO_HIGH);
+    luat_gpio_set(luat_tp_config->pin_int, Luat_GPIO_HIGH);
+    luat_rtos_task_sleep(10);
+    return 0;
+}
+
+static int tp_cst92xx_init(luat_tp_config_t* luat_tp_config){
+    int ret = 0;
+    luat_rtos_task_sleep(100);
+    tp_cst92xx_gpio_init(luat_tp_config);
+
+    luat_tp_config->int_type = Luat_GPIO_FALLING;
+
+    luat_gpio_t gpio = {0};
+    gpio.pin = luat_tp_config->pin_int;
+    gpio.mode = Luat_GPIO_IRQ;
+    gpio.pull = Luat_GPIO_PULLUP;
+    gpio.irq = luat_tp_config->int_type;
+    gpio.irq_cb = luat_tp_irq_cb;
+    gpio.irq_args = luat_tp_config;
+    luat_gpio_setup(&gpio);
+    luat_tp_config->address = CST92XX_ADDRESS;
+    tp_cst92xx_hw_reset(luat_tp_config);
+    luat_rtos_task_sleep(40);
+
+#if HYN_POWER_ON_UPDATA
+    if(tp_cst92xx_read_chip_id(luat_tp_config)){
+        LLOGE("cst92xx_read_chip_id failed");
+        return ret;
+    }
+
+    ret = tp_cst92xx_updata_tpinfo(luat_tp_config);
+    if(ret){
+        LLOGE("cst92xx_updata_tpinfo failed");
+        return ret;
+    }
+    cst92xx_updata_judge(luat_tp_config,(uint8_t*)fw_bin,CST92XX_BIN_SIZE);
+    tp_cst92xx_hw_reset(luat_tp_config);
+    luat_rtos_task_sleep(40);
+#endif
+
+    ret = tp_cst92xx_updata_tpinfo(luat_tp_config);
+    if(ret){
+        LLOGE("cst92xx_updata_tpinfo failed");
+        return ret;
+    }
+
+    ret = tp_cst92xx_detect(luat_tp_config);
+    if (ret){
+        LLOGE("tp detect fail!");
+        return ret;
+    }
+    ret |= tp_cst92xx_set_workmode(luat_tp_config, NOMAL_MODE,0);
+    luat_rtos_task_sleep(20);
+    cst92xx_init_state = 1;
+    return ret;
+}
+
+static int tp_cst92xx_deinit(luat_tp_config_t* luat_tp_config){
+    cst92xx_init_state = 0;
+    if (luat_tp_config->pin_int != LUAT_GPIO_NONE){
+        luat_gpio_close(luat_tp_config->pin_int);
+    }
+    if (luat_tp_config->pin_rst != LUAT_GPIO_NONE){
+        luat_gpio_close(luat_tp_config->pin_rst);
+    }
+    return 0;
+}
+
+static void tp_cst92xx_read_done(luat_tp_config_t * luat_tp_config){
+	luat_tp_irq_enable(luat_tp_config, 1);
+}
+
+// cst92xx get tp info.
+typedef struct {
+    uint8_t switch_ : 4;
+    uint8_t id : 4;
+    uint8_t x_h : 4;
+    uint8_t  : 4;
+    uint8_t y_h : 4;
+    uint8_t  : 4;
+    uint8_t y_l : 4;
+    uint8_t x_l : 4;
+    uint8_t z : 7;
+    uint8_t  : 1;
+} point_data_t;
+
+static int16_t pre_x[CST92XX_TOUCH_NUMBER_MAX] = {-1, -1};
+static int16_t pre_y[CST92XX_TOUCH_NUMBER_MAX] = {-1, -1};
+static int16_t pre_w[CST92XX_TOUCH_NUMBER_MAX] = {-1, -1};
+static uint8_t s_tp_down[CST92XX_TOUCH_NUMBER_MAX];
+
+static uint8_t read_buff[CST92XX_POINT_INFO_NUM * CST92XX_TOUCH_NUMBER_MAX + 5] = {0};
+
+void cst92xx_touch_up(void *buf, int8_t id){
+	luat_tp_data_t *read_data = (luat_tp_data_t *)buf;
+
+	if(s_tp_down[id] == 1){
+		s_tp_down[id] = 0;
+		read_data[id].event = TP_EVENT_TYPE_UP;
+	}else{
+		read_data[id].event = TP_EVENT_TYPE_NONE;
+	}
+
+	read_data[id].timestamp = luat_mcu_ticks();
+	read_data[id].width = pre_w[id];
+	read_data[id].x_coordinate = pre_x[id];
+	read_data[id].y_coordinate = pre_y[id];
+	read_data[id].track_id = id;
+
+	pre_x[id] = -1;  /* last point is none */
+	pre_y[id] = -1;
+	pre_w[id] = -1;
+}
+
+void cst92xx_touch_down(void *buf, int8_t id, int16_t x, int16_t y, int16_t w){
+	luat_tp_data_t *read_data = (luat_tp_data_t *)buf;
+
+	if (s_tp_down[id] == 1){
+		read_data[id].event = TP_EVENT_TYPE_MOVE;
+	}else{
+		read_data[id].event = TP_EVENT_TYPE_DOWN;
+		s_tp_down[id] = 1;
+	}
+
+	read_data[id].timestamp = luat_mcu_ticks();
+	read_data[id].width = w;
+	read_data[id].x_coordinate = x;
+	read_data[id].y_coordinate = y;
+	read_data[id].track_id = id;
+
+	pre_x[id] = x; /* save last point */
+	pre_y[id] = y;
+	pre_w[id] = w;
+}
+
+void cst92xx_read_point(uint8_t *input_buff, void *buf, uint8_t touch_num){
+	uint8_t *read_buf = input_buff;
+	uint8_t read_index;
+	int8_t read_id = 0;
+	int16_t input_x = 0;
+	int16_t input_y = 0;
+	int16_t input_w = 0;
+
+	static uint8_t pre_touch = 0;
+	static int8_t pre_id[CST92XX_TOUCH_NUMBER_MAX] = {0};
+
+	if (pre_touch > touch_num){                                       /* point up */
+		for (read_index = 0; read_index < pre_touch; read_index++){
+			uint8_t j;
+			for (j = 0; j < touch_num; j++){                          /* this time touch num */
+				read_id = j;
+				if (read_id >= CST92XX_POINT_INFO_NUM){
+					LLOGE("%s, touch ID %d is out range!\r\n", __func__, read_id);
+					return;
+				}
+				if (pre_id[read_index] == read_id)                   /* this id is not free */
+					break;
+
+				if (j >= touch_num - 1){
+					uint8_t up_id;
+					up_id = pre_id[read_index];
+					cst92xx_touch_up(buf, up_id);
+				}
+			}
+		}
+	}
+	if (touch_num){                                                 /* point down */
+		uint8_t off_set = 0;
+		for (read_index = 0; read_index < touch_num; read_index++){
+            if (read_index){
+                off_set = read_index * CST92XX_POINT_INFO_NUM + 2;
+            }
+			
+			point_data_t* point_buff = &read_buf[off_set];
+			read_id = point_buff->id;
+			if (read_id >= CST92XX_POINT_INFO_NUM){
+				LLOGE("%s, touch ID %d is out range!", __func__, read_id);
+				return;
+			}
+			pre_id[read_index] = read_id;
+            // LLOGD("%s, id %d switch:0x%02x z:%d", __func__, point_buff->id,point_buff->switch_,point_buff->z);
+			input_x = point_buff->x_h << 4 | point_buff->x_l;	/* x */
+			input_y = point_buff->y_h << 4 | point_buff->y_l;	/* y */
+            if (point_buff->switch_ == 0){
+                cst92xx_touch_up(buf, pre_id[read_index]);
+            }else{
+                cst92xx_touch_down(buf, read_id, input_x, input_y, input_w);
+            }
+
+		}
+	}else if (pre_touch){
+		for(read_index = 0; read_index < pre_touch; read_index++){
+			cst92xx_touch_up(buf, pre_id[read_index]);
+		}
+	}
+	pre_touch = touch_num;
+}
+
+int tp_cst92xx_read_status(luat_tp_config_t* luat_tp_config, uint8_t *status){
+	if (tp_i2c_read_reg16(luat_tp_config, CST92XX_STATUS, status, 1, 1)){
+		LLOGE("read status reg fail!\r\n");
+		return -1;
+	}
+	// LLOGD("status=0x%02X\r\n", *status); // 调试需要看!!!
+	return 0;
+}
+
+
+static int tp_cst92xx_read(luat_tp_config_t* luat_tp_config, luat_tp_data_t *luat_tp_data){
+    uint8_t touch_num=0, point_status=0;
+    // uint8_t i2c_buf[CST92XX_TOUCH_NUMBER_MAX*5+5] = {0};
+    memset(read_buff, 0x00, sizeof(read_buff));
+
+    if (hyn_wr_reg(luat_tp_config, 0xD000,2,read_buff,sizeof(read_buff))){
+        goto exit_;
+    }   
+        
+    if (hyn_wr_reg(luat_tp_config, 0xD000AB,3,read_buff,0)){
+        goto exit_;
+    }   
+
+    luat_rtos_task_sleep(8);
+    // for (size_t i = 0; i < sizeof(read_buff); i++){
+    //     LLOGD("read_buff[%d] = 0x%02X", i, read_buff[i]);
+    // }
+
+    if (read_buff[6] != 0xAB) {
+        // LLOGE("fail buf[6]=0x%02x",i2c_buf[6]);
+        goto exit_;
+    }
+
+    touch_num = read_buff[5] & 0x7F;
+
+    if (touch_num > CST92XX_TOUCH_NUMBER_MAX) {
+        LLOGE("fail touch_num=%d",touch_num);
+        goto exit_;
+    }
+
+    // LLOGD("touch_num = %d",touch_num);
+
+    if (touch_num > CST92XX_TOUCH_NUMBER_MAX) {/* point num is not correct */
+        touch_num = 0;
+        goto exit_;
+    }
+
+    
+    if (touch_num){
+    //     tp_i2c_read_reg8(luat_tp_config, CST92XX_POINT1_REG, read_buff, touch_num * CST92XX_POINT_INFO_NUM, 0);
+    }else{
+        memset(read_buff, 0x00, sizeof(read_buff));
+    }
+
+    cst92xx_read_point(read_buff, luat_tp_data, touch_num);
+    
+exit_:
+    // tp_cst92xx_clear_status(luat_tp_config);
+    return touch_num;
+}
+
+luat_tp_opts_t tp_config_cst92xx = {
+    .name = "cst92xx",
+    .init = tp_cst92xx_init,
+    .deinit = tp_cst92xx_deinit,
+    .read = tp_cst92xx_read,
+	.read_done = tp_cst92xx_read_done,
+};

+ 0 - 1
components/tp/luat_tp_ft3x68.c

@@ -237,7 +237,6 @@ void ft3x68_read_point(luat_tp_config_t* luat_tp_config, luat_tp_touch_t *input_
 		}
 	}
 	if (touch_num){                                                 /* point down */
-		uint8_t off_set;
 		for (read_index = 0; read_index < touch_num; read_index++){
 			pre_id[read_index] = read_index;
 			input_x = read_buf[read_index].x_h<<8 | read_buf[read_index].x_l;	/* x */

+ 1 - 2
components/tp/luat_tp_jd9261t.c

@@ -483,7 +483,6 @@ void jd9261t_read_point(luat_tp_config_t* luat_tp_config, luat_tp_touch_t *input
 		}
 	}
 	if (touch_num){                                                 /* point down */
-		uint8_t off_set;
 		for (read_index = 0; read_index < touch_num; read_index++){
 			pre_id[read_index] = read_index;
 			input_x = read_buf[read_index].x_h<<8 | read_buf[read_index].x_l;	/* x */
@@ -503,7 +502,7 @@ void jd9261t_read_point(luat_tp_config_t* luat_tp_config, luat_tp_touch_t *input
 }
 
 static int tp_jd9261t_read(luat_tp_config_t* luat_tp_config, luat_tp_data_t *luat_tp_data){
-    uint8_t touch_num=0, point_status=0;
+    uint8_t touch_num=0;
 
     jd9261t_ReadRegMulti(luat_tp_config, JT9261T_READ_COOR_ADDR, (uint8_t *)&luat_touch_info, sizeof(luat_touch_info));
     

+ 3 - 1
components/tp/luat_tp_reg.h

@@ -7,7 +7,9 @@ static inline int tp_i2c_write(luat_tp_config_t* luat_tp_config, uint8_t* cmd, s
     size_t len = cmd_len+data_len;
     uint8_t data_reg[len];
     memcpy(data_reg, cmd, cmd_len);
-    memcpy(data_reg+cmd_len, data, data_len);
+    if (data_len){
+        memcpy(data_reg+cmd_len, data, data_len);
+    }
     if (luat_tp_config->soft_i2c != NULL){
         return i2c_soft_send(luat_tp_config->soft_i2c, luat_tp_config->address, (char *)data_reg, len, 1);
     }else{

+ 1 - 4
components/u8g2/luat_lib_u8g2.c

@@ -934,15 +934,12 @@ u8g2.drawGtfontUtf8("啊啊啊",32,0,0)
 static int l_u8g2_draw_gtfont_utf8(lua_State *L) {
     unsigned char buf[128];
     size_t len;
-    int i = 0;
-    uint8_t strhigh,strlow ;
-    uint16_t e,str;
     const char *fontCode = luaL_checklstring(L, 1,&len);
     unsigned char size = luaL_checkinteger(L, 2);
     int x = luaL_checkinteger(L, 3);
     int y = luaL_checkinteger(L, 4);
     for(;;){
-        e = utf8_next((uint8_t)*fontCode);
+        uint16_t e = utf8_next((uint8_t)*fontCode);
         if ( e == 0x0ffff )
         break;
         fontCode++;

+ 1 - 0
components/usbapp/luat_lib_usbapp.c

@@ -9,6 +9,7 @@
 #include "luat_base.h"
 #include "luat_msgbus.h"
 #include "luat_zbuff.h"
+#include "luat_usbapp.h"
 
 #define USB_ID0 0
 

+ 12 - 4
luat/demo/airlink/uart_http/main.lua

@@ -1,17 +1,24 @@
 
 -- LuaTools需要PROJECT和VERSION这两个信息
-PROJECT = "airlink_uart"
+PROJECT = "airlink_uart_http"
 VERSION = "1.0.1"
 
 dnsproxy = require("dnsproxy")
 
-is_gw = false -- 是否是网关模式
+-----------------------------------
+-- 配置区域
+-----------------------------------
+is_gw = false -- 是否是网关模式, 要插卡, 要能联网
+uart_id = 1   -- 按实际接到UART的ID来设置, 1或2
+airlink.config(airlink.CONF_UART_ID, uart_id) -- 设置airlink使用的UART ID
+uart.setup(uart_id, 115200) -- 初始化UART1, 波特率115200, 8N1
+-- 注意, uart波特率的设置值,取决于两个设备的都支持的最高波特率, 例如2M也是可以的, 但要确保两个设备都支持2M波特率
+-------------------------------------
+
 
 sys.taskInit(function()
     sys.wait(500)
     log.info("airlink", "Starting airlink with UART task")
-    -- 首先, 初始化uart1, 115200波特率 8N1
-    uart.setup(1, 115200)
     -- 初始化airlink
     airlink.init()
     -- 注册网卡
@@ -30,6 +37,7 @@ sys.taskInit(function()
 end)
 
 sys.taskInit(function()
+    sys.wait(1000)
     while 1 do
         -- 发送给对端设备
         local data = rtos.bsp() .. " " .. os.date() .. " " .. (mobile and mobile.imei() or "")

+ 151 - 29
luat/demo/airtalk/airtalk_net_ctrl.lua

@@ -1,8 +1,9 @@
-require "audio_config"
 
-
-local mqttc = nil
+local speech_state = SP_T_IDLE
+local speech_mdoe
+local g_mqttc = nil
 local client_id
+local downlink_topic
 local topic_auth
 local topic_list_update
 local topic_talk_start
@@ -10,6 +11,9 @@ local topic_talk_stop
 local topic_list_update_ack
 local topic_talk_start_ack
 local topic_talk_stop_ack
+local speech_topic
+local speech_sample
+local dev_list
 
 local function task_cb(msg)
     log.info("未处理消息", msg[1], msg[2], msg[3], msg[4])
@@ -19,29 +23,136 @@ local function airtalk_event_cb(event, param)
     log.info("airtalk event", event, param)
 end
 
-local function mqtt_cb(mqtt_client, event, data, payload)
-    log.info(event)
+local function next_auth()
+    if speech_state == SP_T_IDLE then
+        obj = {["key"] = PRODUCT_KEY, ["device_type"] = 1}
+        data = json.encode(obj)
+        log.info(topic_auth, data)
+        mqttc:publish(topic_auth, data)
+    end
+end
+
+local function mqtt_cb(mqttc, event, topic, payload)
+    -- log.info(event)
+    local msg,data,obj,speech_topic,speech_sample
     if event == "conack" then
         -- 联上了
-        mqtt_client:subscribe("ctrl/downlink/" .. client_id .. "/#")--单主题订阅
+        mqttc:subscribe("ctrl/downlink/" .. client_id .. "/#")--单主题订阅
     elseif event == "suback" then
-        sys.sendMsg(AIRTALK_TASK_NAME, MSG_MQTT_READY)
+        if speech_state == SP_T_IDLE then
+            obj = {["key"] = PRODUCT_KEY, ["device_type"] = 1}
+            data = json.encode(obj)
+            log.info(topic_auth, data)
+            mqttc:publish(topic_auth, data)
+            sys.timerLoopStart(next_auth, 60000)    --1分钟就尝试重新鉴权
+        elseif speech_state == SP_T_CONNECTING then
+            speech_state = SP_T_CONNECTED
+            obj = {["result"] = SUCC, ["topic"] = msg[2], ["info"] = ""}
+            data = json.encode(obj)
+            log.info(topic_talk_start_ack, data)
+            mqttc:publish(topic_talk_start_ack, data)
+            airtalk.speech(true, speech_mdoe, speech_sample)
+        else
+            
+        end 
+        
     elseif event == "recv" then
-        log.info("mqtt", "downlink", "topic", data, payload)
+        local result = string.match(topic, downlink_topic)
+        if result then
+            log.info(topic, payload)
+            local obj,res,err = json.decode(payload)
+            if result == "0102" then
+                if res and obj["topic"] and obj["ssrc"] and obj["audio_code"] then
+                    if speech_state == SP_T_CONNECTED then
+                        obj = {["result"] = "failed", ["topic"] = msg[2], ["info"] = "last speech is running"}
+                        data = json.encode(obj)
+                        log.info(topic_talk_start_ack, data)
+                        mqttc:publish(topic_talk_start_ack, data)
+                        airtalk.speech(true, speech_mdoe, speech_sample)
+                    elseif speech_state == SP_T_DISCONNECTING then
+                        obj = {["result"] = "failed", ["topic"] = msg[2], ["info"] = "last speech not stop"}
+                        data = json.encode(obj)
+                        log.info(topic_talk_start_ack, data)
+                        mqttc:publish(topic_talk_start_ack, data)
+                        airtalk.speech(true, speech_mdoe, speech_sample)
+                    else
+                        speech_state = SP_T_CONNECTING
+                        speech_topic = msg[2]
+                        speech_sample = msg[4] == "amr-nb" and 8000 or 16000
+                        mqttc:subscribe(speech_topic)
+                        airtalk.set_topic(speech_topic)
+                        airtalk.set_ssrc(msg[3])
+                        speech_mdoe = airtalk.MODE_PERSON
+                    end
+                else
+                    obj = {["result"] = "failed", ["info"] = "json info error"}
+                    data = json.encode(obj)
+                    log.info(topic_talk_start_ack, data)
+                    mqttc:publish(topic_talk_start_ack, data)
+                end
+            elseif result == "0103" then
+                if speech_state == SP_T_IDLE then
+                    obj = {["result"] = "failed", ["info"] = "no speech"}
+                else
+                    obj = {["result"] = SUCC, ["info"] = ""}
+                    speech_state = SP_T_IDLE
+                    mqttc:unsubscribe(speech_topic)
+                    airtalk.speech(false)
+                    speech_topic = nil
+                end
+                data = json.encode(obj)
+                mqttc:publish(topic_talk_stop_ack, data)
+            elseif result == "0101" then
+                if res then
+                    dev_list = obj["dev_list"]
+                    for i=1,#dev_list do
+                        log.info(dev_list[i]["id"],dev_list[i]["name"])
+                    end
+                    obj = {["result"] = SUCC, ["info"] = ""}
+                else
+                    obj = {["result"] = "failed", ["info"] = "json info error"}
+                end
+                data = json.encode(obj)
+                log.info(topic_list_update_ack, data)
+                mqttc:publish(topic_list_update_ack, data)
+            elseif result == "8003" then
+            elseif result == "8004" then
+            elseif result == "8001" then
+                if res and obj["result"] then
+                    sys.timerLoopStart(next_auth, 3600000) --鉴权通过则60分钟后尝试重新鉴权
+                    mqttc:publish(topic_list_update, "")
+                end
+            elseif result == "8002" then
+                if res and obj["result"] == SUCC then
+                    dev_list = obj["dev_list"]
+                    for i=1,#dev_list do
+                        log.info(dev_list[i]["id"],dev_list[i]["name"])
+                    end
+                    sys.sendMsg(USER_TASK_NAME, MSG_READY)
+                end
+            else
+            end
+            decode_data = nil
+        end
+        result = nil
+        data = nil
+        obj = nil
+        
     elseif event == "sent" then
         -- log.info("mqtt", "sent", "pkgid", data)
-    -- elseif event == "disconnect" then
+    elseif event == "disconnect" then
+        speech_state = SP_T_IDLE
         -- 非自动重连时,按需重启mqttc
-        -- mqtt_client:connect()
+        -- mqttc:connect()
     else
     end
 end
 
 function airtalk_mqtt_task()
-    local msg,data,obj
+    local msg,data,obj,speech_topic,speech_sample
     --client_id也可以自己设置
     client_id = mobile.imei()
-
+    downlink_topic = "ctrl/downlink/" .. client_id .. "/(%w%w%w%w)"
     topic_auth = "ctrl/uplink/" .. client_id .."/0001"
     topic_list_update = "ctrl/uplink/" .. client_id .."/0002"
     topic_talk_start = "ctrl/uplink/" .. client_id .."/0003" 
@@ -49,34 +160,45 @@ function airtalk_mqtt_task()
     topic_list_update_ack = "ctrl/uplink/" .. client_id .."/8101"
     topic_talk_start_ack = "ctrl/uplink/" .. client_id .."/8102"
     topic_talk_stop_ack = "ctrl/uplink/" .. client_id .."/8103"
+    sys.timerLoopStart(next_auth, 900000)
 
-
-    audio_init()
-
-    mqttc = mqtt.create(nil, "mqtt.airtalk.luatos.com", 1883, false, {rxSize = 4096})
-    airtalk.config(airtalk.PROTOCOL_MQTT, mqttc, 200) -- 缓冲至少200ms播放
+    g_mqttc = mqtt.create(nil, "mqtt.airtalk.luatos.com", 1883, false, {rxSize = 32768})
+    airtalk.config(airtalk.PROTOCOL_MQTT, g_mqttc, 200) -- 缓冲至少200ms播放
     airtalk.on(airtalk_event_cb)
     airtalk.start()
 
-    mqttc:auth(client_id,client_id,mobile.muid()) -- client_id必填,其余选填
-    mqttc:keepalive(240) -- 默认值240s
-    mqttc:autoreconn(true, 3000) -- 自动重连机制
-    mqttc:debug(false)
-    mqttc:on(mqtt_cb)
+    g_mqttc:auth(client_id,client_id,mobile.muid()) -- client_id必填,其余选填
+    g_mqttc:keepalive(240) -- 默认值240s
+    g_mqttc:autoreconn(true, 3000) -- 自动重连机制
+    g_mqttc:debug(false)
+    g_mqttc:on(mqtt_cb)
 
     -- mqttc自动处理重连, 除非自行关闭
-    mqttc:connect()
+    g_mqttc:connect()
     while true do
         msg = sys.waitMsg(AIRTALK_TASK_NAME)
-        if type(msg) == 'table' and type(msg[1]) == "number" and msg[1] < 5 then
-            if msg[1] == MSG_MQTT_READY then
-                obj = {["key"] = PRODUCT_KEY, ["device_type"] = 1}
+        if type(msg) == 'table' and type(msg[1]) == "number" then
+            if msg[1] == MSG_PERSON_SPEECH_REQ then
+                -- if speech_state = 
+                -- speech_state = SP_T_CONNECTING
+                -- obj = {["to"] = msg[2]}
+                -- data = json.encode(obj)
+                -- log.info(topic_talk_start, data)
+                -- mqttc:publish(topic_talk_start, data)
+            elseif msg[1] == MSG_SPEECH_STOP_REQ then
+                speech_state = SP_T_IDLE
+                mqttc:unsubscribe(speech_topic)
+                airtalk.speech(false)
+                speech_topic = nil
                 data = json.encode(obj)
-                log.info(topic_auth, data)
-                mqttc:publish(topic_auth, data)
-                obj = nil
+                log.info(topic_talk_stop, data)
+                mqttc:publish(topic_talk_stop, data)
             end
+            obj = nil
+        else
+            log.info(type(msg), type(msg[1]))
         end
+        msg = nil
     end
 end
 

+ 18 - 1
luat/demo/airtalk/demo_define.lua

@@ -1,3 +1,20 @@
 
 AIRTALK_TASK_NAME = "airtalk_task"
-MSG_MQTT_READY = 0
+USER_TASK_NAME = "user"
+MSG_PERSON_SPEECH_REQ = 0
+MSG_SPEECH_STOP_REQ = 1
+MSG_PERSON_SPEECH_ACK = 2
+MSG_SPEECH_STOP_ACK = 3
+MSG_SPEECH_IND = 4
+MSG_READY = 10
+MSG_NOT_READY = 11
+MSG_KEY_PRESS = 12
+
+
+
+SP_T_IDLE = 0
+SP_T_CONNECTING = 1
+SP_T_CONNECTED = 2
+SP_T_DISCONNECTING = 3
+
+SUCC = "success"

+ 46 - 3
luat/demo/airtalk/main.lua

@@ -1,12 +1,56 @@
 PROJECT = "airtalk_demo"
 VERSION = "1.0.1"
-PRODUCT_KEY = "1234" -- 到 iot.openluat.com 创建项目,获取正确的项目id
+PRODUCT_KEY = "s1uUnY6KA06ifIjcutm5oNbG3MZf5aUv" -- 到 iot.openluat.com 创建项目,获取正确的项目id
 log.style(1)
 require "demo_define"
 require "airtalk_net_ctrl"
+require "audio_config"
 
+errDump.config(true, 600, "airtalk_test")
+
+local function key_cb()
+
+end
+
+--按下boot开始上传,再按下停止,加入了软件去抖,不需要长按了
+gpio.setup(0, key_cb, gpio.PULLDOWN, gpio.RISING)
+gpio.debounce(0, 200, 1)
+
+local test_ready = false
+local function task_cb(msg)
+    log.info("未处理消息", msg[1], msg[2], msg[3], msg[4])
+    if msg[1] == MSG_SPEECH_IND then
+
+    elseif msg[1] == MSG_NOT_READY then
+        test_ready = false
+        msg = sys.waitMsg(USER_TASK_NAME, MSG_KEY_PRESS)
+    end
+end
+
+local function user_task()
+    audio_init()
+    airtalk_mqtt_init()
+    local msg
+    while true do
+        msg = sys.waitMsg(USER_TASK_NAME, MSG_READY)
+        log.info("airtalk准备好了")
+        test_ready = true
+        while test_ready do
+            msg = sys.waitMsg(USER_TASK_NAME, MSG_KEY_PRESS)
+            if test_ready then
+                sys.sendMsg(AIRTALK_TASK_NAME, MSG_PERSON_SPEECH_REQ, "")   --测试阶段自动给一个device打
+                msg = sys.waitMsg(USER_TASK_NAME, MSG_PERSON_SPEECH_ACK)
+                msg = sys.waitMsg(USER_TASK_NAME, MSG_KEY_PRESS)
+                sys.sendMsg(AIRTALK_TASK_NAME, MSG_SPEECH_STOP_REQ) 
+                msg = sys.waitMsg(USER_TASK_NAME, MSG_SPEECH_STOP_ACK)
+            end
+        end
+        log.info("airtalk断线了")
+    end
+end
+
+sys.taskInitEx(user_task, USER_TASK_NAME, task_cb)
 
-airtalk_mqtt_init()
 --定期检查ram使用情况,及时发现内存泄露
 sys.taskInit(function()
     while true do
@@ -17,5 +61,4 @@ sys.taskInit(function()
         log.info("psram", rtos.meminfo("psram"))
     end
 end)
-
 sys.run()

+ 2 - 2
luat/demo/spi/air8000/spi_tf_wan/main.lua

@@ -49,7 +49,7 @@ local function tf_wan_init()
     -- 使用较低的统一速度以兼容TF卡和CH390
     spi.setup(spi_id, pin_cs, 0, 0, 8, SPI_SPEED)
     gpio.setup(pin_cs, 1)
-    fatfs.mount(fatfs.SPI, "/sd", spi_id, pin_cs, SPI_SPEED)
+    fatfs.mount(fatfs.SPI, "/sd", spi_id, pin_cs, SPI_SPEED)     -- 初始化TF 卡的时候,带入片选GPIO
 
     local data, err = fatfs.getfree("/sd")
     if data then
@@ -136,7 +136,7 @@ local function tf_wan_init()
     -- socket.LWIP_ETH 网络适配器编号
     -- netdrv.CH390外挂CH390
     -- SPI ID 1, 片选 GPIO12
-    netdrv.setup(socket.LWIP_ETH, netdrv.CH390, {spi=1,cs=12})
+    netdrv.setup(socket.LWIP_ETH, netdrv.CH390, {spi=1,cs=12})    -- 初始化以太网的时候,带入片选GPIO
     netdrv.dhcp(socket.LWIP_ETH, true)
     
     log.info("tf_wan", "WAN口初始化完成")

+ 2 - 2
luat/include/luat_gpio.h

@@ -9,10 +9,10 @@
 // 若bsp没有定义最大PIN编号, 那么默认给个128吧
 #ifdef LUAT_USE_DRV_GPIO
 #undef LUAT_GPIO_PIN_MAX
-#define LUAT_GPIO_PIN_MAX 256
+#define LUAT_GPIO_PIN_MAX 254
 #else
 #ifndef LUAT_GPIO_PIN_MAX
-#define LUAT_GPIO_PIN_MAX   (128)
+#define LUAT_GPIO_PIN_MAX   (127)
 #endif
 #endif
 

+ 1 - 1
luat/modules/luat_main.c

@@ -49,7 +49,7 @@ void luat_force_gc_all(void)
 }
 
 static int dolibrary (lua_State *L, const char *name) {
-  int status;
+//   int status;
   lua_getglobal(L, "require");
   lua_pushstring(L, name);
   lua_call(L, 1, 1);  /* call 'require(name)' */

+ 2 - 0
luat/vfs/luat_fs_mem.c

@@ -131,6 +131,8 @@ FILE* luat_vfs_ram_fopen(void* userdata, const char *filename, const char *mode)
                 return (FILE*)fd;
             }
         }
+        LLOGW("file %s not found, can't open with mode %s", filename, mode);
+        return NULL;
     }
     else {
         LLOGE("unkown open mode %s", mode);

BIN
module/Air780EPM/demo/modbus/test_core/LuatOS-SoC_V2007_Air780EPM_TEMP_20250610_150400.soc


+ 1 - 1
module/Air8000/demo/ble/peripheral/ble_peripheral.lua

@@ -1,6 +1,6 @@
 --[[
 @module  ble_ibeacon
-@summary Air8000演示ibeacon功能模块
+@summary Air8000演示peripheral功能模块
 @version 1.0
 @date    2025.07.01
 @author  wangshihao

+ 1 - 1
module/Air8000/demo/ble/scan/ble_scan.lua

@@ -1,6 +1,6 @@
 --[[
 @module  ble_ibeacon
-@summary Air8000演示ibeacon功能模块
+@summary Air8000演示scan功能模块
 @version 1.0
 @date    2025.07.01
 @author  wangshihao

+ 0 - 2
module/Air8000/demo/lowpower/low_power.lua

@@ -11,9 +11,7 @@ local is_udp = false --用户根据自己实际情况选择
 
 local Heartbeat_interval = 5 -- 发送数据的间隔时间,单位分钟
 -- 配置GPIO达到最低功耗
-gpio.setup(25, 0) -- 关闭GNSS电源
 gpio.setup(24, 0) -- 关闭三轴电源
-gpio.setup(23, 0) -- 关闭wifi电源
 -- 数据内容
 local heart_data = string.rep("1234567890", 10)
 local rxbuf = zbuff.create(8192)

+ 2 - 2
module/Air8000/demo/lowpower/main.lua

@@ -7,8 +7,8 @@ _G.sys = require("sys")
 _G.sysplus = require("sysplus")
 log.style(1)
 
---require "normal" --正常模式
-require "low_power" --低功耗模式
+require "normal" --正常模式
+-- require "low_power" --低功耗模式
 --  require "ultra_low_power" --超低功耗模式(PSM+模式)
 
 -- 用户代码已结束---------------------------------------------

+ 0 - 2
module/Air8000/demo/lowpower/normal.lua

@@ -6,9 +6,7 @@ local server_port = 47523
 
 local rxbuf = zbuff.create(8192)
 -- 配置GPIO达到最低功耗
-gpio.setup(25, 0) -- 关闭GNSS电源
 gpio.setup(24, 0) -- 关闭三轴电源
-gpio.setup(23, 0) -- 关闭wifi电源
 sys.subscribe("IP_READY", function(ip, adapter)
     log.info("mobile", "IP_READY", ip, (adapter or -1) == socket.LWIP_GP)
     sys.publish("net_ready")

+ 6 - 6
module/Air8000/demo/lowpower/ultra_low_power.lua

@@ -1,10 +1,9 @@
 local server_ip = "112.125.89.8" 
-local server_port = 47523 -- 换成自己的
+local server_port = 46153 -- 换成自己的
 local period = 3 * 60 * 60 * 1000 -- 3小时唤醒一次
 -- 配置GPIO达到最低功耗
-gpio.setup(25, 0) -- 关闭GNSS电源
-gpio.setup(24, 0) -- 关闭三轴电源
-gpio.setup(23, 0) -- 关闭wifi电源
+-- gpio.setup(24, 0) -- 关闭三轴电源
+
 local reason, slp_state = pm.lastReson() -- 获取唤醒原因
 log.info("wakeup state", pm.lastReson())
 local libnet = require "libnet"
@@ -29,7 +28,7 @@ local function testTask(ip, port)
         mobile.flymode(0, false) -- 退出飞行模式,进入psm+前进入飞行模式,唤醒后需要主动退出
     end
 
-    --gpio.close(32)
+    -- gpio.close(32)
 
     local netc, needBreak
     local result, param, is_err
@@ -61,9 +60,10 @@ local function testTask(ip, port)
     end
 
     uart.setup(1, 9600) -- 配置uart1,外部唤醒用
-    
+
     -- 配置GPIO以达到最低功耗的目的
 
+
     gpio.close(45) 
     gpio.close(46) --这里pwrkey接地才需要,不接地通过按键控制的不需要
 

+ 7 - 1
module/Air8000/project/整机开发板出厂工程/user/aircamera.lua

@@ -44,11 +44,13 @@ end)
 
 local function HTTP_SEND_FILE()
     send_end = "照片上传中.."
+    log.info("准备发送")
     local opts = {
         url = "http://upload.air32.cn/api/upload/jpg", -- 必选, 目标URL
         method = "POST", -- 可选,默认GET, 如果有body,files,forms参数,会设置成POST
         headers = {}, -- 可选,自定义的额外header
-        bodyfile="/ram/testcamera.jpg",   -- 可选,文件上传,若存在本参数,会强制以multipart/form-data形式上传
+        -- bodyfile="/ram/testcamera.jpg",   -- 可选,文件上传,若存在本参数,会强制以multipart/form-data形式上传
+        body = io.readFile("/ram/testcamera.jpg"),
         forms = {}, -- 可选,表单参数,若存在本参数,如果不存在files,按application/x-www-form-urlencoded上传
         -- body  = "abc=123",-- 可选,自定义body参数, 字符串/zbuff/table均可, 但不能与files和forms同时存在
         debug = false, -- 可选,打开调试日志,默认false
@@ -78,8 +80,10 @@ local function HTTP_SEND_FILE()
 end
 function aircamera.close()
     if camera_id then
+
         camera.close(camera_id)
     end
+
 end
 
 local function aircamera_run()
@@ -149,6 +153,8 @@ local function aircamera_ui()
         aircamera.init()
         aircamera_run()
     elseif TEST_MODE == 3 then
+        aircamera.close()
+        gpio.setup(147, 0) -- camera的供电使能脚
         TEST_MODE = 0
         return true
     end

+ 5 - 1
module/Air8000/project/整机开发板出厂工程/user/airgps.lua

@@ -13,11 +13,12 @@ local snr1 = ""
 local location = ""
 local move = "静止"
 local time = ""
+local gnss = require("agps_icoe")
 
 local function setup_gps()
     gps_is_run = true
     gps_state = "定位中"
-    local gnss = require("agps_icoe")
+    
     log.debug("提醒", "室内无GNSS信号,定位不会成功, 要到空旷的室外,起码要看得到天空")
     pm.power(pm.GPS, true)
     gnss.setup({
@@ -152,6 +153,8 @@ function airgps.run()       -- TTS 播放主程序
         lcd.flush()
         
         if run_state == 0 then    -- 等待结束
+            gnss.stop()
+            pm.power(pm.GPS, false)
             return true
         end
     end
@@ -159,6 +162,7 @@ end
 
 local function stop()
     gnss.stop()
+    pm.power(pm.GPS, false)
 end
 
 function airgps.tp_handal(x,y,event)       -- 判断是否需要停止播放

+ 50 - 0
module/Air8000/project/整机开发板出厂工程/user/airrecord.lua

@@ -0,0 +1,50 @@
+local airrecord = {}
+
+
+
+local airaudio  = require "airaudio"
+local taskName = "airrecord"
+local run_state = 0
+
+local function audio_play()
+
+end
+
+function audio_stop()
+    sysplus.sendMsg(taskName, MSG_PD)
+end
+
+local function audio_task()
+    airaudio.init()
+    if fonts.list then
+        log.info("fonts", "u8g2", json.encode(fonts.list("u8g2")))
+    end
+    audio_play()
+end
+
+
+function airrecord.run()       -- TTS 播放主程序
+    if run_state == 0 then
+        lcd.setFont(lcd.font_opposansm12_chinese) -- 具体取值可参考api文档的常量表
+        sysplus.taskInitEx(audio_task, taskName)
+        run_state = 1
+    end
+    lcd.showImage(120,300,"/luadb/back.jpg")
+    lcd.showImage(0,448,"/luadb/Lbottom.jpg")
+    lcd.flush()
+    while true do
+        sys.wait(30)
+        if run_state == 0 then    -- 等待结束
+            return true
+        end
+    end
+end
+
+
+function airrecord.tp_handal(x,y,event)       -- 判断是否需要停止播放
+    if x > 120 and  x < 200 and y > 300  and  y < 380 then
+        audio_stop()
+    end
+end
+
+return airrecord

+ 37 - 36
module/Air8000/project/整机开发板出厂工程/user/airtf.lua

@@ -61,37 +61,29 @@ function airtf.run()
         if operation_index == 1 then
             -- 初始化SPI接口
             spi_id, pin_cs = fatfs_spi_pin()
-            
-            -- 启用CH390供电(GPIO140)
-            local ch390_power_ok, ch390_error = pcall(function()
-                gpio.setup(140, 1, gpio.PULLUP)
-                sys.wait(500) -- 等待电源稳定
-            end)
-            
-            if ch390_power_ok then
-                operation_status = "CH390供电已启用"
-            else
-                operation_status = "CH390供电失败"
-                fail = fail + 1
-                operation_index = 1
-            end
-            
-            -- 设置SPI
-            spi.setup(spi_id, nil, 0, 0, pin_cs, 400 * 1000)
-            gpio.setup(pin_cs, 1)
-            operation_status = operation_status..",SPI初始化完成"
+        
+
+            spi.setup(spi_id, nil, 0, 0, 8, 400 * 1000)      --  初始化SPI 接口
+      
+            operation_status = "SPI初始化完成"
             sys.wait(50) 
             
         elseif operation_index == 2 then
             -- 挂载TF卡(带重试机制)
             mount_retry_count = mount_retry_count + 1
-            local mount_ok, mount_err = fatfs.mount(fatfs.SPI, "/sd", spi_id, pin_cs, 10 * 1000 * 1000) -- 降低SPI速率
             
-            if mount_ok then
+            fatfs.unmount("/sd")
+            local mount_ok, mount_err = fatfs.mount(fatfs.SPI, "/sd", spi_id, pin_cs, 10 * 1000 * 1000) -- 传输tf 卡的片选
+            
+
+            if  mount_ok then
                 tf_mounted = true
                 operation_status = "挂载成功"
+                os.remove("/sd/io_test/testfile.txt")
+                io.rmdir("/sd/io_test")
             else
                 operation_status = "挂载失败("..(mount_err or "未知")..")"
+                log.info(operation_status)
                 fail = fail + 1
                 operation_index = 1
                 -- 最多重试3次
@@ -108,9 +100,10 @@ function airtf.run()
             -- 创建目录
             if tf_mounted then
                 if io.mkdir("/sd/io_test") then
-                    operation_status = "完成"
+                    operation_status = "创建目录完成"
                 else
-                    operation_status = "失败"
+                    operation_status = "创建目录失败1"
+                    log.info(operation_status)
                     fail = fail + 1
                     operation_index = 1
                 end
@@ -125,9 +118,10 @@ function airtf.run()
                 local file = io.open("/sd/io_test/testfile.txt", "wb")
                 if file then
                     file:close()
-                    operation_status = "完成"
+                    operation_status = "创建测试文件完成"
                 else
-                    operation_status = "失败"
+                    operation_status = "创建测试文件失败"
+                    log.info(operation_status)
                     fail = fail + 1
                     operation_index = 1
                 end
@@ -143,9 +137,10 @@ function airtf.run()
                 if file then
                     file:write("LuatOS TF卡测试")
                     file:close()
-                    operation_status = "完成"
+                    operation_status = "写入内容完成"
                 else
-                    operation_status = "失败"
+                    operation_status = "写入内容失败"
+                    log.info(operation_status)
                     fail = fail + 1
                     operation_index = 1
                 end
@@ -163,7 +158,8 @@ function airtf.run()
                     file:close()
                     operation_status = "读取成功"
                 else
-                    operation_status = "失败"
+                    operation_status = "读取失败"
+                    log.info(operation_status)
                     fail = fail + 1
                     operation_index = 1
                 end
@@ -176,9 +172,10 @@ function airtf.run()
             -- 删除文件
             if tf_mounted then
                 if os.remove("/sd/io_test/testfile.txt") then
-                    operation_status = "完成"
+                    operation_status = "删除文件完成"
                 else
-                    operation_status = "失败"
+                    operation_status = "删除文件失败"
+                    log.info(operation_status)
                     fail = fail + 1
                     operation_index = 1
                 end
@@ -191,9 +188,10 @@ function airtf.run()
             -- 删除目录
             if tf_mounted then
                 if io.rmdir("/sd/io_test") then
-                    operation_status = "完成"
+                    operation_status = "删除目录完成"
                 else
-                    operation_status = "失败"
+                    operation_status = "删除目录失败"
+                    log.info(operation_status)
                 end
             else
                 operation_status = "跳过(TF卡未挂载)"
@@ -205,9 +203,10 @@ function airtf.run()
             if tf_mounted then
                 if fatfs.unmount("/sd") then
                     tf_mounted = false
-                    operation_status = "完成"
+                    operation_status = "卸载TF卡完成"
                 else
-                    operation_status = "失败"
+                    operation_status = "卸载TF卡失败"
+                    log.info(operation_status)
                     fail = fail + 1
                     operation_index = 1
                 end
@@ -221,10 +220,11 @@ function airtf.run()
             if spi_id then
                 spi.close(spi_id)
                 spi_id = nil
-                operation_status = "完成"
+                operation_status = "关闭SPI完成"
                 sucess = sucess +1
             else
-                operation_status = "未初始化"
+                operation_status = "关闭SPI失败"
+                log.info(operation_status)
                 fail = fail + 1
                 operation_index = 1
             end
@@ -245,6 +245,7 @@ function airtf.run()
     -- 尝试清理资源
     if tf_mounted then
         fatfs.unmount("/sd")
+        tf_mounted = false
     end
     if spi_id then
         spi.close(spi_id)

+ 62 - 9
module/Air8000/project/整机开发板出厂工程/user/main.lua

@@ -1,5 +1,6 @@
 PROJECT = "startupv13"
 VERSION = "1.0.0"
+PRODUCT_KEY = "29uptfBkJMwFC7x7QeW10UPO3LecPYFu"
 
 log.info("main", PROJECT, VERSION)
 
@@ -30,10 +31,13 @@ local airbuzzer = require "airbuzzer"
 local multi_network = require "multi_network"
 local talk = require "talk"
 
-
+local airrecord = require "airrecord"
 local taskName = "MAIN"
 local  fota_wifi = require("fota_wifi")
 local sid = 0
+libfota2 = require "libfota2"
+
+
 
 -- 按键事件类型:
 -- "switch": 短按开机键切换菜单;  
@@ -123,7 +127,7 @@ local function main_local(x,y)
   end
 end
 
-local function handal_main(x,y)
+local function home_first_page(x,y)
   key =  main_local(x,y) 
   log.info("tp_handal key",key)
   if key == 1 then
@@ -147,10 +151,11 @@ local function handal_main(x,y)
   end
 end
 
-local function handal_main1(x,y)
+local function home_second_page(x,y)
   key =  main_local(x,y) 
   log.info("tp_handal key",key)
   if key == 1 then
+    cur_fun  = "airrecord"
   elseif key == 2 then
    
   elseif key == 3 then
@@ -170,7 +175,7 @@ local function handal_main1(x,y)
   end
 end
 
-local function handal_main2(x,y)
+local function home_third_page(x,y)
   key =  main_local(x,y) 
   log.info("tp_handal key",key)
   if key == 1 then
@@ -188,7 +193,7 @@ local function handal_main2(x,y)
   end
 end
 
-local function handal_main3(x,y)
+local function home_fourth_page(x,y)
   key =  main_local(x,y) 
   log.info("tp_handal key",key)
   if key == 1 then
@@ -213,13 +218,13 @@ local function  tp_handal(tp_device,tp_data)
   end
   if tp_data[1].event == 2  and   lock_push == 0 then
     if cur_fun == "main" then
-      handal_main(tp_data[1].x,tp_data[1].y)
+      home_first_page(tp_data[1].x,tp_data[1].y)
     elseif cur_fun == "main1" then
-      handal_main1(tp_data[1].x,tp_data[1].y)
+      home_second_page(tp_data[1].x,tp_data[1].y)
     elseif cur_fun == "main2" then
-      handal_main2(tp_data[1].x,tp_data[1].y)
+      home_third_page(tp_data[1].x,tp_data[1].y)
     elseif cur_fun == "main3" then
-      handal_main3(tp_data[1].x,tp_data[1].y)
+      home_fourth_page(tp_data[1].x,tp_data[1].y)
     elseif cur_fun == "airtts" then
       airtts.tp_handal(tp_data[1].x,tp_data[1].y,tp_data[1].event)
     elseif cur_fun == "aircamera" then
@@ -250,6 +255,8 @@ local function  tp_handal(tp_device,tp_data)
       airble.tp_handal(tp_data[1].x,tp_data[1].y,tp_data[1].event)
     elseif cur_fun == "talk" then
       talk.tp_handal(tp_data[1].x,tp_data[1].y,tp_data[1].event)
+    elseif cur_fun == "airrecord" then
+      airrecord.tp_handal(tp_data[1].x,tp_data[1].y,tp_data[1].event)
     end
     lock_push = 1
   end
@@ -450,6 +457,11 @@ local function draw_talk()
   end
 end
 
+local function draw_airrecord()
+  if  airrecord.run()   then
+    cur_fun = "main"
+  end
+end
 
 local function draw()
   if cur_fun == "camshow" then
@@ -499,6 +511,8 @@ local function draw()
     draw_airble()
   elseif cur_fun == "talk" then
     draw_talk()
+  elseif cur_fun == "airrecord" then
+    draw_airrecord()
   end
   
   lcd.showImage(0,448,"/luadb/Lbottom.jpg")
@@ -544,7 +558,46 @@ local function  wififota()
   fota_wifi.request()
 end
 
+local function fota_cb(ret)
+    log.info("fota", ret)
+    if ret == 0 then
+        log.info("升级包下载成功,重启模块")
+        rtos.reboot()
+    elseif ret == 1 then
+        log.info("连接失败", "请检查url拼写或服务器配置(是否为内网)")
+    elseif ret == 2 then
+        log.info("url错误", "检查url拼写")
+    elseif ret == 3 then
+        log.info("服务器断开", "检查服务器白名单配置")
+    elseif ret == 4 then
+        log.info("接收报文错误", "检查模块固件或升级包内文件是否正常")
+    elseif ret == 5 then
+        log.info("版本号书写错误", "iot平台版本号需要使用xxx.yyy.zzz形式")
+    else
+        log.info("不是上面几种情况 ret为", ret)
+    end
+end
+
+local ota_opts = {}
+sys.taskInit(function()
+    -- 等待网络就行后开始检查升级
+    sys.waitUntil("IP_READY")
+    log.info("开始检查升级")
+    sys.wait(500)
+    libfota2.request(fota_cb, ota_opts)
+end)
 
+local  function hardware_start ()
+  gpio.setup(140, 1, gpio.PULLUP)  --  打开CH390 电源
+  sys.wait(50) -- 等待电源稳定
+  gpio.setup(12,1)--上拉ch390使用spi的cs引脚避免干扰
+  sys.wait(10)--等待稳定
+  gpio.setup(20, 1)  -- 上拉tf 卡 cs 管脚
+
+end
+-- 演示定时自动升级, 每隔4小时自动检查一次
+sys.timerLoopStart(libfota2.request, 4 * 3600000, fota_cb, ota_opts)
+sysplus.taskInitEx(hardware_start,"hardware_start")
 sysplus.taskInitEx(wififota,"fota_wifi")
 sys.subscribe("IP_READY", ip_ready_handle)
 sysplus.taskInitEx(UITask, taskName)

+ 65 - 9
script/libs/libnetif.lua

@@ -19,7 +19,7 @@ httpdns = require("httpdns")
 -- 设置pingip
 local wifi_ping_ip
 local eth_ping_ip
-
+local local_network_mode
 
 local ping_time = 10000
 -- 连接状态
@@ -76,12 +76,17 @@ local function apply_priority()
 
     -- 从存在可用网卡到没有可用网卡,才通知回调
     if usable == false and  current_active ~= nil then
+        --避免重复通知
+        current_active = nil
         states_cbfnc(nil, -1)
     end
 end
 
 --打开以太网Wan功能
 local function setup_eth(config)
+    if config.local_network_mode then
+        local_network_mode = true
+    end
     eth_ping_ip = config.ping_ip
     if type(config.ping_time) == "number" then
         ping_time = config.ping_time
@@ -93,7 +98,11 @@ local function setup_eth(config)
     sys.wait(100)
     if config.tp == nil then
         log.info("8101以太网")
-        netdrv.setup(socket.LWIP_ETH)
+        if netdrv.setup(socket.LWIP_ETH) == false then
+            log.error("以太网初始化失败")
+            gpio.close(config.pwrpin)
+            return false
+        end      
     else
         log.info("config.opts.spi",config.opts.spi,",config.type",config.tp)
         -- 配置SPI和初始化网络驱动
@@ -113,7 +122,11 @@ local function setup_eth(config)
         -- socket.LWIP_ETH 网络适配器编号
         -- netdrv.CH390外挂CH390
         -- SPI ID 1, 片选 GPIO12
-        netdrv.setup(socket.LWIP_ETH, config.tp, config.opts)
+        if netdrv.setup(socket.LWIP_ETH, config.tp, config.opts) == false then
+            log.error("以太网初始化失败")
+            gpio.close(config.pwrpin)
+            return false
+        end    
     end
     netdrv.dhcp(socket.LWIP_ETH, true)
     log.info("以太网初始化完成")
@@ -122,6 +135,9 @@ end
 
 --打开8101spi以太网Wan功能
 local function setup_eth_user1(config)
+    if config.local_network_mode then
+        local_network_mode = true
+    end
     eth_ping_ip = config.ping_ip
     if type(config.ping_time) == "number" then
         ping_time = config.ping_time
@@ -149,7 +165,12 @@ local function setup_eth_user1(config)
     -- socket.LWIP_ETH 网络适配器编号
     -- netdrv.CH390外挂CH390
     -- SPI ID 1, 片选 GPIO12
-    netdrv.setup(socket.LWIP_USER1, config.tp, config.opts)
+    if netdrv.setup(socket.LWIP_USER1, config.tp, config.opts) == false then
+        log.error("以太网初始化失败")
+        gpio.close(config.pwrpin)
+        return false
+    end
+    
     netdrv.dhcp(socket.LWIP_USER1, true)
     log.info("以太网初始化完成")
     return true
@@ -157,6 +178,9 @@ end
 
 --连接wifi(STA模式)
 local function set_wifi_info(config)
+    if config.local_network_mode then
+        local_network_mode = true
+    end
     wifi_ping_ip = config.ping_ip
     if type(config.ping_time) == "number" then
         ping_time = config.ping_time
@@ -187,6 +211,9 @@ libnetif.set_priority_order({
         WIFI = { -- WiFi配置
             ssid = "your_ssid",       -- WiFi名称(string)
             password = "your_pwd",    -- WiFi密码(string)
+            local_network_mode = true,-- 局域网模式(选填参数),设置为true时,libnetif会自动将ping_ip设置为网卡的网关ip。
+                                      -- 用户不需要传入ping_ip参数,即使传入了,也无效。
+                                      -- 这个模式的使用场景,仅适用于局域网环境;可以访问外网时,不要使用
             ping_ip = "112.125.89.8", -- 连通性检测IP(选填参数),默认使用httpdns获取baidu.com的ip作为判断条件,
                                       -- 注:如果填写ip,则ping通作为判断网络是否可用的条件,
                                       -- 所以需要根据网络环境填写内网或者外网ip,
@@ -199,6 +226,9 @@ libnetif.set_priority_order({
     { -- 次优先级网络
         ETHERNET = { -- 以太网配置
             pwrpin = 140,             -- 供电使能引脚(number)
+            local_network_mode = true,-- 局域网模式(选填参数),设置为true时,libnetif会自动将ping_ip设置为网卡的网关ip。
+                                      -- 用户不需要传入ping_ip参数,即使传入了,也无效。
+                                      -- 这个模式的使用场景,仅适用于局域网环境;可以访问外网时,不要使用
             ping_ip = "112.125.89.8", -- 连通性检测IP(选填参数),默认使用httpdns获取baidu.com的ip作为判断条件,
                                       -- 注:如果填写ip,则ping通作为判断网络是否可用的条件,
                                       -- 所以需要根据网络环境填写内网或者外网ip,
@@ -347,7 +377,11 @@ function libnetif.setproxy(adapter, main_adapter, other_configs)
         end
         -- 初始化以太网,Air8000 指定使用 CH390 芯片。
         log.info("netdrv", "初始化以太网", other_configs.tp, other_configs.opts)
-        netdrv.setup(socket.LWIP_ETH, other_configs.tp, other_configs.opts)
+        if netdrv.setup(socket.LWIP_ETH, other_configs.tp, other_configs.opts) == false then
+            log.error("初始化以太网失败")
+            gpio.close(other_configs.ethpower_en)
+            return false
+        end
         log.info("netdrv", "等待以太网就绪")
         sys.wait(1000)
         -- 设置以太网的 IP 地址、子网掩码、网关地址
@@ -424,7 +458,11 @@ function libnetif.setproxy(adapter, main_adapter, other_configs)
         end
         -- 初始化以太网,Air8000 指定使用 CH390 芯片。
         log.info("netdrv", "初始化以太网", other_configs.tp, other_configs.opts)
-        netdrv.setup(socket.LWIP_USER1, other_configs.tp, other_configs.opts)
+        if netdrv.setup(socket.LWIP_USER1, other_configs.tp, other_configs.opts) == false then
+            log.error("初始化以太网失败")
+            gpio.close(other_configs.ethpower_en)
+            return false
+        end
         log.info("netdrv", "等待以太网就绪")
         sys.wait(1000)
         -- 设置以太网的 IP 地址、子网掩码、网关地址
@@ -464,7 +502,11 @@ function libnetif.setproxy(adapter, main_adapter, other_configs)
         sys.wait(100)
         if other_configs.tp == nil then
             log.info("8101以太网")
-            netdrv.setup(socket.LWIP_ETH)
+            if netdrv.setup(socket.LWIP_ETH) == false then
+            log.error("以太网初始化失败")
+            gpio.close(other_configs.ethpower_en)
+            return false
+        end  
         else
             log.info("config.opts.spi", other_configs.opts.spi, ",config.type", other_configs.tp)
             -- 配置SPI和初始化网络驱动
@@ -484,6 +526,7 @@ function libnetif.setproxy(adapter, main_adapter, other_configs)
             local success = netdrv.setup(socket.LWIP_ETH, other_configs.tp, other_configs.opts)
             if not success then
                 log.error("以太网初始化失败")
+                gpio.close(other_configs.ethpower_en)
                 return false
             end
         end
@@ -524,7 +567,11 @@ function libnetif.setproxy(adapter, main_adapter, other_configs)
         -- socket.LWIP_ETH 网络适配器编号
         -- netdrv.CH390外挂CH390
         -- SPI ID 1, 片选 GPIO12
-        netdrv.setup(socket.LWIP_USER1, other_configs.tp, other_configs.opts)
+        if netdrv.setup(socket.LWIP_USER1, other_configs.tp, other_configs.opts) == false then
+            log.error("以太网初始化失败")
+            gpio.close(other_configs.ethpower_en)
+            return false
+        end
         netdrv.dhcp(socket.LWIP_USER1, true)
         log.info("以太网初始化完成")
         local count = 1
@@ -612,7 +659,16 @@ local function ping_request(adaptertest)
 end
 -- 网卡上线回调函数
 local function ip_ready_handle(ip, adapter)
-    log.info("ip_ready_handle", ip, type_to_string(adapter),"state",available[adapter])
+    local _, _, gw = socket.localIP(adapter)
+    log.info("ip_ready_handle", ip, type_to_string(adapter),"state",available[adapter],"gw", gw)
+    if local_network_mode then
+        if adapter == socket.LWIP_ETH or adapter == socket.LWIP_USER1 then
+            eth_ping_ip = gw
+        elseif adapter == socket.LWIP_STA then
+            wifi_ping_ip = gw
+        end
+    end
+    log.info("eth_ping_ip",eth_ping_ip,"wifi_ping_ip",wifi_ping_ip)
     -- 需要ping操作,ping通后认为网络可用
     if available[adapter] == connection_states.OPENED then
         available[adapter] = connection_states.CONNECTING

+ 0 - 0
script/demolib/netLed.lua → script/libs/netLed.lua